我正在使用scikit-learn(包sklearn.cross_validation
)中的cross_val_score
来评估我的分类器.
如果我使用 f1
作为 scoring
参数,该函数将返回一个类的 f1 分数。为了得到平均值,我可以使用f1_weighted
但我找不到如何获得其他类的 f1 分数。 (精度和召回类似)
sklearn.metrics
中的函数有一个执行此操作的labels
参数,但我在文档中找不到类似的东西。
有没有办法一次获得所有类的 f1 分数,或者至少指定应该用cross_val_score
考虑的类?
当你使用函数创建得分器时make_scorer
你可以传递你需要的任何其他参数,如下所示:
cross_val_score(
svm.SVC(kernel='rbf', gamma=0.7, C = 1.0),
X, y,
scoring=make_scorer(f1_score, average='weighted', labels=[2]),
cv=10)
但是cross_val_score
只允许您返回一个分数。如果没有额外的技巧,您无法一次获得所有课程的分数。如果您需要,请参阅另一个堆栈溢出问题,该问题完全涵盖了以下内容:在sklearn cross_val_score
您可以简单地尝试以下操作:
svm = LinearSVC()
scores = cross_val_score(svm, X, y,
scoring = "f1",
cv = 10)
对于每个类的单独分数,请使用以下命令:
f1 = f1_score(y_test, y_pred, 平均值 = 无)print("f1 list non intent: ", f1)
要计算 F1 分数,我们可以使用 sklearn.metrics.f1_score
http://scikit-learn.org/stable/modules/generated/sklearn.metrics.f1_score.html
示例代码
from sklearn import svm
from sklearn import metrics
from sklearn.cross_validation import train_test_split
from sklearn.datasets import load_iris
from sklearn.metrics import f1_score, accuracy_score
# prepare dataset
iris = load_iris()
X = iris.data[:, :2]
y = iris.target
X_train, X_test, y_train, y_test = train_test_split(X, y, test_size=0.2)
# svm classification
clf = svm.SVC(kernel='rbf', gamma=0.7, C = 1.0).fit(X_train, y_train)
y_predicted = clf.predict(X_test)
# performance
print "Classification report for %s" % clf
print metrics.classification_report(y_test, y_predicted)
print("F1 micro: %1.4fn" % f1_score(y_test, y_predicted, average='micro'))
print("F1 macro: %1.4fn" % f1_score(y_test, y_predicted, average='macro'))
print("F1 weighted: %1.4fn" % f1_score(y_test, y_predicted, average='weighted'))
print("Accuracy: %1.4f" % (accuracy_score(y_test, y_predicted)))
示例输出
Classification report for SVC(C=1.0, cache_size=200, class_weight=None, coef0=0.0,
decision_function_shape=None, degree=3, gamma=0.7, kernel='rbf',
max_iter=-1, probability=False, random_state=None, shrinking=True,
tol=0.001, verbose=False)
precision recall f1-score support
0 1.00 0.90 0.95 10
1 0.50 0.88 0.64 8
2 0.86 0.50 0.63 12
avg / total 0.81 0.73 0.74 30
F1 micro: 0.7333
F1 macro: 0.7384
F1 weighted: 0.7381
Accuracy: 0.7333