SVM 分类 - R 中的归一化

SVM classification - normalization in R

我想使用 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)

您可以在 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