【问题标题】:ValueError while using Scikit learn. Number of features of model don't match that of input使用 Scikit 学习时出现 ValueError。模型的特征数与输入的特征数不匹配
【发布时间】:2014-06-12 14:58:11
【问题描述】:

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

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

【问题讨论】:

    标签: python python-2.7 numpy scikit-learn


    【解决方案1】:

    看起来你是在直接使用a_test,没有去掉输出功能。

    该模型很困惑,因为它只需要 1434 个输入特征,但您将 1434 个特征与输出特征一起提供给它。

    您可以通过对 test 执行与 train 相同的操作来解决此问题。

    test = [x[1:] for x in a_test]
    

    然后在下面一行使用test

    predicted_probs = [[index + 1, x[1]] for index, x in enumerate(rf.predict_proba(test))]
    

    【讨论】:

    • @user3466132,很高兴它有帮助!希望scikit-learn 解决您的问题。 :)
    猜你喜欢
    • 2016-07-29
    • 2017-10-17
    • 2019-03-28
    • 2017-09-29
    • 1970-01-01
    • 2016-08-11
    • 1970-01-01
    • 2016-03-26
    • 2015-12-16
    相关资源
    最近更新 更多