I want to calculate the precision
, recall
and f-score
using libsvm in Python but I do not know how. I have found this site but I have not understand how to call the function, if you can help me through example.
我想在Python中使用libsvm计算精度、召回率和f-score,但我不知道如何计算。我已经找到了这个站点,但是我不知道如何调用这个函数,如果你可以通过示例帮助我的话。
1 个解决方案
#1
10
You can take advantage of scikit-learn
, which is one of the best packages for machine learning in Python. Its SVM implementation uses libsvm
and you can work out precision, recall and f-score as shown in the following snippet:
您可以利用scikit-learn,它是Python中用于机器学习的最佳软件包之一。它的SVM实现使用libsvmand,您可以计算出精确、回忆和f-score,如下面的代码片段所示:
from sklearn import svm
from sklearn import metrics
from sklearn.cross_validation import train_test_split
from sklearn.datasets import load_iris
# 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
print metrics.classification_report(y_test, y_predicted)
print
print "Confusion matrix"
print metrics.confusion_matrix(y_test, y_predicted)
Which will produce an output similar to this:
将产生类似的输出:
Classification report for SVC(C=1.0, cache_size=200, class_weight=None, coef0=0.0, degree=3, gamma=0.7,
kernel=rbf, max_iter=-1, probability=False, shrinking=True, tol=0.001,
verbose=False)
precision recall f1-score support
0 1.00 1.00 1.00 9
1 0.90 0.69 0.78 13
2 0.64 0.88 0.74 8
avg / total 0.86 0.83 0.84 30
Confusion matrix
[[9 0 0]
[0 9 4]
[0 1 7]]
Of course, you can use the libsvm tools
you have mentioned, however they are designed to work only with binary classification whereas scikit
allows you to work with multiclass.
当然,您可以使用您提到的libsvm工具,但是它们只用于二进制分类,而scikitt允许您使用multiclass。
#1
10
You can take advantage of scikit-learn
, which is one of the best packages for machine learning in Python. Its SVM implementation uses libsvm
and you can work out precision, recall and f-score as shown in the following snippet:
您可以利用scikit-learn,它是Python中用于机器学习的最佳软件包之一。它的SVM实现使用libsvmand,您可以计算出精确、回忆和f-score,如下面的代码片段所示:
from sklearn import svm
from sklearn import metrics
from sklearn.cross_validation import train_test_split
from sklearn.datasets import load_iris
# 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
print metrics.classification_report(y_test, y_predicted)
print
print "Confusion matrix"
print metrics.confusion_matrix(y_test, y_predicted)
Which will produce an output similar to this:
将产生类似的输出:
Classification report for SVC(C=1.0, cache_size=200, class_weight=None, coef0=0.0, degree=3, gamma=0.7,
kernel=rbf, max_iter=-1, probability=False, shrinking=True, tol=0.001,
verbose=False)
precision recall f1-score support
0 1.00 1.00 1.00 9
1 0.90 0.69 0.78 13
2 0.64 0.88 0.74 8
avg / total 0.86 0.83 0.84 30
Confusion matrix
[[9 0 0]
[0 9 4]
[0 1 7]]
Of course, you can use the libsvm tools
you have mentioned, however they are designed to work only with binary classification whereas scikit
allows you to work with multiclass.
当然,您可以使用您提到的libsvm工具,但是它们只用于二进制分类,而scikitt允许您使用multiclass。