公開日:2019-08-15
最終更新日:2019-08-26
最終更新日:2019-08-26
skl06-0:準備
次のcurry2.csv
は第5章で用いたBobのカレーに対する評価履歴データである.以下のデータをdata
ディレクトリに配置したうえで,次のコードを実行しよう.
curry2.csv
:カレーに対する評価履歴データ(データIDid
,辛さspicy {0-100}
,とろみthickness {0-100}
,評価値rating {0=嫌い, 1=好き}
)
1 2 3 4 5 6 7 8 9 10 11 12 13 14 15 |
>>> import numpy as np >>> import pandas as pd >>> >>> # データの読込み >>> curry2 = pd.read_csv('data/curry2.csv', index_col=0) >>> >>> feature_names = np.array(curry2.columns[:-1]) >>> target_names = ['dislike', 'like'] >>> >>> curry2_X = np.array(curry2[feature_names]) >>> curry2_y = np.array(curry2['rating']) >>> >>> # SVCオブジェクトの生成 >>> from sklearn.svm import SVC >>> svc = SVC(kernel='rbf', C=1, gamma=0.01) |
skl06-1:
KFold
とcross_val_score
のインポートKFold
とcross_val_score
をインポートしよう.
難易度:★
ミッション | 説明 |
---|---|
1 | KFold をインポートする. |
2 | cross_val_score をインポートする. |
skl06-2:
KFold
オブジェクトの生成KFold
オブジェクトを生成しよう.ここで,パラメタはn_splits=5
とする.
難易度:★★
ミッション | 説明 |
---|---|
1 | KFold() コンストラクタを呼び出す. |
2 | n_splits パラメタを指定する. |
3 | 生成したKFold オブジェクトをk_fold とする. |
skl06-3:
cros_val_score()
関数による5分割交差検証svc
によりデータセットに対して5分割交差検証による5回分のスコアを取得しよう.ここで,パラメタはcv=k_fold, scoring='accuracy'
とする.
難易度:★★
ミッション | 説明 |
---|---|
1 | cross_val_score() 関数を使う. |
2 | cv パラメタを指定する. |
3 | scoring パラメタを指定する. |
skl06-4:
cross_val_score()
関数を用いない交差検証(1)次のループ処理を実行しよう.この結果得られたscores
が,クエストskl06-3で得られたスコアと一致することを確認しよう.
1 2 3 4 5 6 7 8 9 10 11 12 |
>>> X_folds = np.array_split(curry2_X, 5) >>> y_folds = np.array_split(curry2_y, 5) >>> >>> scores = list() >>> for k in range(5): >>> X_train = list(X_folds) >>> X_test = X_train.pop(k) >>> X_train = np.concatenate(X_train) >>> y_train = list(y_folds) >>> y_test = y_train.pop(k) >>> y_train = np.concatenate(y_train) >>> scores.append(svc.fit(X_train, y_train).score(X_test, y_test)) |
難易度:★★
ミッション | 説明 |
---|---|
1 | print() 関数を使う. |
skl06-5:
cross_val_score()
関数を用いない交差検証(2)次のリスト内包表記で表されたコードを実行しよう.この結果得られたスコアが,クエストskl06-3で得られたスコアと一致することを確認しよう.
1 |
>>> [svc.fit(curry2_X[train], curry2_y[train]).score(curry2_X[test], curry2_y[test]) for train, test in k_fold.split(curry2_X)] |
難易度:★★
ミッション | 説明 |
---|---|
1 | print() 関数を使う. |