繁体   English   中英

python scikit线性回归怪异结果

[英]python scikit linear-regression weird results

我是python的新手。

使用matplotlib绘制线性回归的结果。

我已经尝试了一些基本数据并且可以正常工作,但是当我尝试实际数据时,回归线完全错误。 我认为我在fit()或predict()函数中做错了什么。

这是代码:

import matplotlib.pyplot as plt
from sklearn import linear_model
import scipy
import numpy as np
regr=linear_model.LinearRegression()
A=[[69977, 4412], [118672, 4093], [127393, 12324], [226158, 15453], [247883, 8924], [228057, 6568], [350119, 4040], [197808, 6793], [205989, 8471], [10666, 632], [38746, 1853], [12779, 611], [38570, 1091], [38570, 1091], [95686, 8752], [118025, 17620], [79164, 13335], [83051, 1846], [4177, 93], [29515, 1973], [75671, 5070], [10077, 184], [78975, 4374], [187730, 17133], [61558, 2521], [34705, 1725], [206514, 10548], [13563, 1734], [134931, 7117], [72527, 6551], [16014, 310], [20619, 403], [21977, 437], [20204, 258], [20406, 224], [20551, 375], [38251, 723], [20416, 374], [21125, 429], [20405, 235], [20042, 431], [20016, 366], [19702, 200], [20335, 420], [21200, 494], [22667, 487], [20393, 405], [20732, 414], [20602, 393], [111705, 7623], [112159, 5982], [6750, 497], [59624, 418], [111468, 10209], [40057, 1484], [435, 0], [498848, 17053], [26585, 1390], [75170, 3883], [139146, 3540], [84931, 7214], [19144, 3125], [31144, 2861], [66573, 818], [114253, 4155], [15421, 2094], [307497, 5110], [484904, 10273], [373476, 36365], [128152, 10920], [517285, 106315], [453483, 10054], [270763, 17542], [9068, 362], [61992, 1608], [35791, 1747], [131215, 6227], [4314, 191], [16316, 2650], [72791, 2077], [47008, 4656], [10853, 1346], [66708, 4855], [214736, 11334], [46493, 4236], [23042, 737], [335941, 11177], [65167, 2433], [94913, 7523], [454738, 12335]]
#my data are selected from a Mysql DB  and stored in np array like this one above.



regr.fit(A,A[:,1]) 
plt.scatter(A[:,0],A[:,1], color='black')
plt.plot(A[:,1],regr.predict(A), color='blue',linewidth=3)
plt.show()

所需的是使用A的第一列和第二列的数据的回归线。 结果如下:

在此处输入图片说明

我知道异常值的存在会严重影响输出,但是我尝试使用其他收费进行回归,回归线距离点所在的区域更近,所以我肯定会丢失一些东西。

谢谢。

编辑1:按照建议,我再次尝试仅更改plot()参数。 我使用A [:,0]而不是A [:,1],这是结果:

在此处输入图片说明

scikit-learn.org/stable/modules/linear_model.html上的一个简单示例看起来像我的。 我不需要预测,所以我没有在训练和测试集中切出我的数据……也许是我误解了“ X,y”的含义,但是再次看一下链接中的示例,它看起来像我的。

编辑2:终于成功了。

X=A[:,0]
X=X[:,np.newaxis]
regr=linear_model.LinearRegression()
regr.fit(X,A[:,1])
plt.plot(X,regr.predict(X))

X参数仅需要是2 Dim数组。 编辑1中的示例确实误导了我:(。

您似乎在训练数据中包括目标值A[:, 1] 拟合命令的格式为regr.fit(X, y)

您似乎也对这一行有疑问:

plt.plot(A[:,1],regr.predict(A), color='blue',linewidth=3)

我认为,如果要针对预测变量值绘制预测,应该将A[:, 1]替换为A[:, 1] A[:, 0]

您可能会发现更容易在开始时将数据分为Xy ,这可能会使事情变得更清楚。

暂无
暂无

声明:本站的技术帖子网页,遵循CC BY-SA 4.0协议,如果您需要转载,请注明本站网址或者原文地址。任何问题请咨询:yoyou2525@163.com.

 
粤ICP备18138465号  © 2020-2024 STACKOOM.COM