線形分離可能でないデータを扱う場合SVMのSVCというモジュールを使います。
SVCでもパラメーターCが存在します。
Cのことを正則化係数または罰則係数と呼ぶこともあります。
学習時に分類の誤りをどの程度許容するかという係数であるためそのように呼ばれます。
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 |
import matplotlib.pyplot as plt from sklearn.svm import SVC from sklearn.datasets import make_gaussian_quantiles from sklearn import preprocessing from sklearn.model_selection import train_test_split %matplotlib inline # データの生成 X, y = make_gaussian_quantiles(n_samples=1250, n_features=2, random_state=42) train_X, test_X, train_y, test_y = train_test_split(X, y, random_state=42) # Cの値の範囲を設定(今回は1e-5,1e-4,1e-3,0.01,0.1,1,10,100,1000,10000) C_list = [10 ** i for i in range(-5, 5)] # グラフ描画用の空リストを用意 train_accuracy = [] test_accuracy = [] # 以下にコードを書いてください。 for C in C_list: model = SVC(C=C) model.fit(train_X, train_y) train_accuracy.append(model.score(train_X, train_y)) test_accuracy.append(model.score(test_X, test_y)) # コードの編集はここまでです。 # グラフの準備 # semilogx()はxのスケールを10のx乗のスケールに変更する plt.semilogx(C_list, train_accuracy, label="accuracy of train_data") plt.semilogx(C_list, test_accuracy, label="accuracy of test_data") plt.title("accuracy with changing C") plt.xlabel("C") plt.ylabel("accuracy") plt.legend() plt.show() |
コメントを残す