我正在使用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:模型的要素数必须与输入匹配。 模型n_features为1434,输入n_features为1435
有关我应该如何进行的任何建议?感谢。
答案 0 :(得分: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))]