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

Posted

技术标签:

【中文标题】Sklearn模型系数和预测linear_model中的不匹配【英文标题】:Sklearn model coefficients and predict mismatch in linear_model 【发布时间】:2018-06-04 05:05:57 【问题描述】:

我对 ML 和 sklearn 比较陌生,我正在尝试使用具有不同值的 linear_model.Lasso 为具有 6 个不同特征的输入数据训练线性模型正则化参数。鉴于 Xy 是我的模型输入参数,我无法弄清楚为什么我不断得到通过执行这两个表达式来获得不同的值:

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】:

您缺少拦截项,这是优化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 : 布尔值

是否计算此模型的截距。如果设置为 false,则不会在计算中使用截距(例如,预计数据已经居中)。

装好后可以用model.intercept_抢。

在内部,预测does:

return safe_sparse_dot(X, self.coef_.T,
                       dense_output=True) + self.intercept_

【讨论】:

啊...x_0 系数。确实。非常感谢

以上是关于Sklearn模型系数和预测linear_model中的不匹配的主要内容,如果未能解决你的问题,请参考以下文章

如何获得 PLS 回归的截距(sklearn)

使用sklearn进行线性回归时遇到值错误

06- 梯度下降(SGDRegressor) (机器学习)

sklearn中模型评估和预测

Python Sklearn 线性回归产生不正确的系数值

sklearn如何使用保存的模型来预测新数据