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 中的归一化的主要内容,如果未能解决你的问题,请参考以下文章

分类变量的归一化

有关利用libsvm对数据进行归一化的问题。

MATLAB中神经网络建模中的归一化和非归一化

R中连续神经网络训练中数据的归一化

matlab标准化和反标准化——zscore

同一向量的归一化在两种情况下给出不同的值?