2017-07-02 76 views
1

我有一些一串数据:线性模型的预测不一致

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是系数向量(regr.coef_)。但是威尔不起作用!

np.dot(X, regr.coef_)[:5] 
array([ 949.90689164, -560.56692528, -2379.08245555, -1537.33323562, 
    -30.05531626]) 

这与我们从.predict方法中得到的完全不同。为什么?我不明白...

回答

5

如果我没有错,y不只是xw你必须添加y_intercept。即y=Xw+b其中b是截距。尝试运行

np.dot(X, regr.coef_)[:5]+regr.intercept_ 
+1

正是!多谢了朋友! – user1443993

+0

@ user1443993不客气 – Dark

+0

是否接受它可以帮助我以及社区欢呼的答案 – Dark