我在使用稀疏SVM的预测概率时遇到了问题,其中许多预测对我的测试实例来说都是相同的。这些概率是在交叉验证期间产生的,当我绘制折叠的ROC曲线时,结果看起来很奇怪,因为图表上有一些聚类点。这是我的交叉验证代码,我基于scikit网站上的示例:
skf = StratifiedKFold(y, n_folds=numfolds)
for train_index, test_index in skf:
#split the training and testing sets
X_train, X_test = X_scaled[train_index], X_scaled[test_index]
y_train, y_test = y[train_index], y[test_index]
#train on the subset for this fold
print 'Training on fold ' + str(fold)
classifier = svm.SVC(C=C_val, kernel='rbf', gamma=gamma_val, probability=True)
probas_ = classifier.fit(X_train, y_train).predict_proba(X_test)
#Compute ROC curve and area the curve
fpr, tpr, thresholds = roc_curve(y_test, probas_[:, 1])
mean_tpr += interp(mean_fpr, fpr, tpr)
mean_tpr[0] = 0.0
roc_auc = auc(fpr, tpr)
我只想弄清楚这里是否有一些我显然缺少的东西,因为我使用了与libsvm相同的训练集和SVM参数,并获得了更好的结果。当我使用libsvm并打印出来自超平面的CV测试实例的距离然后绘制了ROC时,它的出现更像我的预期,并且更好的AUC。