Menu
CoddyTech

K分割検証

CoddyのMachine Learningジャーニー「教師あり学習」セクションの一部。レッスン 37/58。

この章では、スコアの信頼性を高めます。この章を終える頃には、次のようなグラフを使ってモデルを調整できるようになります。

k が 1 から 41 までのときの、5 分割における平均精度を示す棒グラフ。棒は k = 1 の 0.85 から上昇し、k = 15 で最高値の 0.91 が強調表示された後、低下する

1回のテスト分割では、たまたま良い結果になることがあります。K分割交差検証では、行を5つの分割に分け、各分割を順番にテストに使い、残りで学習します:

5つのセルからなる行が5行あります。各分割では、毎回異なる1つのセルがテスト用の分割となり、残り4つで学習します。その横にあるIrisの決定木のスコア:0.967、0.967、0.900、0.967、1.000

1回の呼び出しで5回すべて実行します。ここではアヤメの花を対象にした決定木を使います。

from sklearn.model_selection import cross_val_score

tree = DecisionTreeClassifier(random_state=0)
scores = cross_val_score(tree, X, y, cv=5)
print(np.round(scores, 3))
print(f"{scores.mean():.3f} {scores.std():.3f}")

これは次のように出力されます:

[0.967 0.967 0.9   0.967 1.   ]
0.960 0.033

平均値をスコアとして報告し、標準偏差をスコアの揺れの大きさとして報告します。

challenge icon

チャレンジ

中級

コンブチャ醸造所では、5つの検査値からバッチの腐敗を予測します。このモデルの安定性はどの程度でしょうか?プログラムは分割数を読み込みます。スターターコードでデータとモデルを作成します。

  1. その分割数でモデルを交差検証します。
  2. 各分割の正解率を出力し、その後、平均と標準偏差を小数点以下3桁で出力します。
  3. 最も低い分割の番号を、1から数えて出力します。

別のバッチと4の場合:

Fold 1: 0.917
Fold 2: 0.933
Fold 3: 0.883
Fold 4: 0.917
Mean 0.912, std 0.018
Weakest fold: 3

自分で試してみよう

import numpy as np
from sklearn.datasets import make_classification
from sklearn.model_selection import cross_val_score
from sklearn.linear_model import LogisticRegression

n_folds = int(input())

# 以下の行は変更しないでください:コンブチャの製造バッチは240、各バッチの検査値は5つです。ラベル1は腐敗を意味します
X, y = make_classification(n_samples=240, n_features=5, n_informative=3, n_redundant=0,
                           flip_y=0.08, class_sep=0.9, random_state=2)
model = LogisticRegression(max_iter=1000)

# 以下にコードを書いてください
quiz icon腕試し

このレッスンには短いクイズがあります。レッスンを始めて解答し、進捗を記録しましょう。

教師あり学習のすべてのレッスン

自分で練習してみよう: Pythonオンラインコンパイラ