使用Scikit learn时出现ValueError:模型特征数量与输入不匹配
我正在使用随机森林分类器(RandomForestClassifier)来解决一个分类问题。在代码中,我把数据集分成了训练数据和测试数据,以便进行预测。
以下是代码:
from sklearn.ensemble import RandomForestClassifier
from sklearn.cross_validation import train_test_split
import numpy as np
from numpy import genfromtxt, savetxt
a = (np.genfromtxt(open('filepath.csv','r'), delimiter=',', dtype='int')[1:])
a_train, a_test = train_test_split(a, test_size=0.33, random_state=0)
def main():
target = [x[0] for x in a_train]
train = [x[1:] for x in a_train]
rf = RandomForestClassifier(n_estimators=100)
rf.fit(train, target)
predicted_probs = [[index + 1, x[1]] for index, x in enumerate(rf.predict_proba(a_test))]
savetxt('filepath.csv', predicted_probs, delimiter=',', fmt='%d,%f',
header='Id,PredictedProbability', comments = '')
if __name__=="__main__":
main()
但是在执行时,我遇到了以下错误:
ValueError: 模型的特征数量必须与输入匹配。模型的特征数量是1434,而输入的特征数量是1435。
有什么建议可以让我继续吗?谢谢。
1 个回答
4
看起来你直接使用了 a_test
,但是没有去掉输出特征。
模型有点困惑,因为它只期待1434个输入特征,但你给它提供了1434个特征,还包括了输出特征。
你可以通过对 test
做和对训练集一样的处理来解决这个问题。
test = [x[1:] for x in a_test]
然后在下一行使用 test
:
predicted_probs = [[index + 1, x[1]] for index, x in enumerate(rf.predict_proba(test))]