machine learning, week 8

教師なし学習について学ぶ.

教師なし学習ではラベルづけされていないデータから構造を見つけ出す.代表例がクラスタリングで,データからパターンを抽出し,複数の似た者同士をグループにまとめる.

K-Means

最も単純なクラスタリングアルゴリズムであるK-meansを学ぶ

Screen Shot 2017-04-09 at 16.22.49.png

  1. クラスター中心の候補\mu_1, \cdots, \mu_K を決める
  2. データサンプルx^{(i)}のラベルc^{(i)}を,中心点\mu_1, \cdots, \mu_Kのうち最も距離が近いもののインデックスに定める.
  3. 新しい中心点\mu_kの座標は,クラスター$\latex k&bg=2D3238&fg=ffffff$と分類されたデータの平均とする.

K-meansアルゴリズムは初期値に対して局所最小解に至る可能性があるので,中心点の初期化に対してはランダマイズを行う必要がある.

なので100回程度走らせて,その中で最小となったコスト関数を選ぶことが推奨されている.

また,クラスターの個数もはじめに与える必要があるが,これはクラスター数を1−8程度まで舐めていって,腕の肘のように急激に下がった時の「肘」に当たるクラスター数を選択すれば良い.この方法は万能ではないが,試す価値はある.

PCA

PCAは主成分分析とも呼ばれ,これにより次元の圧縮が可能になる.k次元に圧縮することを考える.

  1. 説明変数間のスケーリングを行う
    x= \dfrac{x-mean(x)}{std(x)}
  2. 説明変数の共分散行列を計算する
    $latex \Sigma = \dfrac{1}{m}\sum_{i=1}^{n}(x^{(i)})(x^{(i)})^T
  3. 共分散行列の固有ベクトルを大きい方からk個取ってくる

無論,圧縮の際に情報の欠損が起こるので,これを定量する時には一度元のデータと同じ次元までデータを戻して,それと元のデータの二乗差の和を取って見れば良い.

variance explained = 1- \dfrac{\sum{i=1}^{m}||x^{(i)}-x^{(i)}_{approx}||^2}{\sum_{i=1}^{m}||x^{(i)}||^2} 

このvariance explained が99%を下回らないようにkを選ぶのが良いとされている.(99%の情報が保たれている)

 

広告

machine learning, week 7

サポートベクターマシン(SVM)について学ぶ

SVMのコスト関数は

 \displaystyle J(\theta)=C \sum_{i=1}^{m} y^{(i)} cost_1(\theta ^T x^{(i)})+(1-y^{(i)})cost_0(\theta ^T x^{(i)}) +\dfrac{1}{2}\sum_{j=1}^{m}\Theta_j^2

と定義されるが,このcost関数は

-\log{\dfrac{1}{1+e^{-z}}} によく似た,漸近直線を組み合わせたような形状をしている.Screen Shot 2017-04-02 at 8.12.44

…本当か!?

ng先生が言うんだからそうなんだろう.SVMで株価予測するかー

さて,話を戻すと

Cは\frac{1}{\lambda}のようなもので,Cを大きくするとオーバーフィッティングする.すなわち,Cの値が大きいほど外れ値の影響を強く受ける.

SVMはいわばラージマージン分類器である.データと決定境界の間のマージンを大きくとるような境界を出力する.

線形分類できない問題に対しては,カーネルを用いる.カーネルは入力値を利用して新たな特徴fを定義し,それを用いて仮説を構築する.

具体的にはランドマークと呼ばれる,入力値に近似を行うポイントを用意し,このランドマークからの近似値をfと定義する.この近似値を求める関数を数学的にはカーネルという.

  • 線形カーネル
    特徴量が多くてトレーニングデータが少ない時,十分なデータがないとオーバーフィッティングしやすいので,線形カーネルを使用する(カーネルを使用しない)
  • ガウシアンカーネル
    特徴量が少なくトレーニングデータが多い時にはガウシアンカーネルを使用する.
    この場合はパラメータ\sigmaを決定する必要があり,この値はバイアスとバリアンスのトレードオフになる.

Screen Shot 2017-04-06 at 5.09.33

SVMを使うのはどう言う時か

特徴量の数とサンプル数に従って,選択する手法は次のようになる.

Screen Shot 2017-04-06 at 23.16.03

ロジスティック回帰と線形SVMは似たような挙動をする(コスト関数が似ているから!)

SVMの真価は非線形境界を決定するガウシアンカーネルであり,これが使える条件が整っていることを使用前に確認しておく.

ちなみに,この全ての場合でニューラルネットワークは使えるが,場合によっては遅いので,そう言う時にはSVMに頼る.

machine learning, week 6

機械学習モデルの検証の話.モデルの評価方法とその改善方法について.

Cross Validation(交差検定)は,集めてきたデータの一部をテスト用に取っておくやり方で,これにより新しくテストセットを取る必要がなくなる.

しかし,このテストセットを使ってパラメータチューニングを行うと,当然そのテストデータにOverfitting(High Variance)してしまう.すなわち,モデルをテストセットに合わせて変えてしまったので、そのモデルがテストセットで良い精度を示すのは当然.こうすると一般化エラー(Generalization error)を甘く見積もってしまう.

