【发布时间】:2014-11-24 17:15:52
【问题描述】:
我正在使用 RBF 内核在标签 2 的 1200 个示例和标签 1 的 1200 个示例上训练 SVM。我以为我得到了 77% 的准确率,我使用 sklearn.metrics.accuracy_score 得到了准确率。但是当我手动滚动自己的精度分数时,就像这样:
def naive_accuracy(true, pred):
number_correct = 0
i = 0
for y in true:
if pred[i] == y:
number_correct += 1.0
return number_correct / len(true)
它得到了 50%。我相信我已经根据错误的准确度分数和分类报告浪费了数周的工作。谁能向我解释为什么会发生这种情况?我非常非常困惑这是怎么发生的。我看不出我做错了什么。当我在pred = [1, 1, 2, 2];test = [1, 2, 1, 2] 等一些虚拟数据上测试 metrics.accuracy_score 函数时,它给了我 50% 的预期值。我认为 accuracy_score 可能由于我的特定数据而出错。
我有 27 个特征向量和 1200 个第 1 类向量和 1200 个第 2 类向量。我的代码如下:
X = scale(np.asarray(X))
y = np.asarray(y)
X_train, X_test, y_train, y_test = train_test_split(X, y)
######## SVM ########
clf = svm.SVC()
clf.fit(X_train, y_train)
y_pred = clf.predict(X_test)
# 77%
print "SVM Accuracy:", accuracy_score(y_test, y_pred) # debugging
# 50%
print "*True* SVM Accuracy:", naive_accuracy(y_test, y_pred) # in-house debugging
# also 77%!
print "Classification report:\n", classification_report(y_test, y_pred) # debugging
【问题讨论】:
标签: python scikit-learn