我对机器学习和scikit学习都很陌生。
我正在尝试使用网站上给出的例子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、值2、值3、值4、输出
测试数据csv标签看起来像这样:
值1、值2、值3、值4。
感谢:)
您的问题是一个监督问题,您有一些数据的形式为(输入,输出)。
输入是描述示例的特征,输出是预测模型在给定输入的情况下应该做出响应。
在你的训练数据中,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_testrongplit,也可以使用几个指标来判断模型的性能。
你应该检查你的数据的形状
data.shape
你似乎没有考虑最后三列,而只是最后一列。尝试:
data = mydata.ix[:,:-1]