Oli*_*via 3 python regression weighted scikit-learn
我想根据新近度为我的训练数据添加权重。
如果我们看一个简单的例子:
import matplotlib.pyplot as plt
import numpy as np
from sklearn.preprocessing import PolynomialFeatures, normalize
from sklearn.linear_model import LinearRegression
X = np.array([1,2,3,4,5,6,7,8,9,10]).reshape(-1,1)
Y = np.array([0.25, 0.5, 0.75, 1, 1.5, 2, 3, 4, 6, 10]).reshape(-1,1)
poly_reg = PolynomialFeatures(degree=2)
X_poly = poly_reg.fit_transform(X)
pol_reg = LinearRegression()
pol_reg.fit(X_poly, Y)
plt.scatter(X, Y, color='red')
plt.plot(X, pol_reg.predict(poly_reg.fit_transform(X)), color='blue')
Run Code Online (Sandbox Code Playgroud)
现在假设 X 值是基于时间的,而 Y 值是传感器的快照。所以我们正在对一些行为进行建模。我相信最新的数据点是最重要的,因为它们是最新的,并且最能代表未来的行为。我想调整我的模型,使最新的数据点权重最高。
在 R 中有一个关于这样做的问题:https : //stats.stackexchange.com/questions/196653/assigning-more-weight-to-more-recent-observations-in-regression
我想知道 sklearn 包(或任何其他 python 包)是否具有此功能?
此加权模型将具有类似的曲线,但会更好地拟合较新的点。如果我想用这个模型来预测未来,非加权模型的预测总是过于保守,因为它们对最新数据不那么敏感。
除了使用这种方法,我还使用了 curve_fit 来使用幂函数或指数函数:
from scipy.optimize import curve_fit
def func(x, a, b):
return a*(x**b)
X = [1,2,3,4,5,6,7,8,9,10]
Y = [0.25, 0.5, 0.75, 1, 1.5, 2, 3, 4, 6, 10]
popt, pcov = curve_fit(func, X, Y, bounds=([-np.inf,1], [np.inf, np.inf]))
plt.plot(X, func(X, *popt), color = 'green')
Run Code Online (Sandbox Code Playgroud)
如果使用func和的解决方案curve_fit是可能的,我也愿意接受,或任何其他方法。唯一需要注意的是,我的真实世界数据并不总是意味着解决方案是一个单调递增的函数,但我的理想解决方案将是。
| 归档时间: |
|
| 查看次数: |
1356 次 |
| 最近记录: |