SVM 分类 - R 中的归一化
Posted
技术标签:
【中文标题】SVM 分类 - R 中的归一化【英文标题】:SVM classification - normalization in R 【发布时间】:2016-08-12 05:37:38 【问题描述】:我想使用SVM
分类。在我使用SVM
模型之前,如何标准化(或缩放)我的数据集中每列的特征?
train <- read.csv("train.csv")
test <- read.csv("test.csv")
svm.fit=svm(as.factor(type)~ ., data=train, core="libsvm",kernel="linear",cross=10, probability=TRUE)
【问题讨论】:
您可以提供一些示例数据吗?不确定您拥有什么类型的数据(例如,离散、连续) 【参考方案1】:您可以在sapply
中使用scale
函数:
scaleddf <- as.data.frame(sapply(train, function(i) if(is.numeric(i)) scale(i) else i))
如果您的数据包含具有NaN
值或方差为 0 的变量,您可以在使用上述函数之前先对原始数据集进行处理和子集化。
# get a vector of variables to drop
dropVars <- sapply(train, function(i)
if((is.numeric(i) & !any(is.nan(i)) & sd(i) > 0) | is.factor(i) | is.character(i)) TRUE
else FALSE
# subset test dropping columns that don't fit the criteria
smallerdf <- test[, dropVars]
然后将上面原来的sapply
函数应用到smallerdf
【讨论】:
它给了我这个错误。Error in model.frame.default(formula, data) : variable lengths differ (found for 'lice_id')
我已经用 na.action=na.omit
尝试过,但这似乎也没有帮助。
@Mahsolid 我不确定问题出在哪里,但听起来其中一个变量缺少值。通过在搜索引擎中运行此错误消息以及您正在使用的功能,您可能会找到更好的答案。您还可以查看您的变量,看看是否发现了缺失值。如果这些都没有找到答案,那么可能值得在 SO 上发布一个新问题,以便更经常使用此功能的人可以看看。以上是关于SVM 分类 - R 中的归一化的主要内容,如果未能解决你的问题,请参考以下文章