我对ML和sklearn相对较新,我正在尝试使用 linear_model.Lasso 以及不同的值来训练具有6种不同功能的输入数据的线性模型正则化参数。鉴于 X 和 y 是我的模型的输入参数,我无法弄清楚为什么我一直得到执行这两个表达式的不同值:
sum(model.coef_*X[0])
Out[94]: -0.4895022980752311
model.predict(X[0])
Out[95]: array([ 2.08767122])
理想情况下,我希望模型系数对应于数据集中的给定特征,并且两个表达式都将返回完全相同的值。
以下是代码示例:
input_file = 'Spud_startup_analysis.xlsx'
data_input_generic = pd.read_excel(input_file, skiprows = 0, sheetname='DataSet')
data = data_input_generic.as_matrix()
X = data[:, 0:-1]
y = data[:,-1]
model = linear_model.Lasso(alpha = 0.1)
model.fit(X, y)
是否与输入矩阵的尺寸有关? 提前致谢
答案 0 :(得分:4)
您缺少拦截术语,这是优化by default(fit_intercept
)的一部分。
class sklearn.linear_model.Lasso(alpha=1.0, fit_intercept=True, normalize=False,
precompute=False, copy_X=True, max_iter=1000, tol=0.0001, warm_start=False,
positive=False, random_state=None, selection=’cyclic’)[source]
fit_intercept:boolean
是否计算此模型的截距。如果设置为false,则不会在计算中使用截距(例如,预计数据已经居中)。
您可以在安装后使用model.intercept_
抓住它。
在内部,预测does:
return safe_sparse_dot(X, self.coef_.T,
dense_output=True) + self.intercept_