我对一般的机器学习和特定的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。
谢谢:)
答案 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]