gpt4 book ai didi

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

转载 作者:太空宇宙 更新时间:2023-11-03 12:08:31 25 4
gpt4 key购买 nike

我正在使用库 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])

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

我是不是用错了这个库,还是里面有错误?

最佳答案

权重没有倒置。可能您犯了一个愚蠢的错误,或者 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');

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

enter image description here

关于python - Scikit-learn:权重在岭回归中的作用,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/17609900/

25 4 0
Copyright 2021 - 2024 cfsdn All Rights Reserved 蜀ICP备2022000587号
广告合作:1813099741@qq.com 6ren.com