SKlearn 线性回归系数等于 0

Posted

技术标签:

【中文标题】SKlearn 线性回归系数等于 0【英文标题】:SKlearn linear regression coeffs equals 0 【发布时间】:2018-08-18 23:32:28 【问题描述】:

在最简单的线性回归示例中存在问题。在输出处,系数为零,我做错了什么?感谢您的帮助。

import sklearn.linear_model as lm
import pandas as pd
import numpy as np
import matplotlib.pyplot as plt

x = [25,50,75,100]
y = [10.5,17,23.25,29]
pred = [27,41,22,33]
df = pd.DataFrame('x':x, 'y':y, 'pred':pred)
x = df['x'].values.reshape(1,-1)
y = df['y'].values.reshape(1,-1)
pred = df['pred'].values.reshape(1,-1)
plt.scatter(x,y,color='black')
clf = lm.LinearRegression(fit_intercept =True)
clf.fit(x,y)


m=clf.coef_[0]
b=clf.intercept_
print("slope=",m, "intercept=",b)

输出:

slope= [ 0.  0.  0.  0.] intercept= [ 10.5   17.    23.25  29.  ]

【问题讨论】:

【参考方案1】:

想一想。鉴于您返回了多个系数,这表明您有多个因素。由于它是单一回归,因此问题在于输入数据的形状。您最初的重塑使全班认为您有 4 个变量,每个变量只有一个观察值。

试试这样的:

import sklearn.linear_model as lm
import pandas as pd
import numpy as np
import matplotlib.pyplot as plt

x = np.array([25,99,75,100, 3, 4, 6, 80])[..., np.newaxis]
y = np.array([10.5,17,23.25,29, 1, 2, 33, 4])[..., np.newaxis]

clf = lm.LinearRegression()
clf.fit(x,y)
clf.coef_

输出:

array([[ 0.09399429]])

【讨论】:

很好地解释了! +1 :)【参考方案2】:

正如@jrjames83 在重塑后的回答中所解释的那样 (.reshape(1,-1)),您提供的数据集包含一个样本(行)和四个特征(列):

In [103]: x.shape
Out[103]: (1, 4)

很可能你想用这种方式重塑它:

In [104]: x = df['x'].values.reshape(-1, 1)

In [105]: x.shape
Out[105]: (4, 1)

这样您就有四个样本和一个特征...

或者,您可以将 DataFrame 列传递给您的模型,如下所示(无需使用其他变量污染您的内存):

In [98]: clf = lm.LinearRegression(fit_intercept =True)

In [99]: clf.fit(df[['x']],df['y'])
Out[99]: LinearRegression(copy_X=True, fit_intercept=True, n_jobs=1, normalize=False)

In [100]: clf.coef_
Out[100]: array([0.247])

In [101]: clf.intercept_
Out[101]: 4.5

【讨论】:

以上是关于SKlearn 线性回归系数等于 0的主要内容,如果未能解决你的问题,请参考以下文章

线性回归系数如何存储在 Sklearn 管道中?

SKLearn 线性回归,但在开始之前设置某些系数

Python中具有正系数的线性回归

03_有监督学习--简单线性回归模型(调用 sklearn 库代码实现)

回归分析的判定系数等于1是啥原因

线性回归分析其中“β、 T 、F”分别是啥含义?