r语言 - 如何在多分类 SVM 中进行缩放?



我正在使用R来解决多分类问题。我想使用e1071.如何对多类分类进行缩放?在这个页面上,他们说

"一个逻辑向量,指示要缩放的变量。如果比例长度为 1,则根据需要多次回收该值。默认情况下,数据在内部缩放(x 和 y 变量(为零均值和单位方差。将返回中心值和比例值,并用于以后的预测。

我想知道 y 是如何缩放的。当我们有 m 个类时,我们有 m 个 y 列,它们有不同的均值和方差。因此,在缩放 y 之后,同一类的每一列中都有不同的数字!这对我来说没有意义。

你能告诉我缩放是怎么回事吗?我很想知道这一点。

我也想知道这意味着什么:

"如果比例尺为1,则根据需要多次回收该值。">

让我们看一下参数scale的一些信息:

指示要缩放的变量的逻辑向量。如果比例长度为 1,则根据需要多次回收该值。默认情况下,数据在内部缩放(x 和 y 变量(为零均值和单位方差。

这里期望的值是一个逻辑向量(所以是TRUEFALSE的向量(。如果此向量具有与矩阵中的列一样多的值,则列是否根据您的向量进行缩放(例如,如果您有svm(..., scale = c(TRUE, FALSE, TRUE), ...)则缩放第一列和第三列,而第二列不缩放(。

上面引用的第三句话解释了缩放过程中发生的情况:"数据缩放 [...]均值和单位方差为零"。为此:

  1. 您将列的每个值减去该列的平均值(这称为居中(,并且
  2. 然后,将此列的每个值除以列标准偏差(这是实际缩放(。

您可以使用以下示例重现缩放:

# 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 之间。所有这些测量值都处于不同的尺度上,因此很难比较它们。缩放变量可以解决此问题。此外,如果一个变量达到高数值而其他变量没有达到高数值,则在多变量算法中,该变量可能会更加重要。因此,在大多数情况下,对于此类方法,建议进行缩放。

缩放确实会影响每个变量的均值和方差,但由于它平等地应用于每一行(可能属于不同的类(,这不是问题。

相关内容

  • 没有找到相关文章

最新更新