Sklearn模型系数并预测linear_model中的不匹配

时间:2017-12-21 13:48:28

标签: python machine-learning scikit-learn regression data-science

我对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)

是否与输入矩阵的尺寸有关? 提前致谢

1 个答案:

答案 0 :(得分:4)

您缺少拦截术语,这是优化by defaultfit_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_