• Skip to main content
  • Skip to primary sidebar

学習記録

パラメーター kernel 非線形SVMのハイパーパラメーター

2017年12月14日 by 河副 太智 Leave a Comment

パラメーターkernelは非線形SVMの中でも特に重要なパラメーターであり、受け取ったデータを操作して分類しやすい形にするための関数を定義するパラメーターです。

「linear」、「rbf」、「poly」、「sigmoid」、「precomputed」の5つを値としてとることができます。デフォルトは「rbf」です。
linearは線形SVMであり、LinearSVCとほぼ同じです。特殊な理由がない限りはLinearSVCを使いましょう。
rbf、polyは立体投影のようなものです。rbfは比較的高い正解率のため通常はデフォルトであるrbfを推奨します。
precomputedはデータが前処理によってすでに整形済みの場合に用います。
sigmoidはロジスティック回帰モデルと同じ処理を行います。

 

LinearSVCとSVC(kernel=”linear”)では特別に定義されているLinearSVCの方が優れています。

Filed Under: 教師有り, 機械学習

パラメーター C 非線形SVMのハイパーパラメーター

2017年12月14日 by 河副 太智 Leave a Comment

線形分離可能でないデータを扱う場合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()

 

Filed Under: 教師有り, 機械学習

パラメーター random_state 線形SVMのハイパーパラメーター

2017年12月14日 by 河副 太智 Leave a Comment

結果の固定に用いられるrandom_stateですが、SVMに関してはサポートベクターの決定にも関わります。
最終的に学習する境界線はほぼ同じになるものの、わずかながら差異が出ることに留意してください。

random_stateは値が違うと差異が生じる場合があります。特にデータ同士が密接せず散らばっている場合はサポートベクターの選択が変わるため境界線に大きく影響します。
random_stateの値が同じ値であれば、同じ操作をする限りモデルは同じ予測結果を返します。

1
数値を固定して結果を固定するのに使うため、数値の値はいくつでも良い。

Filed Under: 機械学習

パラメーター multi_class 線形SVMのハイパーパラメーター

2017年12月14日 by 河副 太智 Leave a Comment

multi_classは多項分類を行う際にモデルがどういった動作を行うかということを決めるパラメーターです。
線形SVMでは「ovr」、「crammer_singer」の2つの値が用意されています。
基本的にはovrの方が動作が軽く結果が良いです。

 

線形SVMではmulti_classの初期値はovrです。
二値分類の場合このパラメーターを設定する必要はありません。

1
Yes or Noの二値分類ではこの値は無視される。

Filed Under: 機械学習

パラメーター penalty 線形SVMのハイパーパラメーター

2017年12月14日 by 河副 太智 Leave a Comment

ロジスティック回帰同様に線形SVMにもpenaltyのパラメーターがあります。
設定できる値も同じく、”l1″と”l2″です。

 

データの要素がA,B,C,Dの4種類であり、ラベルがDである時、次のペナルティに関する説明のうち正しいものを選んでください。

 

l1ペナルティは主成分を抽出する働きがあります。
l2ペナルティは特定の相関性を見ず、データ全体の関係性を用いてモデルを説明しようとします。

 

1
B=2A,C=Aの関係がある時、l1ペナルティはBとCの重みを減らしAだけでモデルに説明させるように働く。

Filed Under: Python 基本

パラメーター C 線形SVMのハイパーパラメーター

2017年12月14日 by 河副 太智 Leave a Comment

SVMにもロジスティック回帰と同様に分類の誤りの許容度を示すCがパラメーターとして定義されています。
使い方もロジスティック回帰と同様です。

SVMはロジスティック回帰に比べてCによるデータのラベルの予測値変動が激しいです。
SVMのアルゴリズムはロジスティック回帰にくらべてより一般化された境界線を得るため、誤りの許容度が上下するとサポートベクターが変化し、ロジスティック回帰よりも正解率が上下することになります。

線形SVMモデルではCの初期値は1.0です。

モジュールはLinearSVCを利用します。

 

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
48
49
50
51
52
import matplotlib.pyplot as plt
from sklearn.linear_model import LogisticRegression
from sklearn.svm import LinearSVC
from sklearn.datasets import make_classification
from sklearn import preprocessing
from sklearn.model_selection import train_test_split
%matplotlib inline
 
 
# データの生成
X, y = make_classification(
    n_samples=1250, n_features=4, n_informative=2, n_redundant=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)]
 
# グラフ描画用の空リストを用意
svm_train_accuracy = []
svm_test_accuracy = []
log_train_accuracy = []
log_test_accuracy = []
 
# 以下にコードを書いてください。
 
# コードの編集はここまでです。
    
# グラフの準備
# semilogx()はxのスケールを10のx乗のスケールに変更する
 
fig = plt.figure(figsize=(16, 6))
plt.subplots_adjust(wspace=0.4, hspace=0.4)
ax = fig.add_subplot(1, 2, 1)
ax.grid(True)
ax.set_title("SVM")
ax.set_xlabel("C")
ax.set_ylabel("accuracy")
ax.semilogx(C_list, svm_train_accuracy, label="accuracy of train_data")
ax.semilogx(C_list, svm_test_accuracy, label="accuracy of test_data")
ax.legend()
ax.plot()
 
ax = fig.add_subplot(1, 2, 2)
ax.grid(True)
ax.set_title("LogisticRegression")
ax.set_xlabel("C")
ax.set_ylabel("accuracy")
ax.semilogx(C_list, log_train_accuracy, label="accuracy of train_data")
ax.semilogx(C_list, log_test_accuracy, label="accuracy of test_data")
ax.legend()
ax.plot()
plt.show()

 

Filed Under: 機械学習

  • « Go to Previous Page
  • Page 1
  • Interim pages omitted …
  • Page 35
  • Page 36
  • Page 37
  • Page 38
  • Page 39
  • Interim pages omitted …
  • Page 66
  • Go to Next Page »

Primary Sidebar

カテゴリー

  • AWS
  • Bootstrap
  • Dash
  • Django
  • flask
  • GIT(sourcetree)
  • Plotly/Dash
  • VPS
  • その他tool
  • ブログ
  • プログラミング
    • Bokeh
    • css
    • HoloViews
    • Jupyter
    • Numpy
    • Pandas
    • PosgreSQL
    • Python 基本
    • python3
      • webアプリ
    • python3解説
    • scikit-learn
    • scipy
    • vps
    • Wordpress
    • グラフ
    • コマンド
    • スクレイピング
    • チートシート
    • データクレンジング
    • ブロックチェーン
    • 作成実績
    • 時系列分析
    • 機械学習
      • 分析手法
      • 教師有り
    • 異常値検知
    • 自然言語処理
  • 一太郎
  • 数学
    • sympy
      • 対数関数(log)
      • 累乗根(n乗根)
    • 暗号学

Copyright © 2025 · Genesis Sample on Genesis Framework · WordPress · Log in