0
私は複数ラベルのデータセットを持っており、クロスバリデーションテストで各ラベルのFスコア値を求めたいと思います。 sklearnやskmultilearnに実装されているサンプルコードはありますか?そのドキュメントは、データセット全体の価値を提供するように見えます。複数ラベル分類のクロスバリデーションによって個々のラベルのFスコアを評価
私は複数ラベルのデータセットを持っており、クロスバリデーションテストで各ラベルのFスコア値を求めたいと思います。 sklearnやskmultilearnに実装されているサンプルコードはありますか?そのドキュメントは、データセット全体の価値を提供するように見えます。複数ラベル分類のクロスバリデーションによって個々のラベルのFスコアを評価
あなたはscikit学習の分類レポートを使用することができ、あなたは、yとy_predictが
from sklearn.metrics import classification_report
y = [0, 1, 2, 2, 2]
y_pred = [1, 0, 2, 2, 1]
classes = {'Banana':0,'Apple':1,'Orange':2}
print(classification_report(y, y_pred,target_names=classes.keys()))
出力また
precision recall f1-score support
Banana 0.00 0.00 0.00 1
Apple 0.00 0.00 0.00 1
Orange 1.00 0.67 0.80 3
avg/total 0.60 0.40 0.48 5
あなたは
print(f1_score(y, y_pred,average=None))
使用することができているとし、あなたが買ってあげますリスト内のラベルのスコア
[ 0. 0. 0.8]
もちろん、あなたはKFolds iteratorを使用することができますし、すべての折り目を通過し、各ラベルのための彼らのF1を得るが、私はあなたがそれをやりたいと思い理由を参照いけません。
クロスバリデーションを使用している場合は、スコアを使用してモデルを評価して最適なものを選択するため、1回のスコアでf1スコアを取得できます。
from sklearn import svm, datasets
from sklearn.model_selection import cross_val_score
iris = datasets.load_iris()
X, y = iris.data, iris.target
clf = svm.SVC()
cross_val_score(model, X, y, cv=10, scoring='f1_weighted')
意志出力10のスコア、回答の折り目あたり1つの
array([ 1. , 0.93265993, 1. , 1. , 1. ,
0.93265993, 0.93265993, 1. , 1. , 1. ])
おかげの配列次の例を参照。しかし、私が本当に尋ねたのは、マルチラベルデータではなく、マルチラベルデータ(各ラベルのバイナリクラスデータを持つ複数出力(ラベル))です。したがって、クロスバリデーションスコアを決定する入力は、マルチラベルデータセットのX、y(ラベル出力のセット)でなければなりません。 score = cross_val_score(model、X、y、cv = 10、scoring = 'f1_weighted')を使用すると、データセット全体のスコアが返されます。個々のラベルごとにスコアを得る方法はありますか? – user3464608
私が見ることができるのは、yの各列、つまり各ラベルのセットで交差検証を使用することだけです。範囲(y.shape [1])])内のiに対して 'np.vstack([モデル、X、y [:、i]、cv = 10、スコアリング= 'f1')のようにn_label ×10形状のアレイ – sgDysregulation