Warning: file_get_contents(/data/phpspider/zhask/data//catemap/2/python/287.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_Numpy_Pandas_Scikit Learn - Fatal编程技术网

Python 模型的特征数量必须与输入匹配?

Python 模型的特征数量必须与输入匹配?,python,numpy,pandas,scikit-learn,Python,Numpy,Pandas,Scikit Learn,我正在尝试对我拥有的一些数据使用随机森林分类器。代码如下: print train_data[0,0:20] print train_data[0,21::] print test_data[0] print 'Training...' forest = RandomForestClassifier(n_estimators=100) forest = forest.fit( train_data[0::,0::20], train_data[0::,21::] ) print 'Predi

我正在尝试对我拥有的一些数据使用随机森林分类器。代码如下:

print train_data[0,0:20]
print train_data[0,21::]
print test_data[0]

print 'Training...'
forest = RandomForestClassifier(n_estimators=100)
forest = forest.fit( train_data[0::,0::20], train_data[0::,21::] )

print 'Predicting...'
output = forest.predict(test_data)
但这会产生以下错误:

ValueError:模型的特征数必须与输入匹配。 模型n_特征为3,输入n_特征为21

前三个print语句的输出为:

[   0.            0.            0.            0.            1.            0.
    0.            0.            0.            0.            1.            0.
    0.            0.            0.           37.7745986  -122.42589168
    0.            0.            0.        ]
[ 0.  0.  0.  0.  0.  0.  0.  0.  0.  0.  0.  0.  0.  0.  0.  0.  0.  0.
  0.  0.  0.  0.  0.  0.  0.  0.  0.  0.  0.  0.  0.  0.  0.  0.  0.  0.
  1.  0.]
[   0.            0.            0.            0.            0.            0.
    0.            1.            0.            0.            1.            0.
    0.            0.            0.            0.           37.73505101
 -122.3995877     0.            0.            0.        ]

我假设数据的格式对于我的
fit
/
predict
调用是正确的,但是它在
predict
上出错了。有人知道我做错了什么吗?

用于训练模型的输入数据是
train\u data[0::,0:20]
,我认为这是一个错误(为什么要跳过中间的功能?)——它应该是
train\u data[0:,0:20]
,而不是基于您在开始时所做的调试打印


此外,最后一列似乎同时代表
列车数据
测试数据
中的标签。在预测时,调用
predict
函数时,您可能希望通过
test\u data[:,:20]
而不是
test\u data

我支持这个答案,并想补充一点,在安装分类器时,您不需要额外的赋值。带有“fit”的代码行应该类似于
forest.fit(train_data[:,:21],train_data[:,21:])
(假设索引从0到20的前21列是特征,索引从21到最后一列的其余列是标签)