[DSO] Machine Learning Seminar Vol.2 Chapter 3

Teruyuki Sakaue
Teruyuki SakaueData Analyst
[DSO] Machine Learning Seminar Vol.2[DSO] Machine Learning Seminar Vol.2
2020-02-xx
SKUE
 
Chapter3:分類問題-機械学習ライブラリscikit-learnの活Chapter3:分類問題-機械学習ライブラリscikit-learnの活⽤⽤
分類アルゴリズムの選択
パーセプトロン
ロジスティック回帰
正則化
サポートベクトルマシン
カーネルSVM
決定⽊学習
ランダムフォレスト
k近傍法:怠惰学習アルゴリズム
分類アルゴリズムの選択分類アルゴリズムの選択
1.特徴量を選択し、トレーニングサンプルを収集する
2.性能評価
3.分類器と最適化アルゴリズムを選択する
4.モデルの性能を評価する
5.アルゴリズムを調整する
パーセプトロンパーセプトロン
パーセプトロンのトレーニングパーセプトロンのトレーニング
  特徴量 行方向 結合
結合
決定境界
軸 設定
凡例 設定 左上 配置
scikit-learnの線形モデル(40個くらいある)scikit-learnの線形モデル(40個くらいある)
linear_model.LogisticRegression([penalty, …]):Logistic Regression (aka logit,
MaxEnt) classi er.
linear_model.LogisticRegressionCV([Cs, …]):Logistic Regression CV (aka logit,
MaxEnt) classi er.
linear_model.PassiveAggressiveClassi er([…]):Passive Aggressive Classi er
linear_model.Perceptron([penalty, alpha, …]):Read more in the User Guide.
linear_model.RidgeClassi er([alpha, …]):Classi er using Ridge regression.
linear_model.RidgeClassi erCV([alphas, …]):Ridge classi er with built-in cross-
validation.
linear_model.SGDClassi er([loss, penalty, …]):Linear classi ers (SVM, logistic
regression, a.o.) with SGD training.
linear_model.LinearRegression([…]):Ordinary least squares Linear Regression.
linear_model.Ridge([alpha, t_intercept, …]):Linear least squares with l2
regularization.
linear_model.RidgeCV([alphas, …]):Ridge regression with built-in cross-
validation.
linear_model.SGDRegressor([loss, penalty, …]):Linear model tted by
minimizing a regularized empirical loss with SGD
linear_model.ElasticNet([alpha, l1_ratio, …]):Linear regression with combined L1
and L2 priors as regularizer.
linear_model.ElasticNetCV([l1_ratio, eps, …]):Elastic Net model with iterative
tting along a regularization path.
linear_model.Lars([ t_intercept, verbose, …]):Least Angle Regression model
a.k.a.
linear_model.LarsCV([ t_intercept, …]):Cross-validated Least Angle Regression
model.
linear_model.Lasso([alpha, t_intercept, …]):Linear Model trained with L1 prior
as regularizer (aka the Lasso)
linear_model.LassoCV([eps, n_alphas, …]):Lasso linear model with iterative
tting along a regularization path.
linear_model.LassoLars([alpha, …]):Lasso model t with Least Angle Regression
a.k.a.
linear_model.LassoLarsCV([ t_intercept, …]):Cross-validated Lasso, using the
LARS algorithm.
linear_model.LassoLarsIC([criterion, …]):Lasso model t with Lars using BIC or
AIC for model selection
linear_model.OrthogonalMatchingPursuit([…]):Orthogonal Matching Pursuit
model (OMP)
linear_model.OrthogonalMatchingPursuitCV([…]):Cross-validated Orthogonal
Matching Pursuit model (OMP).
linear_model.ARDRegression([n_iter, tol, …]):Bayesian ARD regression.
linear_model.BayesianRidge([n_iter, tol, …]):Bayesian ridge regression.
linear_model.MultiTaskElasticNet([alpha, …]):Multi-task ElasticNet model
trained with L1/L2 mixed-norm as regularizer
linear_model.MultiTaskElasticNetCV([…]):Multi-task L1/L2 ElasticNet with
built-in cross-validation.
linear_model.MultiTaskLasso([alpha, …]):Multi-task Lasso model trained with
L1/L2 mixed-norm as regularizer.
linear_model.MultiTaskLassoCV([eps, …]):Multi-task Lasso model trained with
L1/L2 mixed-norm as regularizer.
linear_model.HuberRegressor([epsilon, …]):Linear regression model that is
robust to outliers.
linear_model.RANSACRegressor([…]):RANSAC (RANdom SAmple Consensus)
algorithm.
linear_model.TheilSenRegressor([…]):Theil-Sen Estimator: robust multivariate
regression model.
linear_model.PassiveAggressiveRegressor([C, …]):Passive Aggressive Regressor
linear_model.enet_path(X, y[, l1_ratio, …]):Compute elastic net path with
coordinate descent.
linear_model.lars_path(X, y[, Xy, Gram, …]):Compute Least Angle Regression or
Lasso path using LARS algorithm [1]
linear_model.lars_path_gram(Xy, Gram, n_samples):lars_path in the suf cient
stats mode [1]
linear_model.lasso_path(X, y[, eps, …]):Compute Lasso path with coordinate
descent
linear_model.orthogonal_mp(X, y[, …]):Orthogonal Matching Pursuit (OMP)
linear_model.orthogonal_mp_gram(Gram, Xy[, …]):Gram Orthogonal Matching
Pursuit (OMP)
linear_model.ridge_regression(X, y, alpha[, …]):Solve the ridge equation by the
method of normal equations.
ロジスティック回帰ロジスティック回帰
分類モデル(多クラス問題も扱える)
線形モデル
ロジット関数
はオッズ⽐
の⾃然対数となる。ロジット関数は特徴量の値と対数オッズとの間の線形関係を表す
ことができる。
よって、
変形すると、
となる。この関数は値域が0から1の間に収まるため、割合などの予測に適している。
また、この関数は以下のようにも表現できる。
なお、ここでのw_0はバイアスユニットを表し、x_0は1に設定される。
logit(p) = log
p
(1 − p)
p
(1 − p)
logit(p(y = 1|x)) = + + ⋯ + = = xw0 x0 w1 x1 w1 xm
∑
i=0
m
wi xi w
T
log = x
p
(1 − p)
w
T
p = =
e
xw
T
1 + e
xw
T
1
1 + e
− xw
T
ϕ(z) =
1
1 + e
−z
z = x = + + ⋯ +w
T
w0 x0 w1 x1 wm xm
[DSO] Machine Learning Seminar Vol.2 Chapter 3
 
