为什么 Matlab 和 Python 的输出对于岭回归会有所不同?我ridge
在 Matlab 和scikit-learn
Python 中使用该命令进行岭回归。
MATLAB
X = [1 1 2 ; 3 4 2 ; 6 5 2 ; 5 5 3];
Y = [1 0 0 1];
k = 10 % which is the ridge parameter
b = ridge(Y,X,k,0)
系数估计为
b = 0.3057 -0.0211 -0.0316 0.1741
Python
import numpy as np
X = np.array([[1, 1, 2] , [3, 4, 2] , [6, 5, 2] , [5, 5, 3]])
Y = np.r_[1,0,0,1].T
from sklearn import linear_model
clf = linear_model.Ridge(alpha=10)
clf.fit(X, Y)
b = np.hstack((clf.intercept_, clf.coef_))
系数估计为
b = 0.716 -0.037 -0.054 0.057
为什么会观察到这种差异?
编辑:对于那些认为居中和缩放是问题的人。输入数据没有缩放或居中,因为我使用缩放参数作为 0 从观察到
b = ridge(Y,X,k,0)
默认情况下,岭回归scikit-learn
不进行归一化
>>clf
Ridge(alpha=10, copy_X=True, fit_intercept=True, max_iter=None, normalize=False, solver='auto', tol=0.001)
这是标准化后的 Matlab 输出b = ridge(Y,X,k,1)
:
b = -0.0467 -0.0597 0.0870