decision_function_shapeはSVCにおけるmulti_classパラメーターのようなものです。
「ovo」、「ovr」の2つの値が用意されています。
ovoはクラス同士のペアを作り、そのペアでの2項分類を行い多数決で属するクラスを決定するという考え方です。
ovrは一つのクラスとそれ以外という分類を行い多数決で属するクラスを決定します。
ovoの方は計算量が多くデータの量の増大によっては動作が重くなることが考えられます
decision_function_shapeはSVCにおけるmulti_classパラメーターのようなものです。
「ovo」、「ovr」の2つの値が用意されています。
ovoはクラス同士のペアを作り、そのペアでの2項分類を行い多数決で属するクラスを決定するという考え方です。
ovrは一つのクラスとそれ以外という分類を行い多数決で属するクラスを決定します。
ovoの方は計算量が多くデータの量の増大によっては動作が重くなることが考えられます
パラメーターkernelは非線形SVMの中でも特に重要なパラメーターであり、受け取ったデータを操作して分類しやすい形にするための関数を定義するパラメーターです。
「linear」、「rbf」、「poly」、「sigmoid」、「precomputed」の5つを値としてとることができます。デフォルトは「rbf」です。
linearは線形SVMであり、LinearSVCとほぼ同じです。特殊な理由がない限りはLinearSVCを使いましょう。
rbf、polyは立体投影のようなものです。rbfは比較的高い正解率のため通常はデフォルトであるrbfを推奨します。
precomputedはデータが前処理によってすでに整形済みの場合に用います。
sigmoidはロジスティック回帰モデルと同じ処理を行います。
LinearSVCとSVC(kernel=”linear”)では特別に定義されているLinearSVCの方が優れています。
線形分離可能でないデータを扱う場合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() |
結果の固定に用いられるrandom_stateですが、SVMに関してはサポートベクターの決定にも関わります。
最終的に学習する境界線はほぼ同じになるものの、わずかながら差異が出ることに留意してください。
random_stateは値が違うと差異が生じる場合があります。特にデータ同士が密接せず散らばっている場合はサポートベクターの選択が変わるため境界線に大きく影響します。
random_stateの値が同じ値であれば、同じ操作をする限りモデルは同じ予測結果を返します。
|
1 |
数値を固定して結果を固定するのに使うため、数値の値はいくつでも良い。 |
multi_classは多項分類を行う際にモデルがどういった動作を行うかということを決めるパラメーターです。
線形SVMでは「ovr」、「crammer_singer」の2つの値が用意されています。
基本的にはovrの方が動作が軽く結果が良いです。
線形SVMではmulti_classの初期値はovrです。
二値分類の場合このパラメーターを設定する必要はありません。
|
1 |
Yes or Noの二値分類ではこの値は無視される。 |
ロジスティック回帰同様に線形SVMにもpenaltyのパラメーターがあります。
設定できる値も同じく、”l1″と”l2″です。
データの要素がA,B,C,Dの4種類であり、ラベルがDである時、次のペナルティに関する説明のうち正しいものを選んでください。
l1ペナルティは主成分を抽出する働きがあります。
l2ペナルティは特定の相関性を見ず、データ全体の関係性を用いてモデルを説明しようとします。
|
1 |
B=2A,C=Aの関係がある時、l1ペナルティはBとCの重みを減らしAだけでモデルに説明させるように働く。 |