Warning: file_get_contents(/data/phpspider/zhask/data//catemap/2/python/328.json): failed to open stream: No such file or directory in /data/phpspider/zhask/libs/function.php on line 167

Warning: Invalid argument supplied for foreach() in /data/phpspider/zhask/libs/tag.function.php on line 1116

Notice: Undefined index: in /data/phpspider/zhask/libs/function.php on line 180

Warning: array_chunk() expects parameter 1 to be array, null given in /data/phpspider/zhask/libs/function.php on line 181
为什么';我的Python随机回归器不能准确预测训练集数据吗?_Python_Machine Learning_Scikit Learn_Random Forest - Fatal编程技术网

为什么';我的Python随机回归器不能准确预测训练集数据吗?

为什么';我的Python随机回归器不能准确预测训练集数据吗?,python,machine-learning,scikit-learn,random-forest,Python,Machine Learning,Scikit Learn,Random Forest,我正在学习机器学习,希望在一个相当复杂的数据集上使用scikit learn的RandomForestRegressor()。不过,为了首先掌握诀窍,我将尝试通过一个基本示例进行操作,如下所示: import sklearn.ensemble as se import numpy as np forest = se.RandomForestRegressor(n_estimators=1000) traindata = np.arange(1000).reshape(200,5) forest

我正在学习机器学习,希望在一个相当复杂的数据集上使用scikit learn的
RandomForestRegressor()
。不过,为了首先掌握诀窍,我将尝试通过一个基本示例进行操作,如下所示:

import sklearn.ensemble as se
import numpy as np
forest = se.RandomForestRegressor(n_estimators=1000)
traindata = np.arange(1000).reshape(200,5)
forest = forest.fit(traindata[0::,1::],traindata[0::,0])
forest.feature_importances_
>> array([0.26349716, 0.23664264, 0.23360533, 0.26625487])
在这一点上,我想我做的是:我创建了一个200行矩阵,每行有5个值,格式为
[x,x+1,x+2,x+3,x+4]
,其中
x
是5的倍数(例如
[0,1,2,3,4]
[5,6,7,8,9]
,等等)

我已经告诉我的森林去适应特性
[x+1,x+2,x+3,x+4]
来预测
x
。以下是我预测的结果:

forest.predict([1,2,3,4])
>> array([2.785])
这对我来说真的很不直观。考虑到
[1,2,3,4]
的特征值在
x=0
的训练数据中,我的森林难道不能预测比2.785更接近吗

我进一步了解了功能的重要性,如下所示:

import sklearn.ensemble as se
import numpy as np
forest = se.RandomForestRegressor(n_estimators=1000)
traindata = np.arange(1000).reshape(200,5)
forest = forest.fit(traindata[0::,1::],traindata[0::,0])
forest.feature_importances_
>> array([0.26349716, 0.23664264, 0.23360533, 0.26625487])

对我来说,这并不意味着我所看到的方式有很大的偏差。我错过了什么

当我尝试你的代码时,我得到了
AttributeError:“module”对象没有属性“arrange”
,因此这里是你的示例的一个可复制版本(一般来说,我建议显式创建单独的X和Y以避免犯愚蠢的错误,这是我看到你的问题时的第一个想法)。正如您在下面看到的,随机林分类器在训练集中对您的示例执行得非常完美。随机森林回归器不能产生完美的预测。我不知道这是为什么,但这是一个开始

import numpy as np

import sklearn.ensemble as se
import numpy as np

x = 0
X_train = []
Y_train = []
while x < 1000:
    Y_train.append(x)
    X_train.append([x + 1, x + 2, + x + 3, x + 4])
    x += 5


forestregression = se.RandomForestRegressor(n_estimators=1000)
forestregression.fit(X_train, Y_train)

print(forestregression.predict(X_train))

[   3.005    4.96     9.015   13.875   18.9     23.985   29.18    34.24
   39.035   43.765   49.135   54.06    59.15    63.99    68.85    74.205
   79.12    84.01    88.9     93.92    98.995  104.13   108.825  114.14
  119.1    123.84   128.895  134.15   138.905  144.075  148.91   153.895
  159.165  163.83   169.065  174.195  179.03   183.975  188.915  194.06
  198.9    204.105  208.975  214.11   218.79   224.135  228.985  234.205
  239.13   244.025  249.04   254.065  258.975  264.14   269.03   274.105
  278.985  284.     288.935  294.055  299.04   304.025  308.895  313.92
  318.82   324.1    328.92   334.18   338.985  344.07   348.905  353.94
  359.115  364.11   369.     374.11   379.07   383.995  388.975  394.005
  399.035  403.91   408.99   414.125  419.165  424.17   428.86   434.14
  438.945  444.155  449.12   453.97   459.075  464.075  469.025  474.105
  478.895  483.98   489.085  494.105  498.985  504.045  508.99   514.02
  519.02   524.115  529.115  533.985  538.95   544.085  548.915  553.94
  558.935  564.035  568.925  574.12   578.925  583.995  589.21   593.99
  599.17   603.925  608.93   613.98   619.105  623.975  629.11   634.08
  638.99   644.06   648.85   654.05   659.175  664.155  669.03   673.85
  679.01   684.005  689.015  694.02   699.225  704.135  708.965  713.86
  718.88   723.84   728.99   733.835  738.985  744.205  748.99   753.74
  759.1    764.125  768.935  774.195  778.925  783.835  789.25   793.8
  798.925  804.03   809.06   813.98   819.135  823.9    828.9    834.04
  839.035  844.18   848.955  854.1    858.98   864.095  868.995  874.02
  879.165  883.795  888.905  894.245  898.965  903.8    908.98   913.945
  918.92   924.26   929.05   933.915  938.815  944.04   949.175  953.815
  959.025  963.925  968.99   974.07   979.1    984.095  988.715  992.18 ]

forestclassifier = se.RandomForestClassifier(n_estimators=1000)
forestclassifier.fit(X_train, Y_train)

print(forestclassifier.predict(X_train))

[  0   5  10  15  20  25  30  35  40  45  50  55  60  65  70  75  80  85
  90  95 100 105 110 115 120 125 130 135 140 145 150 155 160 165 170 175
 180 185 190 195 200 205 210 215 220 225 230 235 240 245 250 255 260 265
 270 275 280 285 290 295 300 305 310 315 320 325 330 335 340 345 350 355
 360 365 370 375 380 385 390 395 400 405 410 415 420 425 430 435 440 445
 450 455 460 465 470 475 480 485 490 495 500 505 510 515 520 525 530 535
 540 545 550 555 560 565 570 575 580 585 590 595 600 605 610 615 620 625
 630 635 640 645 650 655 660 665 670 675 680 685 690 695 700 705 710 715
 720 725 730 735 740 745 750 755 760 765 770 775 780 785 790 795 800 805
 810 815 820 825 830 835 840 845 850 855 860 865 870 875 880 885 890 895
 900 905 910 915 920 925 930 935 940 945 950 955 960 965 970 975 980 985
 990 995]
将numpy导入为np
将sklearn.ensemble作为se导入
将numpy作为np导入
x=0
X_列车=[]
Y_train=[]
当x<1000时:
Y_列附加(x)
X_列附加([X+1,X+2,+X+3,X+4])
x+=5
forestregression=se.随机ForestRegressionor(n_估计值=1000)
ForestReturnation.fit(X_系列,Y_系列)
打印(forestregression.predict(X_列))
[   3.005    4.96     9.015   13.875   18.9     23.985   29.18    34.24
39.035   43.765   49.135   54.06    59.15    63.99    68.85    74.205
79.12    84.01    88.9     93.92    98.995  104.13   108.825  114.14
119.1    123.84   128.895  134.15   138.905  144.075  148.91   153.895
159.165  163.83   169.065  174.195  179.03   183.975  188.915  194.06
198.9    204.105  208.975  214.11   218.79   224.135  228.985  234.205
239.13   244.025  249.04   254.065  258.975  264.14   269.03   274.105
278.985  284.     288.935  294.055  299.04   304.025  308.895  313.92
318.82   324.1    328.92   334.18   338.985  344.07   348.905  353.94
359.115  364.11   369.     374.11   379.07   383.995  388.975  394.005
399.035  403.91   408.99   414.125  419.165  424.17   428.86   434.14
438.945  444.155  449.12   453.97   459.075  464.075  469.025  474.105
478.895  483.98   489.085  494.105  498.985  504.045  508.99   514.02
519.02   524.115  529.115  533.985  538.95   544.085  548.915  553.94
558.935  564.035  568.925  574.12   578.925  583.995  589.21   593.99
599.17   603.925  608.93   613.98   619.105  623.975  629.11   634.08
638.99   644.06   648.85   654.05   659.175  664.155  669.03   673.85
679.01   684.005  689.015  694.02   699.225  704.135  708.965  713.86
718.88   723.84   728.99   733.835  738.985  744.205  748.99   753.74
759.1    764.125  768.935  774.195  778.925  783.835  789.25   793.8
798.925  804.03   809.06   813.98   819.135  823.9    828.9    834.04
839.035  844.18   848.955  854.1    858.98   864.095  868.995  874.02
879.165  883.795  888.905  894.245  898.965  903.8    908.98   913.945
918.92   924.26   929.05   933.915  938.815  944.04   949.175  953.815
959.025  963.925  968.99   974.07   979.1    984.095  988.715  992.18 ]
forestclassifier=se.RandomForestClassifier(n_估计器=1000)
装配(X_系列,Y_系列)
打印(forestclassifier.predict(X_列))
[  0   5  10  15  20  25  30  35  40  45  50  55  60  65  70  75  80  85
90  95 100 105 110 115 120 125 130 135 140 145 150 155 160 165 170 175
180 185 190 195 200 205 210 215 220 225 230 235 240 245 250 255 260 265
270 275 280 285 290 295 300 305 310 315 320 325 330 335 340 345 350 355
360 365 370 375 380 385 390 395 400 405 410 415 420 425 430 435 440 445
450 455 460 465 470 475 480 485 490 495 500 505 510 515 520 525 530 535
540 545 550 555 560 565 570 575 580 585 590 595 600 605 610 615 620 625
630 635 640 645 650 655 660 665 670 675 680 685 690 695 700 705 710 715
720 725 730 735 740 745 750 755 760 765 770 775 780 785 790 795 800 805
810 815 820 825 830 835 840 845 850 855 860 865 870 875 880 885 890 895
900 905 910 915 920 925 930 935 940 945 950 955 960 965 970 975 980 985
990 995]
为什么不能准确预测? 简短版本:由于smart Breiman提出的方法的性质

较长版本:

随机森林是非常有趣的学习者

然而,你需要一点耐心来调整它们

forest.setp_param( oob_score    = True,   # set True to be able to read
                   #                      #     oob-samples score
                   random_state = 2015    # set so as to keep retesting
                   #                      #     possible / meaniningfull on
                   #                      #     an otherwise randomised
                   #                      #     learner construction
                   )
原则上,任何使用
.fit()
方法的尝试都会在幕后进行大量工作,以构建一组随机的决策树,使其成为一个随机森林,为您的数据集工作

.fit()
的“质量”用
.oob_分数
表示,它显示了已经使用的
oob
样本(布雷曼方法的真实部分)的准确性在给定的
随机森林
的培训完成后。这有助于您估计经过训练的随机森林在可用数据集上的表现“良好”或“较差”

然而,更重要的是(或应该是),学习者的概括能力如何,也就是说,学习者的概括能力如何