tôi muốn để tính toán precision
, recall
và f-score
sử dụng libsvm bằng Python nhưng tôi không biết làm thế nào. Tôi đã tìm thấy this site nhưng tôi không hiểu cách gọi hàm, nếu bạn có thể giúp tôi qua ví dụ.Làm thế nào để tính toán chính xác, thu hồi và F-score với libSVM trong python
5
A
Trả lời
10
Bạn có thể tận dụng lợi thế của scikit-learn
, một trong những gói tốt nhất để học máy bằng Python. thực hiện SVM của nó sử dụng libsvm
và bạn có thể làm việc ra chính xác, thu hồi và e-score như trong đoạn mã sau:
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)
Mà sẽ sản xuất một sản lượng tương tự như sau:
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]]
Tất nhiên, bạn có thể sử dụng các libsvm tools
bạn đã đề cập, tuy nhiên chúng được thiết kế để làm việc chỉ với phân loại nhị phân trong khi scikit
cho phép bạn làm việc với nhiều lớp.
Bạn đang tải bộ dữ liệu nào? Ví dụ: nếu tập dữ liệu của tôi nằm trong tệp văn bản thì cách sử dụng chúng? –
Trong ví dụ này, tôi đã sử dụng tập dữ liệu được xác định trước có tên là iris đi kèm với 'scikit-learn'. Đối với một tập dữ liệu cụ thể, bạn sẽ cần chuyển đổi dữ liệu văn bản của mình thành các ma trận có khối u. – jabaldonedo