【问题标题】:How is scaling done in multi classification SVM?在多分类 SVM 中如何进行缩放?
【发布时间】:2019-12-18 10:48:29
【问题描述】:

我正在使用 R 解决多分类问题。我想使用e1071。如何为多类分类进行缩放?在这个page,他们说

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

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

能否请您告诉我在缩放方面发生了什么?我很想知道这一点。

我也想知道这是什么意思:

“如果 scale 的长度为 1,则该值会根据需要循环多次。”

【问题讨论】:

    标签: r svm multiclass-classification e1071


    【解决方案1】:

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

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

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

    【讨论】:

    • 我知道缩放背后的逻辑,我的问题是当我们有多个类时如何缩放 y(响应向量 {1,-1})。
    • 我将编辑我的问题,我的问题不是缩放功能是用于多分类的包 e1071 中的缩放。
    • 我不知道你的意思是什么类...如果你的一列是一个因素,那么你就不能扩展它。如果此因素定义了每行所属的类,则忽略此列。变量的缩放不影响行/类之间的差异,这是缩放的属性之一
    • scale 在此包中的 svm 函数中与标准 scale 函数相同。
    猜你喜欢
    • 2015-12-09
    • 2015-11-18
    • 2012-04-02
    • 2014-12-01
    • 2015-12-21
    • 2010-12-29
    • 2015-01-27
    • 2018-06-29
    相关资源
    最近更新 更多