

機械学習を研究で初めてまだ初心者です。研究で4クラス分類の問題を扱っててaccuracyやprecisionやrecallを算出したいです。  
データ数が少ない(30件ほど)で分割のされ方によってスコアにかなり影響を受けてしまいます。交差検証したときのばらつきが大きくて(例えばaccuracyが[0.83333333
0.72727273
0.44444444]など)評価方法に困っています。こういう場合なのですが100回とか500回とか交差検証を行ってその平均を出すという評価方法でよいですか？非常に初歩的な質問なのですがよろしくお願いします。

[code]

    ava = []
    avp = []
    avr = []
    estimators = [("MinMaxScaler", MinMaxScaler()), 
                      ("SVC", SVC(kernel='linear', class_weight='balanced', 
                        C=1, decision_function_shape='ovr'))]
        pl = Pipeline(estimators)
    
    for i in range(ITER):       
        accuracy = cross_val_score(pl, X, y, cv=StratifiedKFold(n_splits=3, shuffle=True))
        precision = cross_val_score(pl, X, y, scoring='precision_macro', cv=StratifiedKFold(n_splits=3, shuffle=True))
        recall = cross_val_score(pl, X, y, scoring='recall_macro', cv=StratifiedKFold(n_splits=3, shuffle=True))
        ava.append(np.mean(accuracy))
        avp.append(np.mean(precision))
        avr.append(np.mean(recall))
    print("cross-val-score accuracy {}times average: ".format(ITER), np.mean(ava), "\n")
    print("cross-val-score precision {}times average: ".format(ITER), np.mean(avp), "\n")
    print("cross-val-score recall {}times average: ".format(ITER), np.mean(avr), "\n")
    
[/code]


CC BY-SA 4.0
2018-11-29T04:37:10.413
50739
2020-05-16T22:04:05.480
2018-12-01T07:07:04.770
31202
31202
question
python 機械学習 scikit-learn
分類問題における評価方法について


少ないデータでしたら、汎化性能の検証としてはLOOCVがよろしいかと思います。各4クラス30件ほどと見受けられますので、合計120件のうち、1件のみをテストデータ、残り119件を訓練データとしてそれぞれデータセットを作成し、120回繰り返し評価することで、どのデータが精度に影響しているかが分かるかと思います。ご参考頂けましたら幸いです。


CC BY-SA 4.0
2018-12-09T12:42:28.600
51066
2018-12-09T12:42:28.600
30009
50739
answer


> for i in range(ITER):

でループを回さなくとも、cv= や n_splits=
になるべく大きな自然数（10〜120?)を入れて平均をとれば、繰り返し数を多くした精度指標が得られるかと思います。


CC BY-SA 4.0
2019-01-01T06:46:42.270
51646
2019-01-01T06:46:42.270
31636
50739
answer