ValueError Scikit学习。模型的特征数量不匹配输入

时间:2016-04-08 07:43:59

标签: python-2.7 numpy pandas scikit-learn

我对一般的机器学习和特定的scikit-learn都很陌生。

我正在尝试使用网站http://scikit-learn.org/stable/tutorial/basic/tutorial.html

上提供的示例

对于我自己的练习,我使用自己的数据集。我的数据集分为两个不同的CSV文件:

Train_data.csv (包含 32列,最后一列是输出值。)

Test_data.csv (包含 31列输出列丢失 - 应该是这种情况,不是吗?)

测试数据比训练数据少一列..

我使用以下代码学习(使用训练数据)然后预测(使用测试数据)。

我面临的问题是错误:

*ValueError: X.shape[1] = 31 should be equal to 29, the number of features at training time*

这是我的代码(抱歉,如果它看起来完全错误:()

import pandas as pd #import the library
from sklearn import svm 

mydata = pd.read_csv("Train - Copy.csv") #I read my training data set
target = mydata["Desired"]  #my csv has header row, and the output label column is named "Desired"
data = mydata.ix[:,:-3] #select all but the last column as data


clf = svm.SVC(gamma=0.001, C=100.) #Code from the URL above
clf.fit(data,target)  #Code from the URL above 

test_data = pd.read_csv("test.csv") #I read my test data set. Without the output column 

clf.predict(test_data[-1:]) #Code from the URL above

训练数据csv标签看起来像这样:

值1,值,值3,值4,输出

测试数据csv标签看起来像这样:

值1,值,值3,值4。

谢谢:)

1 个答案:

答案 0 :(得分:1)

您的问题是监督问题,您有一些数据(输入,输出)。

输入是描述您的示例的功能,输出是您的模型应该根据输入做出响应的预测。

在您的训练数据中,您的csv文件中还会有一个属性,因为为了训练您的模型,您需要给他输出。

带有监督问题的sklearn中的常规工作流程应该如下所示

X, Y = read_data(data)
n = len(X)
X_train, X_test = X[:n*0.8], X[n*0.8:]
Y_train, Y_test = Y[:n*0.8], Y[n*0.8:]

model.fit(X_train,Y_train)
model.score(X_test, Y_test)

要拆分数据,您可以使用train_test_split,并且可以使用多个metrics来判断模型的效果。

您应该检查数据的形状

data.shape

您似乎没有将最后3列而不是最后一列记入帐户。请尝试改为:

data = mydata.ix[:,:-1]