そこで,データを三分割する.

  • Training set: 60%
  • Cross validation set: 20%
  • Test set: 20%

こうすると,

  1. Training setだけを使ってモデルパラメーターを探し、モデルを作る
  2. そのモデルの精度を、Cross Validation setを使って確かめる
  3. モデル精度が悪ければ、Cross Validation setでの精度が上がるようモデルを作り直す
  4. 最終的にできたモデルをTest setに適用し、一般化エラー (Generalization Error) を推定する

この時,モデルパラメーターを推定するのにCross Validation set 及び Test set を使ってはいけない.また,Cross Validation setとTest setの違いはCross Validation setではモデルに戻ってモデルパラメーターを変えて精度を上げることが許されているが,Test setは最終的にできたモデルの精度を確認するだけで,その精度を上げるようにモデルを作り変えることはしてはならない.

そして,良いモデルとはTraining setでもCross Validation setでもTest setのいずれでも小さいエラーを示す.

また,Training setでもCross Validation setでもTest setのいずれでも高いエラーを示す場合,そのモデルはUnderfit(High Bias)しているという.

Training setでは小さいエラーであるがCross Validation setやTest setで高いエラーを示す場合,そのモデルはOverfit(High Varianve)しているという.

学習したモデルのエラーは次式で書ける.

 \displaystyle J(\theta)=\dfrac{1}{2m}\sum_{i=1}^{m}(h_{\theta}(x^{(i)})-y^{(i)})^2+\dfrac{\lambda}{2m}\sum_{j=1}^{m}\theta_j^2

第一項はモデルの予測値h_{\theta}(x) と実際の値yの差の二乗したものの各データでの和

第二項は正規化項で,overfitに対処するために正規化パラメータ\lambda を導入した.

この\lambda は下図のCross validation errorが最小となる点を選ぶ.なぜなら,左の方に行けばTrain error, Cross Validation error共に高くHigh Bias.右の方に行けばTrain errorは低いが Cross Validation errorが高くHigh Varianceを示すから.

Screen Shot 2017-04-02 at 7.02.36.png

対処法のまとめは次の通り

Underfit(High Bias)ならば…

  • 別の説明変数 (feature)を探す
  • 多項変数 (x_1^2, x_1x_2など)を追加する
  • 正規化パラメーター\lambdaを小さくする

Overfit(High Variance)ならば…

  • トレーニングデータ数を増やす
  • 説明変数 (feature)を減らす
  • 正規化パラメーター\lambdaを大きくする

講義中,何度も出てくる表現に「トレーニングデータを増やすのはモデルがOverfitしている時だけだ」というものがある.一般的にトレーニングデータの収集には時間がかかるので,Ng先生のこの忠告はよく覚えておこう.

話は少し変わり,集めてきたデータが偏っているという場合がある.

例えば,二値分類で1が99%,0が1%のTraining setであった時,いつも1を返すモデルは99%の精度を示すが,そのモデルは一般化エラーが低いと言えるだろうか.

このように偏りのあるデータ (skewed data)を扱う場合,分類精度 (Classification Accuracy)は信用できないので,代わりにF値(F score)を使う.

Predicted \ Actual Actual 1 Actual 0
Predicted 1 True Positive(真陽性) False Positive(偽陽性)
Predicted 0 False Negative(偽陰性) True Negative(真陰性)

これが仮にガン検査の結果だとすると,

真陽性:あなたは本当にガンです.

偽陽性:ガンではないがガンだと診断されてしまいました(精密検査でガンじゃないと分かってラッキー)

偽陰性:本当はガンなのにガンではないと診断されてしまった!ぬかよろこび!大変!

真陰性:あなたは本当にガンではないです.良かったですね.

そして,これらに次のPrecision(適合率), Recall(再現率)という指標を入れる.

Precision=\dfrac{\#(TruePositive)}{\#(TruePositive)+\#(FalsePositive)}

Recall=\dfrac{\#(TruePositive)}{\#(TruePositive)+\#(FalseNegative)}

適合率はy=1と予測したうち,実際にy=1な割合.この例だと,ガンと一次診断した人の中の一体何人が精密検査でガンであったかの割合.

再現率は実際にy=1であるうち,正しくy=1であると予測できた割合.今の例だと,ガンである人の中でガンであると正しく診断できた人の割合.

適合率と再現率は一般的にはトレードオフな関係になっており,モデルの予測値h_{\theta}(x) がある閾値が大きいときy=1と予測したとすると,閾値が小さければ(=疑わしい人は皆ガンと診断すると)再現率は上がり適合率は下がる.逆に大きければ(=確実にガンと思われる人だけをガンと診断すると)適合率が上がり再現率が下がる.

この適合率Pと再現率Rのバランスを定量化したものがF値で,

F=2\dfrac{PR}{P+R}

と表せる.複数のモデルがある場合F値が大きいものを選べば,偏りのあるデータにも対応できる.