Scikit-learn:权重在岭回归中的作用

Posted

技术标签:

【中文标题】Scikit-learn:权重在岭回归中的作用【英文标题】:Scikit-learn: role of weights in Ridge Regression 【发布时间】:2013-07-10 16:48:18 【问题描述】:

我正在使用库 scikit-learn 对单个样本执行带有权重的岭回归。这可以通过:esimator.fit(X, y, sample_weight=some_array) 来完成。直观地说,我认为更大的权重意味着与相应样本的更大相关性。

但是,我在以下二维示例中测试了上述方法:

    from sklearn import linear_model
    import numpy
    import matplotlib.pyplot as plt

    #Data
    x= numpy.array([[0], [1],[2]])
    y= numpy.array([[0], [2],[2]])
    sample_weight = numpy.array([1,1, 1])
    #Ridge regression
    clf = linear_model.Ridge(alpha = 0.1)
    clf.fit(x, y, sample_weight = sample_weight)
    #Plot
    xp = numpy.linspace(-1,3)
    yp=list()
    for x_i in xp:    
        yp.append(clf.predict(x_i)[0,0])
    plt.plot(xp,yp)
    plt.hold(True)
    x = list(x)
    y = list(y)
    plt.plot(x,y,'or')

我运行这段代码,然后我再次运行它,使第一个样本的重量加倍:

sample_weight = numpy.array([2,1, 1])

生成的线条远离权重较大的样本。这是违反直觉的,因为我预计权重较大的样本具有更大的相关性。

是我错误地使用了这个库,还是其中有错误?

【问题讨论】:

您是否尝试过相反的操作。也许权重是倒置的。我在逻辑回归类中发现了类似的东西。尝试将其设置为 numpy.array([0.5,1,1])。 谢谢,这就是我打算做的。但是,我想了解为什么权重是倒置的。 好吧,这里也一样。 sklearn 中许多方法的文档非常简单。 【参考方案1】:

权重没有倒置。可能你犯了一个愚蠢的错误,或者sklearn 中有一个错误,现在已修复。代码

from sklearn import linear_model
import numpy
import matplotlib.pyplot as plt

#Data
x = numpy.array([[0], [1],[2]])
y = numpy.array([[0], [2],[2]])
sample_weight1 = numpy.array([1, 1, 1])
sample_weight2 = numpy.array([2, 1, 1])

#Ridge regressions
clf1 = linear_model.Ridge(alpha = 0.1).fit(x, y, sample_weight = sample_weight1)
clf2 = linear_model.Ridge(alpha = 0.1).fit(x, y, sample_weight = sample_weight2)

#Plot
plt.scatter(x,y)
xp = numpy.linspace(-1,3)
plt.plot(xp,clf1.predict(xp.reshape(-1, 1)))
plt.plot(xp,clf2.predict(xp.reshape(-1, 1)))
plt.legend(['equal weights', 'first obs weights more'])
plt.title('Increasing weight of the first obs moves the line closer to it');

为我绘制这张图,其中第二条线(第一权重增加)更接近第一个观察值:

【讨论】:

以上是关于Scikit-learn:权重在岭回归中的作用的主要内容,如果未能解决你的问题,请参考以下文章

在 scikit-learn 的逻辑回归中设置类权重的数学原理是啥?

带权重的 Scikit-Learn 分类和回归

为啥 sklearn 逻辑回归正则化权重和截距?

第21集 python机器学习:神经网络算法(续)

使用 Scikit-learn 进行加权线性回归

带加权样本的弹性网络回归或套索回归(sklearn)