让我们看一下参数的一些信息scale
:
指示要缩放的变量的逻辑向量。如果 scale 的长度为 1,则该值将根据需要循环多次。默认情况下,数据在内部(x 和 y 变量)被缩放到零均值和单位方差。
此处预期的值是一个逻辑向量(因此是TRUE
和的向量FALSE
)。如果此向量的值与矩阵中的列数一样多,则根据您的向量对列进行缩放或不缩放(例如,如果您svm(..., scale = c(TRUE, FALSE, TRUE), ...)
的第一列和第三列被缩放,而第二列则没有)。
上面引用的第三句话解释了缩放期间发生的情况:“数据被缩放 [...] 到零均值和单位方差”。去做这个:
- 您用该列的平均值减去该列的每个值(这称为居中),并且
- 然后将此列的每个值除以列标准偏差(这是实际缩放比例)。
您可以使用以下示例重现缩放:
# create a data.frame with four variables
# as you can see the difference between each term of aa and bb is one
# and the difference between each term of cc is 21.63 while dd is random
(df <- data.frame(aa = 11:15,
bb = 1:5,
cc = 1:5*21.63,
dd = rnorm(5,12,4.2)))
# then we substract the mean of each column to this colum and
# put everything back together to a data.frame
(df1 <- as.data.frame(sapply(df, function(x) {x-mean(x)})))
# you can observe that now the mean value of each column is 0 and
# that aa==bb because the difference between each term was the same
# now we divide each column by its standard deviation
(df1 <- as.data.frame(sapply(df1, function(x) {x/sd(x)})))
# as you can see, the first three columns are now equal because the
# only difference between them was that cc == 21.63*bb
# the data frame df1 is now identical to what you would obtain by
# using the default scaling function `scale`
(df2 <- scale(df))
当您的列代表不同比例的数据时,缩放是必要的。例如,如果您想区分肥胖者和瘦者,您可以收集他们的体重、身高和腰臀比。体重可能在 50 到 95 公斤之间,而身高在 175 厘米(± 20 厘米)左右,腰臀比在 0.60 到 0.95 之间。所有这些测量都在不同的尺度上,因此很难比较它们。缩放变量可以解决这个问题。此外,如果一个变量达到高数值而其他变量没有,则在多变量算法中,该变量可能会被赋予更多的重要性。因此,在大多数情况下,建议对此类方法进行缩放。
缩放确实会影响每个变量的均值和方差,但由于它平等地应用于每一行(可能属于不同的类),这不是问题。