【发布时间】:2018-03-23 17:49:17
【问题描述】:
我必须将我的数据拟合到多元线性模型。但是 sklearn.linear_model 产生的答案与 Normal Equation 预测的答案不同。这是两者的代码:
x=np.arange(12).reshape(3,4)
y=np.arange(3,6).reshape(3,1)
x=np.insert(x,0,1,axis=1)
def normal(X,y):
return np.dot(np.dot(linalg.pinv(np.dot(X.T,X)),X.T),y)
normal(x,y)
>>> [[ 0.4375 ]
[-0.59375]
[-0.15625]
[ 0.28125]
[ 0.71875]]
from sklearn import linear_model
reg=linear_model.LinearRegression()
reg.fit(x,y)
reg.coef_
>>> [[ 0. , 0.0625, 0.0625, 0.0625, 0.0625]]
我的代码正确吗?
【问题讨论】:
-
我不认为
normal函数是正确的。np.linalg.pinv返回其输入的伪逆,可以计算为np.linalg.inv(X.T.dot(X)).dot(X.T)。所以你正在做一些逆和伪逆的组合。normal应该是return np.linalg.pinv(X).dot(y)。 -
它包含在不可逆矩阵的情况下。它不会以任何方式影响答案
标签: python machine-learning scikit-learn linear-regression