【发布时间】:2016-02-14 10:00:51
【问题描述】:
我正在尝试使用径向内核使用 SVM 预测 MNIST (http://pjreddie.com/projects/mnist-in-csv/) 数据集。我想用几个例子(例如 1000 个)进行训练并预测更多。问题是,每当我预测时,预测都是恒定的除非测试集的索引与训练集的索引一致。也就是说,假设我使用训练示例中的示例 1:1000 进行训练。然后,对于我的测试集的 1:1000,预测是正确的(即 SVM 尽力而为),但是对于其余部分,我得到了相同的输出。但是,如果我使用示例 2001:3000 进行训练,则只有与测试集中那些行相对应的测试示例被正确标记(即不具有相同的常数)。我完全不知所措,我认为存在某种错误,因为完全相同的代码在 LinearSVC 上工作得很好,尽管显然该方法的准确性较低。
首先,我使用 501:1000 的训练数据示例进行训练:
# dat_train/test are pandas DFs corresponding to both MNIST datasets
dat_train = pd.read_csv('data/mnist_train.csv', header=None)
dat_test = pd.read_csv('data/mnist_train.csv', header=None)
svm = SVC(C=10.0)
idx = range(1000)
#idx = np.random.choice(range(len(dat_train)), size=1000, replace=False)
X_train = dat_train.iloc[idx,1:].reset_index(drop=True).as_matrix()
y_train = dat_train.iloc[idx,0].reset_index(drop=True).as_matrix()
X_test = dat_test.reset_index(drop=True).as_matrix()[:,1:]
y_test = dat_test.reset_index(drop=True).as_matrix()[:,0]
svm.fit(X=X_train[501:1000,:], y=y_train[501:1000])
在这里你可以看到大约一半的预测是错误的
y_pred = svm.predict(X_test[:1000,:])
confusion_matrix(y_test[:1000], y_pred)
全错(即常量)
y_pred = svm.predict(X_test[:500,:])
confusion_matrix(y_test[:500], y_pred)
这是我希望看到的所有测试数据
y_pred = svm.predict(X_test[501:1000,:])
confusion_matrix(y_test[501:1000], y_pred)
您可以使用 LinearSVC 检查以上所有内容是否正确!
【问题讨论】:
标签: python scikit-learn svm svc