How to calculate precision, recall and F-score with libSVM in python

user2284345 picture user2284345 · Jun 4, 2013 · Viewed 10k times · Source

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.

Answer

jabaldonedo picture jabaldonedo · Jun 6, 2013

You can take advantage of scikit-learn, which is one of the best packages for machine learning in Python. Its SVM implementation uses libsvmand you can work out precision, recall and f-score as shown in the following snippet:

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 scikitallows you to work with multiclass.