我有一些数据:
df_shuffled = shuffle(df, random_state=123)
X = scale(df_shuffled[df_shuffled.columns[:-1]])
y = df_shuffled["cnt"]
然后我学会了简单的线性模型:
from sklearn.linear_model import LinearRegression
regr = LinearRegression()
regr.fit(X, y)
我知道我不应该使用学习样本来验证模型,但我只想知道如果我理解它是如何工作的。
我有很好的预测,使用模型:
regr.predict(X)[:5]
array([ 5454.26166397, 3943.78784705, 2125.27231678, 2967.02153671,
4474.29945607])
这与原始数据非常接近:
y[:5]
488 6421
421 3389
91 2252
300 3747
177 4708
Name: cnt, dtype: int64
另外,我有coefs:
list(zip(df.columns, regr.coef_))
[('season', 570.86663333510262),
('yr', 1021.9670828146905),
('mnth', -141.30042168132388),
('holiday', -86.757534933339258),
('weekday', 137.22544688027938),
('workingday', 56.39322955869352),
('weathersit', -330.23017254975974),
('temp', 367.45598306317618),
('atemp', 585.57493105545359),
('hum', -145.60889630046199),
('windspeed(mph)', 12457254171589.174),
('windspeed(ms)', -12457254171787.625)]
我们知道,我们可以使用这样的学习模型进行预测: y = Xw ,其中y是预测值向量,X是数据矩阵,w是coef向量(regr.coef_)。但是威士忌不起作用!
np.dot(X, regr.coef_)[:5]
array([ 949.90689164, -560.56692528, -2379.08245555, -1537.33323562,
-30.05531626])
这与我们从.predict方法中获得的完全不同。为什么?我不明白......
答案 0 :(得分:5)
如果我没错,y不仅仅是 Xw ,你必须添加y_intercept。即y=Xw+b
其中b
是截距。尝试运行
np.dot(X, regr.coef_)[:5]+regr.intercept_