end0tknr's kipple - web写経開発

太宰府天満宮の狛犬って、妙にカワイイ

scikit-learn(sklearn)for python による交差検証 - model_selection.cross_val_score()

更に先程のentryの続きです。

scikit-learn(sklearn)for python の model_selection.cross_val_score() は、データ分割を含めた交差検証を まとめて実行してくれるようです。

試していませんが、今回の cross_val_score()以外に cross_validate()もあるそうです

#!python
# -*- coding: utf-8 -*-
# refer to https://www.codexa.net/cross_validation/
import pandas as pd
import warnings
from sklearn import datasets
from sklearn import metrics
from sklearn import model_selection
from sklearn import svm

def main():

    # warining無視を行わない場合、以下のwarningが大量に表示されます
    # lib/site-packages/sklearn/utils/validation.py:1143:
    # DataConversionWarning: A column-vector y was passed when a 1d array was
    # expected. Please change the shape of y to (n_samples, ),
    # for example using ravel().
    warnings.filterwarnings('ignore')


    src   = datasets.load_breast_cancer()
    data  = pd.DataFrame(src.data, columns=src.feature_names)
    label = pd.DataFrame(src.target, columns=["label"])

    svc = svm.SVC()  # defaultの状態でモデル構築
    score = model_selection.cross_val_score(svc, data, label, cv=5)
    # cross_val_score()以外に cross_validate()もあるそうです
    # c.f. https://www.haya-programming.com/entry/2018/03/31/184557

    print('各正解率', score)
    print('正解率', score.mean())
    
    
if __name__ == '__main__':
    main()

↑こう書くと、↓こう表示されます

各正解率 [0.85087719 0.89473684 0.92982456 0.94736842 0.9380531 ]
正解率 0.9121720229777983