私はこれがボックスからサポートされていないと思うので、あなた自身で行う必要があります。
ここにいくつかのコード例がありますが、それは非常にテストされていないのでプロトタイプと呼んでいます!単一クラスの精度とメタ精度(これは、確率推定によるもので、プラットスケーリングで得られたSVMの場合)と比較するのは難しいことに注意してください。
import numpy as np
from sklearn import datasets
from sklearn import svm
from sklearn.multiclass import OneVsRestClassifier
from sklearn.model_selection import train_test_split
# Data
iris = datasets.load_iris()
iris_X = iris.data
iris_y = iris.target
X_train, X_test, y_train, y_test = train_test_split(
iris_X, iris_y, test_size=0.5, random_state=0)
# Train classifier
classifier = OneVsRestClassifier(svm.SVC(kernel='linear', probability=True,
random_state=0))
y_score = classifier.fit(X_train, y_train).score(X_test, y_test)
print(y_score)
# Get all accuracies
classes = np.unique(y_train)
def get_acc_single(clf, X_test, y_test, class_):
pos = np.where(y_test == class_)[0]
neg = np.where(y_test != class_)[0]
y_trans = np.empty(X_test.shape[0], dtype=bool)
y_trans[pos] = True
y_trans[neg] = False
return clf.score(X_test, y_trans) # assumption: acc = default-scorer
for class_index, est in enumerate(classifier.estimators_):
class_ = classes[class_index]
print('class ' + str(class_))
print(get_acc_single(est, X_test, y_test, class_))
出力:
0.8133333333333334
class 0
1.0
class 1
0.6666666666666666
class 2
0.9733333333333334
多分 '(nはクラスXのm列)によってclassifier.coef_'。または、classifier.estimators_:est_for_record_score(y_test、classifier.predict(X_test))で 'forを実行します。注:最初にフィットし、スコアを一気に得るだけでなく、フィットする必要があります。 – Jarad