公開日:2019-08-15
最終更新日:2019-08-26
最終更新日:2019-08-26
skl05-0:準備
次のcurry2.csvは第1章で用いた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 16 17 18 19 20 21 |
>>> 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']) >>> >>> # 全データをランダムに学習データ80%とテストデータ20%に分割 >>> n = len(curry2_X) >>> m = int(n * 0.2) >>> np.random.seed(0) >>> indices = np.random.permutation(n) >>> curry2_X_train = curry2_X[indices[:-m]] >>> curry2_y_train = curry2_y[indices[:-m]] >>> curry2_X_test = curry2_X[indices[-m:]] >>> curry2_y_test = curry2_y[indices[-m:]] |
skl05-1:
SVCのインポートSVCをインポートしよう.
難易度:★
| ミッション | 説明 |
|---|---|
| 1 | SVCをインポートする. |
skl05-2:
SVCオブジェクト(線形カーネル)の生成SVCオブジェクトを生成しよう.ここで,パラメタはkernel='linear'とする.
難易度:★★
| ミッション | 説明 |
|---|---|
| 1 | SVC()コンストラクタを呼び出す. |
| 2 | kernelパラメタを指定する. |
| 3 | 生成したSVCオブジェクトをsvcとする. |
skl05-3:線形SVMによる学習
学習データを基にsvcにより学習しよう.
難易度:★★
| ミッション | 説明 |
|---|---|
| 1 | SVC.fit()メソッドを使う. |
skl05-4:線形SVMによる予測
svcによりテストデータに対してラベルを予測しよう.
難易度:★★
| ミッション | 説明 |
|---|---|
| 1 | SVC.predict()メソッドを使う. |
skl05-5:線形SVMによる予測精度の取得
svcのテストデータに対する予測精度を取得しよう.
難易度:★
| ミッション | 説明 |
|---|---|
| 1 | SVC.score()メソッドを使う. |
skl05-6:線形SVMによる学習モデルの可視化
次のコードはsvcによる学習モデルを可視化するものである.次のコードをskl05_plt01.pyというファイル名で保存し,python3コマンドで実行しよう.
|
1 2 3 4 5 6 7 8 9 10 11 12 13 14 15 16 17 18 19 20 21 22 23 24 25 26 27 28 29 30 31 32 33 34 35 36 37 38 39 40 41 42 43 44 45 46 47 |
import numpy as np import pandas as pd import matplotlib.pyplot as plt from matplotlib.colors import ListedColormap from sklearn.svm import SVC # data 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']) # train svc = SVC(kernel='linear') svc.fit(curry2_X, curry2_y) # plot cmap_light = ListedColormap(['#CCCCFF', '#FFCCCC']) cmap_dark = ListedColormap(['#8888FF', '#FF8888']) x_min = 0 x_max = 100 y_min = 0 y_max = 100 xx, yy = np.mgrid[x_min:x_max:200j, y_min:y_max:200j] Z = svc.decision_function(np.c_[xx.ravel(), yy.ravel()]) Z = Z.reshape(xx.shape) plt.pcolormesh(xx, yy, Z, cmap=cmap_light) plt.contour(xx, yy, Z, colors=['k', 'k', 'k'], linestyles=['--', '-', '--'], levels=[-.5, 0, .5]) plt.scatter(svc.support_vectors_[:, 0], svc.support_vectors_[:, 1], s=80, facecolors='none', edgecolors='k') plt.scatter(curry2_X[:, 0], curry2_X[:, 1], c=curry2_y, cmap=cmap_dark, edgecolors='k') plt.title("curry2") plt.xlabel('spicy') plt.ylabel('thickness') plt.xlim(xx.min(), xx.max()) plt.ylim(yy.min(), yy.max()) plt.show() |
難易度:★
| ミッション | 説明 |
|---|---|
| 1 | python3コマンドでskl05_plt01.pyを実行する. |
skl05-7:
SVCオブジェクト(RBFカーネル)の生成SVCオブジェクトを生成しよう.ここで,パラメタはkernel='rbf', C=1, gamma=0.01とする.
難易度:★★
| ミッション | 説明 |
|---|---|
| 1 | SVC()コンストラクタを呼び出す. |
| 2 | kernelパラメタを指定する. |
| 3 | Cパラメタを指定する. |
| 4 | gammaパラメタを指定する. |
| 5 | 生成したSVCオブジェクトをsvc_rbfとする. |
skl05-8:非線形SVMによる学習
学習データを基にsvc_rbfにより学習しよう.
難易度:★★
| ミッション | 説明 |
|---|---|
| 1 | SVC.fit()メソッドを使う. |
skl05-9:非線形SVMによる予測
svc_rbfによりテストデータに対してラベルを予測しよう.
難易度:★★
| ミッション | 説明 |
|---|---|
| 1 | SVC.predict()メソッドを使う. |
skl05-10:非線形SVMによる予測精度の取得
svc_rbfのテストデータに対する予測精度を取得しよう.
難易度:★
| ミッション | 説明 |
|---|---|
| 1 | SVC.score()メソッドを使う. |
skl05-11:非線形SVMによる学習モデルの可視化
次のコードはsvc_rbfによる学習モデルを可視化するものである.次のコードをskl05_plt02.pyというファイル名で保存し,python3コマンドで実行しよう.
|
1 2 3 4 5 6 7 8 9 10 11 12 13 14 15 16 17 18 19 20 21 22 23 24 25 26 27 28 29 30 31 32 33 34 35 36 37 38 39 40 41 42 43 44 45 46 47 |
import numpy as np import pandas as pd import matplotlib.pyplot as plt from matplotlib.colors import ListedColormap from sklearn.svm import SVC # data 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']) # train svc_rbf = SVC(kernel='rbf', C=1, gamma=0.1) svc_rbf.fit(curry2_X, curry2_y) # plot cmap_light = ListedColormap(['#CCCCFF', '#FFCCCC']) cmap_dark = ListedColormap(['#8888FF', '#FF8888']) x_min = 0 x_max = 100 y_min = 0 y_max = 100 xx, yy = np.mgrid[x_min:x_max:200j, y_min:y_max:200j] Z = svc_rbf.decision_function(np.c_[xx.ravel(), yy.ravel()]) Z = Z.reshape(xx.shape) plt.pcolormesh(xx, yy, Z, cmap=cmap_light) plt.contour(xx, yy, Z, colors=['k', 'k', 'k'], linestyles=['--', '-', '--'], levels=[-.5, 0, .5]) plt.scatter(svc_rbf.support_vectors_[:, 0], svc_rbf.support_vectors_[:, 1], s=80, facecolors='none', edgecolors='k') plt.scatter(curry2_X[:, 0], curry2_X[:, 1], c=curry2_y, cmap=cmap_dark, edgecolors='k') plt.title("curry2") plt.xlabel('spicy') plt.ylabel('thickness') plt.xlim(xx.min(), xx.max()) plt.ylim(yy.min(), yy.max()) plt.show() |
難易度:★
| ミッション | 説明 |
|---|---|
| 1 | python3コマンドでskl05_plt02.pyを実行する. |