使用Scikit时的ValueError学习。模型的特征数与输入的特征数不匹配

时间:2014-04-26 23:48:18

标签: python python-2.7 numpy scikit-learn

我正在使用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

有关我应该如何进行的任何建议?感谢。

1 个答案:

答案 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))]