我正在做一项关于监督学习的任务。我有两组数据——训练和测试。
我的训练数据集大约有2000条记录。我的测试数据有10条记录
当我运行以下代码时,预测函数会给出与输出相同的值。
我不确定我做错了什么。。。我试着改变gamma和C的值,但还是没有成功。。
我想知道这是否:
- 与数据有关(训练集大小)或
- 我只是用错了估算器还是
- 我的代码搞砸了
以下是完整的python代码:
import pandas as pd
training_data = pd.read_csv("Train_wo_Header.csv") #I read my training data set
data = training_data.ix[:,[0,1,3,4,5,6,7,8,9,10,11,12,13,14,15,16,17,18,19,20,21,22,23,24,25,26,27,28,29,30,31]] #picking up all rows expect index 2, which is my output
target = training_data.ix[:,[2]]
from sklearn import svm #Code from the URL above
clf = svm.SVC(gamma=0.001, C=100.)
clf.fit(data,target)
test_data = pd.read_csv("test_wo_Header.csv") #this is my test data
clf.predict(test_data[-10:]) #predicting the last 10 values
这是输出:
array([7734, 7734, 7734, 7734, 7734, 7734, 7734, 7734, 7734, 7734], dtype=int64)
我甚至尝试过使用LinearSVC。仍然没有运气。唯一的区别是预测输出是不同的值(9240),但在整个。。。
总是给出相同的输出可能有两个原因:
- 您的模型过拟合(数据集不平衡?)
- 你没有给你的模型提供正确的数据
您似乎没有将Pandas DataFrame转换为numpy数组,请尝试
clf = svm.SVC()
X = data.values
Y = target.values
assert len(X) == len(Y)
clf.fit(X,Y)
print clf.score(X,Y)
对测试数据执行同样的操作,并尝试至少打印数据的形状和数组的一个元素。