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到最后一列的其余列是标签)