使用Scikit learn时出现ValueError:模型特征数量与输入不匹配

2 投票
1 回答
9265 浏览
提问于 2025-04-18 04:25

我正在使用随机森林分类器(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))]

撰写回答