SVM (SVC) von Scikit-Learn klassifiziert bei der Durchführung einer Mehrklassenklassifizierung nach Eins gegen Eins. Eins gegen den Rest kann jedoch eine bessere Diskriminierungsleistung aufweisen (ich sehe Berichte, dass es viele gibt). Verwenden von OneVsRestClassifier von sklearn.multiclass Notieren Sie sich, wie Sie die SVM-Klassifizierung für mehrere Klassen in One-versus-the-Rest ** durchführen. (Hinweis) LinearSVC verwendet jedoch standardmäßig "Eins gegen den Rest".
Betrachten Sie das $ K $ -Klassifizierungsproblem.
One-versus-the-rest Verwenden Sie $ K $ -Klassifizierer, um das Zwei-Klassen-Klassifizierungsproblem der Eingabe einer bestimmten Klasse oder einer der anderen $ K-1 $ -Klassen zu lösen.
One-versus-one Verwenden Sie $ K (K-1) / 2 $ -Klassifizierer, um das Zwei-Klassen-Klassifizierungsproblem der Eingabe einer bestimmten Klasse oder einer anderen bestimmten Klasse zu lösen.
Unter Verwendung des Ziffern-Datensatzes wird eine 10-Klassen-Klassifizierung von handgeschriebenen Zeichen durch SVM des RBF-Kernels durchgeführt.
python
from sklearn.datasets import load_digits
from sklearn.multiclass import OneVsRestClassifier
from sklearn.svm import SVC
from sklearn.cross_validation import train_test_split
from sklearn.metrics import accuracy_score
python
digits = load_digits()
train_x, test_x, train_y, test_y = train_test_split(digits.data, digits.target)
python
C = 1.
kernel = 'rbf'
gamma = 0.01
python
estimator = SVC(C=C, kernel=kernel, gamma=gamma)
classifier = OneVsRestClassifier(estimator)
classifier.fit(train_x, train_y)
pred_y = classifier.predict(test_x)
python
classifier2 = SVC(C=C, kernel=kernel, gamma=gamma)
classifier2.fit(train_x, train_y)
pred_y2 = classifier2.predict(test_x)
python
print 'One-versus-the-rest: {:.5f}'.format(accuracy_score(test_y, pred_y))
print 'One-versus-one: {:.5f}'.format(accuracy_score(test_y, pred_y2))
One-versus-the-rest: 0.95333 One-versus-one: 0.79111
Eins gegen den Rest zeigt eine höhere Diskriminierungsleistung.
pylearn2.models.svm (sklearn wrapper) sklearn.multiclass.OneVsRestClassifier Ex. sklearn.multiclass.OneVsRestClassifier sklearn.svm
Recommended Posts