我正在训练1200个标签2的示例和1200个具有RBF内核的标签1的示例的SVM。我以为我获得了77%的准确性,并且我使用sklearn.metrics.accuracy_score
获得了准确性。但是当我手推我自己的精确分数时,像这样:Scikit学会返回不正确的分类报告和准确性分数
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的特征向量和1级的1200个载体和2班的1200个矢量我的代码如下:
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
嘛,是不是觉得有趣。谢谢! – Matt 2014-09-30 07:49:22
不客气:) – axiom 2014-09-30 08:20:12