シグモイド関数をプロットしてみるシグモイド関数をプロットしてみる
 
関数 定義
 
このシグモイド関数の出⼒は、インスタンスがクラス1に属している確率
として表すことができる。クラスが2つしかない場合、以下のように、もう⽚⽅のク
ラスの確率を簡単に計算できる。
⼆値分類の際は、確率に対して閾値関数を使⽤することで変換すればよい。
なお、z=0のときφ(0)=0.5であるから、先程の図から明らかなように、この前後でzが
負値から正値に切り替わることがわかる。そのため、
と書き換えることができる。
scikit-learnのソースコードを実際に⾒てみると前述の式と同様に、zが正か負かによっ
てラベルを割り当てているのがわかる。
ϕ(z) = P(y = 1|x; w)
ϕ(z) = P(y = 1|x; w) = 0.8
1 − ϕ(z) = P(y = 0|x; w) = 0.2
=
{
ŷ 
1 ϕ(z) ≧ 0.5
0 ϕ(z) < 0.5
=
{
ŷ 
1 z ≧ 0.0
0 z < 0.0
scikit-learnのソースコードscikit-learnのソースコード
  実際 見 前述 式 同様 正 負 割 当
  内積 計算
重みの学習重みの学習
前章(2章)では誤差平⽅和をコスト関数としてそれを最⼩にするパラメータを勾配
降下法・確率的勾配降下法により求めていった。ロジスティック回帰モデルの場合は
尤度関数を⽬的関数として、それの最⼤化を⾏う。
尤度とはパラメータが与えられたもとでの、データの出現しやすさを表している。
今、⾃分の⽬の前にデータがあるが、そのデータは特定の分布から発⽣して、実際に
観測されるものは発⽣しやすいものだろうとする考え⽅に従っている。(頻度主義)
考え⽅
データがある
発⽣しやすいからこそ観測されたと考える
特定の分布を仮定する
発⽣しやすさ(尤度)が最も⾼くなるよ
うパラメータを決める(尤度関数の最適
化)
尤度関数は以下のように表される。
計算のしやすさから、これの対数をとった対数尤度の最⼤化を⾏っていく。
L(w) = P(y|x; w) = P( | ; w) = (ϕ( ) (1 − ϕ( )
∏
i=1
n
y
(i)
x
(i)
∏
i=1
n
z
(i)
)
y
(i)
z
(i)
)
1−y
(i)
l(w) = log L(w) = [ log(ϕ( )) + (1 − ) log(1 − ϕ( ))]
∑
i=1
n
y
(i)
z
(i)
y
(i)
z
(i)
 
勾配降下法などで最⼩化するためのコスト関数として対数尤度を書き換える勾配降下法などで最⼩化するためのコスト関数として対数尤度を書き換える
最⼤化の関数に-1をかければ最⼩化の問題に置き換えることができる。
理解がしやすいようにインスタンスが⼀つのケースを⾒てみると
ラベルであるyが1ないし0のときは以下のように場合分けができる。
J(w) = [− log(ϕ( )) − (1 − ) log(1 − ϕ( ))]
∑
i=1
n
y
(i)
z
(i)
y
(i)
z
(i)
J(ϕ(z), y; w) = −y log(ϕ(z)) − (1 − y) log(1 − ϕ(z))
J(ϕ(z), y; w) =
{
(−1) log(ϕ(z)) y = 1
(−1) log(1 − ϕ(z)) y = 0
 
クラスに属する確率φ(z)の様々な値に応じた分類コスト関数の値域。なお、zの定義域
は[-10, 10]としている。
クラスが1のときに、クラスが1である確率が⾼ければ、分類コスト関数は⼩さくなる
ことがわかる。逆に、クラスが1のときにクラスが1である確率が低ければ、分類コス
トは⾼くなる。その場合は、分類コストを下げるためにクラスが1である確率を上げ
るためにパラメータを調整していく必要がある。
 
ADALINE実装をロジスティック回帰のアルゴリズムに変換するADALINE実装をロジスティック回帰のアルゴリズムに変換する
ロジスティック回帰を独⾃に実装する場合は2章で⾏ったADALINE実装のコスト関数J
を新しいコスト関数に置き換えるだけでよい。
2章(ADALINE(単層ニューラルネットワーク))より追加で⾏うこと
コスト関数を書き換える
線形活性化関数をシグモイド活性化関数に置き換える
しきい値関数を書き換えて-1と1の代わりにクラスラベル0と1を返
すようにする
J(w) = − [ log(ϕ( )) + (1 − ) log(1 − ϕ( ))]
∑
i
y
(i)
z
(i)
y
(i)
z
(i)
ロジスティック回帰での勾配降下法に基づく学習アルゴリズムロジスティック回帰での勾配降下法に基づく学習アルゴリズム
まずロジスティック回帰における対数尤度
を最⼩化する際に対数尤度を各パラメータで偏微分すると、
シグモイド関数φ(z)の偏導関数は以下のように書き換えることができる。
l(w) = log L(w) = [ log(ϕ( )) + (1 − ) log(1 − ϕ( ))]
∑
i=1
n
y
(i)
z
(i)
y
(i)
z
(i)
= =
(
y − (1 − y)
)
∂l(w)
∂wj
∂l(w)
∂ϕ(z)
∂ϕ(z)
∂wj
1
ϕ(z)
1
1 − ϕ(z)
∂ϕ(z)
∂wj
= = =
(
1 −
)
∂ϕ(z)
∂z
∂(1 + e
−z
)
−1
∂z
∂(1 + e
−z
)
−1
∂(1 + )e
−z
∂(1 + )e
−z
∂z
1
1 + e
−z
1
1 + e
−1
= ϕ(z)(1 − ϕ(z))
対数尤度のを最⼤化する重みの更新式は
あるいは
と表される。コスト関数を最⼩化したものと導関数が同じであるため、この重みの更
新式は以下のようにも表すことができる。
これは2章のADALINEの勾配降下法と同じ更新式となっている。
=
(
y − (1 − y)
)
∂l(w)
∂wj
1
ϕ(z)
1
1 − ϕ(z)
∂ϕ(z)
∂z
∂z
∂wj
=
(
y − (1 − y)
)
ϕ(z)(1 − ϕ(z))
1
ϕ(z)
1
1 − ϕ(z)
∂z
∂wj
= (y(1 − ϕ(z)) − (1 − y)ϕ(z)) xj
= (y − ϕ(z))xj
:= + η ( − ϕ( ))wj wj
∑
i=1
n
y
(i)
z
(i)
x
(i)
j
w := w + η∇l(w)
Δ = −η = η ( − ϕ( ))wj
∂J
∂wj
∑
i=1
n
y
(i)
z
(i)
x
(i)
j
 
 
 
 
scikit-learnでのロジスティック回帰scikit-learnでのロジスティック回帰
 
ロジスティック回帰の確率的勾配降下法の実装ロジスティック回帰の確率的勾配降下法の実装
教科書には書かれていないが、練習問題的にやってみる。やったことは先程と同様に
以下の3つを、2章で学んだ確率的勾配降下法に対して適⽤しただけ。
コスト関数を書き換える
線形活性化関数からシグモイド活性化関数に書き換える
しきい値関数を書き換えて-1と1の代わりにクラスラベル0と1を返すように
する
 
重 初期化
空箱
関
空箱
一 更新式 従 更新 際
値 返
平均 計算
平均
 
重 初期化
数 大 場合
繰 返 重 更新
個 場合 回 重 更新
並 替
重 初期化
   
活性化関数
誤差
更新式 従 重 更新
別 更新
 
 
正則化正則化
過学習
トレーニングデータセットではうまく機能するモデルが未知のデー
タではうまく汎化されないという問題のこと。
原因
パラメータの数が多すぎ、データに対してモデルが複雑で
ある(バリアンスが⾼い)
学習不⾜
学習が⾜りず、未知のデータに対する予測性能が低いという問題の
こと。
原因
トレーニングデータセットのパターンを把握できるような
モデルの複雑さがない(バイアスが⾼い)
 
バイアスとバリアンスバイアスとバリアンス
バイアス
モデルを異なるトレーニングデータセットで何度か構築した場合
に、予測が正しい値からどの程度外れているかを計測するもの。
バイアスが⾼いということは正しい値から外れまくってい
るということ。
バリアンス
モデルの予測の⼀貫性を計測するもの
バリアンスが⾼いということは所与のデータセットに対し
て当てはめすぎているということ。
モデルの汎化誤差
バイアスもバリアンスも⼩さくなるようにモデルを構築することが望ましい。
モデルの汎化誤差 = (バイアス + バリアンス + ノイズ)
2
 
正則化正則化
極端なパラメータの重みにペナルティを科すための追加情報(バイアス)を
導⼊すること。
つまり、正しい情報からある程度はずさせる⽅向への処理。
共線性(特徴間の相関の⾼さ)を処理するのに便利な⼿法
種類
L2正則化(Ridge):Ridgeは尾根と訳せるので、⼭をイメージすれば2
次関数のイメージが湧く。
L2縮⼩推定や荷重減衰とも呼ばれる。
L1正則化(LASSO):Least Absolute Shrinkage and Selection
Operatorの略。
L2の正則化項について
λは正則化パラメータ。このパラメータを使うことで重みを⼩さく保ちなが
らトレーニングデータセットをどの程度適合させるかを制御できる。λを⼤
きくすれば正則化の度合いを強めることができる。
‖w =
λ
2
‖
2
λ
2 ∑
j=1
m
w
2
j
正則化の適⽤
ロジスティック回帰のコスト関数に正則化の項を追加すれば良い。
scikit-learnのパラメータCはここでいう、
に該当する。なお、デフォルトの設定ではl2正則化となっており、Cのデフォルト値が
1となっている。つまりλが1のケースとなる。この関係を元のコスト関数に代⼊し
て、両辺にCを掛けるとコスト関数は以下のようになる。
この式から、Cの値を⼩さくすると正則化の強さを⾼めることがわかる。
J(w) = − [ log(ϕ( )) + (1 − ) log(1 − ϕ( ))] + ‖w
∑
i
y
(i)
z
(i)
y
(i)
z
(i)
λ
2
‖
2
C =
1
λ
J(w) = −C [ log(ϕ( )) + (1 − ) log(1 − ϕ( ))] + ‖w
∑
i
y
(i)
z
(i)
y
(i)
z
(i)
1
2
‖
2
  回帰 該当箇所
 
サポートベクトルマシンサポートベクトルマシン
マージンを最⼤化させることで誤分類率を最⼩化することを⽬指した⼿法。
マージンとは超平⾯(決定境界)と超平⾯に最も近いトレーニング
サンプルとの間の距離として定義される。
超平⾯に最も近いトレーニングサンプルのことをサポートベクトル
と呼ぶ。
パーセプトロンの拡張とみなすことができる。
 
最⼤マージンの直感的理解最⼤マージンの直感的理解
決定境界のマージンを⼤きくする理論的根拠
汎化誤差が⼩さくなる傾向がある。
マージンが⼩さいとモデルは過学習に陥りがち。
超平⾯は以下の⽅程式で表すことができる。(1つ⽬は正の超平⾯、2つ⽬は負の超平
⾯)
これらを引き算すると、
となる。ここで正と負の超平⾯の距離は⾼校数学で学ぶ「点と平⾯の距離」から、
この距離をサポートベクトルマシンは最⼤化する。
+ = 1w0 w
T
xpos
+ = −1w0 w
T
xneg
( − ) = 2w
T
xpos xneg
=
( − )w
T
xpos xneg
‖w‖
2
‖w‖
線形分離可能なケース線形分離可能なケース
サポートベクトルマシンは
の最⼤化を以下の制約のもとで⾏う。
これらの制約式は以下のように表すこともできる。
ただ、このような関数の最⼤化よりも逆数をとって2乗した
を最⼩化するほうが簡単であり、KKT(Karush-Kuhn-Tucker)条件を使って解くこと
ができる。このように置き換えた問題を双対問題と呼ぶ。
2
‖w‖
{
+ ≧ 1 = 1w0 w
T
x
(i)
y
(i)
+ ≤ −1 = −1w0 w
T
x
(i)
y
(i)
i = 1, … , N
( + ) ≧ 1y
(i)
w0 w
T
x
(i)
∀i
‖w
1
2
‖
2
スラック変数を使った線形分離不可能なケースへの対応スラック変数を使った線形分離不可能なケースへの対応
先程のアプローチは線形分離が可能なデータを前提としていた。(パーセプ
トロンに近いと感じられる)
スラック変数を導⼊することで適切なコストペナルティを課した上で、誤分
類が存在する状態のまま最適化問題を収束させることができる。
スラック変数を使った場合、最⼩化の⽬的関数は以下のようになる。
変数Cを使うことで誤分類のペナルティを制御することができる。Cの値が⼤きい場合
は誤分類のペナルティが⼤きく、⼩さい場合は寛⼤である。
{
+ ≧ 1 − = 1w0 w
T
x
(i)
ξ
(i)
y
(i)
+ ≤ −1 + = −1w0 w
T
x
(i)
ξ
(i)
y
(i)
i = 1, … , N
‖w + C
( )
1
2
‖
2
∑
i
ξ
(i)
 
 
ロジスティック回帰とSVMロジスティック回帰とSVM
SVMの利点
外れ値の影響を受けにくい。
SVMの⽋点
実装がしにくい。
更新を簡単にできない。ストリーミングデータなどは苦⼿。
カーネルSVMカーネルSVM
⾮線形分類の問題を解くことに適した⼿法
 
線形ロジスティック回帰や線形SVMでは線形超平⾯を描いて分類をするだけなので、
このような線形分離不可能なデータに対してはうまくいかない。
線形分離不可能 作
カーネルトリックカーネルトリック
カーネルトリックの発想
射影関数φを使って、トレーニングデータセットを⾼次元空間に変
換し、線形分離可能にすること。
⾼次元にする過程で新しいデータ(未知のデータ)が作られること
になる。
カーネルとは2つのインスタンス間の類似性を表す関数と解釈される。
ϕ( , ) = ( , , ) = ( , , + )x1 x2 z1 z2 z3 x1 x2 x
2
1
x
2
2
 
SVMをトレーニングする際に、ベクトルのドット積の計算が必要だが、この
計算のコストは⾼いとされている。
カーネル関数はこのドット積を代替するものとして導⼊される。
最も⽤いられるカーネルが動径基底関数カーネル(RBFカーネル、ガウスカーネルとも
呼ばれる。)
これは以下のように簡略化される。
ここで、
は最適化されるハイパーパラメータとして扱われる。
式から明らかなように、このカーネルは0から1の範囲に収まることがわかる。また、
ベクトルの差のノルムの2乗とすることで、ドット積の計算を回避していることがわか
る。
ϰ ( (i), ) = ϕ ϕ ( )x x
(j)
( )x
(i)
T
x
(j)
ϰ ( (i), ) = exp
(
−
)
x x
(j)
‖ −x
(i)
x
(j)
‖
2
2σ
2
ϰ ( (i), ) = exp(−γ‖ − )x x
(j)
x
(i)
x
(j)
‖
2
γ =
1
2σ
2
scikit-learnでSVM
 
 
 
決定⽊学習決定⽊学習
⼀連の質問に基づいて決断を下すという⽅法によりデータを分類するモデ
ル。
意味解釈可能性を配慮する場合に魅⼒的なモデル。
カテゴリデータでも数量データでも扱うことができる。
決定⽊の根(ルート)から始めて、情報利得が最⼤となる特徴量で
データを分割する。
 
情報利得の最⼤化情報利得の最⼤化
決定⽊学習アルゴリズムにおいて最適化を⾏う⽬的関数は以下の情報利得を定義す
る。
f:分割を⾏う特徴量
D_p:親のデータセット
D_j:j番⽬の⼦ノードのデータセット
I:不純度を数値化したもの
N_p:親ノードのサンプルの総数
N_j:j番⽬の⼦ノードのサンプルの個数
情報利得は「親ノードの不純度」と「⼦ノードの不純度の合計」との差によって測ら
れる。⼦ノードの不純度が低いほど、⽬的関数の情報利得は⼤きくなる。
IG( , f ) = I( ) − I( )Dp Dp
∑
j=1
m
Nj
Np
Dj
⼆分決定⽊:組み合わせ探索空間をへらすために全ての親ノードを考慮せ
ず、2つの親ノードだけを考慮している。
不純度の指標、分割条件
ジニ不純度
エントロピー
分類誤差
IG( , f ) = I( ) − I( ) − I( )Dp Dp
Nlef t
Np
Dlef t
Nright
Np
Dright
エントロピー:全ての空ではないクラスi(p( i | t ) ≠0 )を対象としている。
あるできごと(事象)が起きた際、それがどれほど起こりにくいか
を表す尺度とされる。
p( i | t )は特定のノードtにおいてクラスiに属するサンプルの割合を表
す。あるノードtにおいて、全てのクラスがiであったり、全てがiで
なかったりする場合はエントロピーは0になる。
p( i = 1 | t ) =1の場合
対数の箇所において0となり、エントロピーは0に
p( i = 0 | t ) =0の場合
0となる箇所があるので、エントロピーは0に
エントロピーが最⼤になるのは各クラスが⼀様に分布している場合
p( i = 1 | t ) =0.5の場合
対数の箇所において-1となり、エントロピーは1に
p( i = 0 | t ) =0.5の場合
対数の箇所において-1となり、エントロピーは1に
(t) = − p(i|t) p(i|t)IH
∑
i=1
c
log2
相互情報量とは、「⼀⽅を知った後にも残る、もう⼀⽅の不確かさの量」を表すの
で、エントロピーが⼤きくなるとき、相互情報量が⼤きくなることがわかる。つま
り、p( i = 1 | t ) =1の場合、それを知った時点でもう⼀⽅の不確かさは全くなくなるこ
とがわかる。
ジニ不純度
誤分類の確率を最⼩化する条件。
エントロピーと同様にジニ不純度が最⼤になるのは、クラ
スが完全に混合されている場合。
⼆値分類の際にクラスが完全に混合されているケース
(t) = − p(i|t)(1 − p(i|t)) = 1 − p(i|tIG
∑
i=1
c
∑
i=1
c
)
2
(t) = 1 − = 0.5IG
∑
i=1
c
0.5
2
分類誤差
ノードのクラス確率の変化にあまり敏感ではないため、決定⽊を成
⻑させるのに適していない。
(t) = 1 − max{p(i|t)}IE
ここでは例として以下の2つの分割について考える。
A
(40, 40)
(30, 10)
(10, 30)
B
(40, 40)
(20, 40)
(20, 0)
 
 
 
以上より、分類誤差を⽤いた場合と、ジニ不純度やエントロピーを⽤いた場合とで枝
の分割の優先度が異なることがわかる。
 
決定⽊の構築決定⽊の構築
決定⽊学習
特徴空間を矩形に分割することで複雑な決定境界を構築できる。
決定⽊が深くなると決定境界は複雑になり、過学習に陥りやすくな
る。
特徴量のスケーリングは決定⽊において必須ではない。
scikit-learnでの決定⽊学習
 
決定⽊の図の表⽰
 
 
図の⾒⽅図の⾒⽅
根の105個のインスタンスからスタートし
花びらの幅が閾値0.75cm以下であるとして、35個と70個のインスタ
ンスを持つ2つの⼦ノードに分割し
左の⼦ノードはジニ不純度が0となる
右の⼦ノードをさらに花びらの⻑さが閾値4.75cm以下であ
るとして、30個と40個のインスタンスを持つ2つの⼦ノー
ドに分割し
左の⼦ノードはジニ不純度が0となる
右の⼦ノードをさらに花びらの幅が閾値1.75cm以
下であるとして、8個と32個のインスタンスを持
つ2つの⼦ノードに分割し
というふうに⽊を深めながら分割をして
いく。
ランダムフォレストランダムフォレスト
「使いやすい」、「分類性能が⾼い」、「スケーラビリティに優れている」
と三拍⼦そろったアルゴリズム。
⾼バリアンスの決定⽊を平均化することで、より汎化性能が⾼く頑健なモデ
ルを構築するというもの。
ランダムフォレストのアルゴリズム
1. サイズnのランダムなブートストラップ標本を復元抽出(サンプ
ルサイズn:ハイパーパラメータ)
2. ブートストラップ標本から決定⽊を成⻑させる。各ノードで以
下の処理を⾏う。
2.1. d個の特徴量をランダムに⾮復元抽出する。(特徴量
の数d:ハイパーパラメータ)
2.2. ⽬的関数に従って、最適な分割となるよう特徴量を使
ってノードを分割する。
3. ⼿順1~2をk回繰り返す。(決定⽊の数k:ハイパーパラメータ)
4. 決定⽊ごとの予測をまとめて、「多数決」に基づいてクラスラ
ベルを割り当てる。
ハイパーパラメータ
決定⽊の数k
多いほど性能が良くなるが、計算コストが増える。
サンプルサイズn
⼩さくすると決定⽊の間の相違性が⾼くなりランダムフォ
レストのランダム性が増す。(過学習抑制効果があるとさ
れる。ただしバイアスが⼤きくなる。)
トレーニングサンプルがブートストラップ標本に含まれて
いる確率が低くなるため。
特徴量の数d
トレーニングデータセットの特徴量の合計数よりも⼩さい
値を選択する必要がある。
scikit-learnのデフォルト値では
であり、mはトレーニングデータセットの特徴量
の数となる。
d = m‾‾√
scikit-learnでランダムフォレスト
 
k近傍法:怠惰学習アルゴリズムk近傍法:怠惰学習アルゴリズム
トレーニングデータから判別関数を学習することなく、トレーニングデータ
セットを暗記するアルゴリズム。怠惰と呼ばれる所以は学習せず暗記するだ
けだから。
ノンパラメトリックモデルに属する。
k近傍法の⼿順
1. kの値と距離指標を選択する
特徴量に関して、データの標準化をしておくことも重要。
2. 分類したいインスタンスからk個の最近傍のデータ点を⾒つけ出
す
3. 多数決によりクラスラベルを割り当てる
scikit-learnでは多数決が同数の場合、インスタンスまでの
距離がより近いものが優先される。
利点
新しいトレーニングデータを集めるとすぐに分類器が適応する。
⽋点
⼤きなデータセットを扱う場合に⼯夫しないと計算量が⼤きくな
る。
 
scikit-learnでk近傍法
 
今回扱った、ミンコフスキー距離での距離指標
先程のコードのp=2の場合、ユークリッド距離と同じになる。他⽅、p=1の場合はマン
ハッタン距離となる。他にも様々な距離指標が提供されている。
 
d ( , ) =x
(i)
x
(j)
| −
∑
k
x
(i)
k
x
(j)
k
|
p‾ ‾‾‾‾‾‾‾‾‾‾‾‾‾
√
p
 
1 of 89

More Related Content

Similar to [DSO] Machine Learning Seminar Vol.2 Chapter 3(20)

More from Teruyuki Sakaue(14)

[DSO] Machine Learning Seminar Vol.2 Chapter 3