使用Sklearn预测的线性回归不起作用。数据不合适

时间:2016-07-28 15:57:15

标签: python machine-learning scikit-learn linear-regression

我正在尝试对以下数据执行线性回归。

if

我正在尝试绘制结果以使用

查看回归线
'U'

我得到的图表是 enter image description here

('系数:\ n',数组([ - 34296.90306122,0。])) 剩余的平方和:1414631501323.43 差异分数:-17.94

我正在尝试预测

X = [[ 1 26]
 [ 2 26]
 [ 3 26]
 [ 4 26]
 [ 5 26]
 [ 6 26]
 [ 7 26]
 [ 8 26]
 [ 9 26]
 [10 26]
 [11 26]
 [12 26]
 [13 26]
 [14 26]
 [15 26]
 [16 26]
 [17 26]
 [18 26]
 [19 26]
 [20 26]
 [21 26]
 [22 26]
 [23 26]
 [24 26]
 [25 26]
 [26 26]
 [27 26]
 [28 26]
 [29 26]
 [30 26]
 [31 26]
 [32 26]
 [33 26]
 [34 26]
 [35 26]
 [36 26]
 [37 26]
 [38 26]
 [39 26]
 [40 26]
 [41 26]
 [42 26]
 [43 26]
 [44 26]
 [45 26]
 [46 26]
 [47 26]
 [48 26]
 [49 26]
 [50 26]
 [51 26]
 [52 26]
 [53 26]
 [54 26]
 [55 26]
 [56 26]
 [57 26]
 [58 26]
 [59 26]
 [60 26]
 [61 26]
 [62 26]
 [63 26]
 [64 26]
 [65 26]
 [66 26]
 [67 26]
 [68 26]
 [69 26]]

Y = [  192770 14817993  1393537   437541   514014   412468   509393   172715
   329806   425876   404031   524371   362817   692020   585431   446286
   744061   458805   330027   495654   459060   734793   701697   663319
   750496   525311  1045502   250641   500360   507594   456444   478666
   431382   495689   458200   349161   538770   355879   535924   549858
   611428   517146   239513   354071   342354   698360   467248   500903
   625170   404462  1057368   564703   700988  1352634   727453   782708
   1023673  1046348  1175588   698072   605187   684739   884551  1067267
   728643   790098   580151   340890   299185]

训练数据中已有的东西,结果是 [-19155.16326531]

其实际值为625170

我做错了什么?

请不要26的值来自一个更大的数组,我已将该数据切成一小部分,以便在26上进行训练和预测,类似地,X [:,0]可能不是连续值,它再次来临从一个更大的阵列。 通过数组我的意思是numpy数组

4 个答案:

答案 0 :(得分:2)

正如SAMO在评论中所说,你的数据结构是什么并不清楚。假设您在X和目标Y中有两个功能,如果将X和Y转换为numpy数组,则代码将按预期工作。

import numpy as np
from sklearn import linear_model
import matplotlib.pyplot as plt

x1 = range(1, 70)
x2 = [26]*69

X = np.column_stack([x1, x2])

y = '''  192770 14817993  1393537   437541   514014   412468   509393   172715
   329806   425876   404031   524371   362817   692020   585431   446286
   744061   458805   330027   495654   459060   734793   701697   663319
   750496   525311  1045502   250641   500360   507594   456444   478666
   431382   495689   458200   349161   538770   355879   535924   549858
   611428   517146   239513   354071   342354   698360   467248   500903
   625170   404462  1057368   564703   700988  1352634   727453   782708
   1023673  1046348  1175588   698072   605187   684739   884551  1067267
   728643   790098   580151   340890   299185'''

Y = np.array(map(int, y.split()))
regr = linear_model.LinearRegression()

regr.fit(X, Y)

plt.scatter(X[:,0], Y,  color='black')
plt.plot(X[:,0], regr.predict(X), color='blue',
     linewidth=3)

plt.xticks(())
plt.yticks(())

plt.show()

print regr.predict([[49,26]])
# 611830.33589088

答案 1 :(得分:1)

你可能在绘图之前弄乱了输入数组。根据您问题中的信息,回归确实会返回接近您预期答案625170的结果。

from sklearn import linear_model

# your input arrays
x = [[a, 26] for a in range(1, 70, 1)]
y = [192770, 14817993,1393537, 437541, 514014, 412468, 509393, 172715, 329806, 425876, 404031, 524371, 362817, 692020, 585431, 446286, 744061, 458805, 330027, 495654, 459060, 734793, 701697, 663319, 750496, 525311,1045502, 250641, 500360, 507594, 456444, 478666, 431382, 495689, 458200, 349161, 538770, 355879, 535924, 549858, 611428, 517146, 239513, 354071, 342354, 698360, 467248, 500903, 625170, 404462,1057368, 564703, 700988,1352634, 727453, 782708, 1023673,1046348,1175588, 698072, 605187, 684739, 884551,1067267, 728643, 790098, 580151, 340890, 299185]

# your code for regression
regr = linear_model.LinearRegression()
regr.fit(x, y)

# the correct coef is different from your findings
print regr.coef_

这会返回一个结果:array([-13139.72031421, 0. ])

尝试预测时:regr.predict([[49, 26]])会返回array([ 611830.33589088]),这接近您预期的答案。

答案 2 :(得分:0)

print(regression.predict(np.array([[60]])))

答案 3 :(得分:0)

如果我们要预测要在代码上进行预测的单个值(浮点数),则可能不起作用。 我在开始时尝试了以下代码,但是没有用:

lin_reg.predict(6.5)

找到的解决方案是:

lin_reg.predict([[6.5]])

尝试一下,如果它也对您有用。