Scikit-learn 对 MLR 的正确性? [关闭]

Posted

技术标签:

【中文标题】Scikit-learn 对 MLR 的正确性? [关闭]【英文标题】:Correctness of Scikit-learn for MLR? [closed] 【发布时间】:2019-06-27 22:12:48 【问题描述】:

您好,我对 mlr (linear_model.LinearRegression) 的 scikit-learn 包存在正确性问题。在所有情况下,使用和构建相同的数据而无需拦截

Python 代码:

data = np.loadtxt(fname=file, delimiter='\t')
X = data[:, 1:]
Y = data[:, 1]
mlr = LinearRegression(fit_intercept=False)
mlr.fit(X,Y)
print(mlr.coef_)

1.00000000e+00  6.20460347e-17 -1.82373860e-17  3.35782591e-19
7.92128777e-17 -1.04990677e-17 -1.15961796e-16  1.33629653e-15

R:

Y = data[,1]
X = data[,-1]
X = as.matrix(X)
m1 = lm(Y~X-1)
m1$coefficients

 0.0546782907  0.0159731763  0.1312037785 -0.0507591565  0.1036469860 

 0.0050217163 -0.1006476385  0.0248998498  0.0081473528 -0.0111405854 

C#(使用accord.net,仅涉及相当复杂的程序发布结果):

 0.0546782906719276*x0 + 0.0159731763215885*x1 + 0.13120377853918*x2 + -0.0507591564748648*x3 + 0.103646986044143*x4 + 0.00502171630071436*x5 

有什么原因吗?

tldr;使用scikit-learnRC#accord.net比较mlr系数,从sklearn获得bs结果,而accord.net和r给出相似的结果

【问题讨论】:

你能生成一些可重现的例子吗? 能否在帖子中添加一些拟合统计数据,例如 RMSE 和 R 平方?这允许进行额外的比较分析。 【参考方案1】:

我已经找到原因了(这是我自己犯的错误)

Y = data[:, 1]错了!!

改为:

Y = data[:, 0]

现在我明白了(这是正确的):

5.46782907e-02  1.59731763e-02  1.31203779e-01 -5.07591565e-02
  1.03646986e-01  5.02171630e-03 -1.00647639e-01  2.48998498e-02

【讨论】:

以上是关于Scikit-learn 对 MLR 的正确性? [关闭]的主要内容,如果未能解决你的问题,请参考以下文章

如何在 scikit-learn 中正确执行交叉验证?

如何使用 python scikit-learn 执行欠采样(正确的方法)?

从 mlr 包的 resample 函数中获取特定的随机森林变量重要性度量

如何在 mlr3 中绘制二元分类器的校准图

r irr与mlr的例子。

如何在 scikit-learn 中正确加载文本数据?