【ラビットチャレンジ】機械学習:その6 サポートベクターマシーン

ラビットチャレンジ 機械学習:その6

サポートベクターマシン

概要

  • 2クラス分類のための機械学習手法
  • 線形モデルの正負で2値分類

※ 決定境界はいくつも考えられる

SVMの求め方

  • 線形判別関数ともっとも近いデータ点との距離をマージンという
  • マージンが最大となる線形判別関数を求める

  • 主問題の目的関数と制約条件 → 最適化問題ラグランジュ未定乗数法で解くことを考える

サポートベクター

  • 分離超平面を構成する学習データの、サポートベクターだけで残りのデータは不要

ソフトマージンSVM

  • サンプルを線形分離できないとき
  • 誤差を許容し、誤差に対してペナルティを与える
  • マージン内に入るデータや誤分類され たデータに対して誤差を表す変数を導入する

非線形分離

カーネルトリック

  • カーネル関数
  • 高次元ベクトル􏰀内積スカラー関数で表現
  • 特徴空間が高次元でも計算コストを抑えられる

非線形カーネルを用いた分離

【ラビットチャレンジ】機械学習:その5 アルゴリズム

ラビットチャレンジ 機械学習:その5

k近傍法

  • 分類のための機械学習
  • ある点から近いk個から自身の分類を決定する手法
  • k個のクラスラベルの中で最も多いラベルを割り当てる

特徴

  • kの個数を変化させると結果も変わる
  • kを大きくすると決定境界􏰁滑らかになる

k平均法(k-means)

※何個に分ければ良いかをどうやって決めるのか? → ビジネスの専門家が決めるなど… DeepLearningでもビジネスを理解している人といっしょにシステム構築、評価を実施するなどがプラクティスにはなってきている

k平均法(k-means)のアルゴリズム

  • 1) 各クラスタ中心􏰀初期値を設定する
  • 2) 各データ点に対して、各クラスタ中心と􏰀距離を計算し、 最も距離が近いクラスタを割り当てる
  • 3) 各クラスタ􏰀平均ベクトル(中心)を計算する
  • 4) 収束するまで2, 3􏰀処理を繰り返す

【ラビットチャレンジ】機械学習:その4 主成分分析

ラビットチャレンジ 機械学習:その4

主成分分析

概要

  • 多変量データの変数の個数を減らす
    • 情報の損失はなるべく小さくする必要がある
  • 具体的には?
    • 学習データの分散が最大になるものを探す

係数ベクトル

  • 線形変換後の値が変わる
    • どう求めるのが良い?
      • 変換後のぶんさんが最大となる射影軸を探索
      • ノルム制約を入れて解く
    • ラグランジュ関数を最大にする係数を求めることになる
  • ラグランジュ関数を最大化する係数を求める

主成分

  • 最大固有値に対応する固有ベクトルで線形変換された特徴量を第一主成分と呼ぶ
  • k番目の固有値に対応する固有ベクトルで変換された特徴量を第k主成分と呼ぶ
  • 寄与率
    • 変換された特徴量のぶんさんは元データの持つ全分散量とも一致
    • 第k主成分の分散の全分散に対する割合を寄与率という

    ※ 例えば100万データを3次元まで主成分に落とした場合、累積寄与率が70%だとすると、3次元圧縮で70%分のデータを保持しているということになる

【ラビットチャレンジ】機械学習:その3 ロジスティック回帰モデル

ラビットチャレンジ 機械学習:その3

ロジスティック回帰

分類問題(ウラス分類)

  • 入力
    • m次元のベクトル
  • 出力
    • 0 or 1

シグモイド関数

ロジスティック回帰モデル

  • 分類問題を解くため􏱘教師あり機械学習モデル (教師データから学習 )
    • 入力とm次元パラメータ􏱘線形結合をシグモイド関数に入力
    • 出力􏱙y=1になる確率􏱘値になる
  • データYは確率が0.5以上なら􏱚1・未満なら0と予測

尤度関数

  • 尤度とは、あるデータを得たときに分布のパラメータが特定の値であることがどれほどありえそうかを表現したもの
    • 確率はパラメータを固定してデータが変化
    • 尤度はデータを固定してパラメータが変化
  • ベルヌーイ分布に従う
  • モデルの出力Yが1となる確率とYが0になる確率を以下で表記
    • P(Y = 1 | x) = p
    • P(Y = 0 | x) = 1 - P(Y = 1 | x) = 1 - p
  • 確率変数Yはベルヌーイ施行に従う

同時確率

  • 学習データ・セットが同時に得られる確率を計算
  • 観測されたデータ(学習データ)を発生させる尤もらしい確率分布を求める
  • 尤度関数を最大にするパラメータを推定パラメータとする

対数尤度関数の最大化

  • 尤度関数を最大化するよりも、対数尤度関数を最大化する方が楽
    • 咳が和、指数が積の演算に変換出来る
    • 対数尤度関数が最大になる点と尤度関数が最大になる点は同じ
    • 平均二乗誤差は最小化、尤度関数は最大化はややこしいので、対数尤度関数にマイナスを掛けて「最小化」で統一

勾配降下法

  • Gradient descent
  • 反復学習によりパラメータを逐次的に更新するアプローチの一つ
  • ηは学習率と呼ばれるハイパーパラメータでモデルの収束しやすさを調整

  • パラメータが更新されなくなった場合、それ􏱙勾配が0になったということ。少なくと も反復学習で探索した範囲では最適な解がもとめられたことになる

  • 勾配降下法では、パラメータを更新する􏱘にN個全て􏱘データに対する和を求める 必要がある。

確率的勾配降下法(SDG)はDeep Learningで利用することが多いので、そちらでも学習してみてね

動画による説明(SDG)

  • Deep Learningでのサンプルを想定
  • 尤度が高いところへ収束していっている
    • サンプルでは山が2つ
  • 学習率が大きくなると、動画での尤度探索の移動量が増えるイメージ
    • 最初は大きくても良いが、最尤近くになったら小さくしたい

ガウス型基底の話は試験に出てくる? → 優先度は高くないが、現場では一般的に出てくる  ただし、理解するにはかなり複雜そう

モデルの評価

混同行列

  • True Positive
  • False Positive
  • False Negative
  • True Negative
  • True/False 予測の成否
  • Positive/Negative 予測の結果

正解率

  • (TP + TN) / (TP + FN + FP + TN)
  • 正解した数と予測した全データ数の割合
  • データに偏りがあった場合に問題になることがある
    • 単純な正解率はあまり意味をなさない

適合率

  • TP / (TP + FP)
  • 誤りが覆うてもヌケモレを少なくしたい
    • メールのスパム判定の例としては、スパムがすり抜けて届く方がベター

再現率

  • TP / (TP + FN)
  • 見逃しが多くても、正確な予想をしたい
  • 病気の陽性判定の例、再度検査をすればよいため

F値

  • 適合率と再現率はトレードオフの関係にあるため、2つの調和平均を取る
  • バランスを取りたい場合に利用

ハンズオン(タイタニック号データ)

欠損値があるデータ

  • 無視する
  • 欠損値が無い情報で補完する
  • 回帰を使って補完する

処理の進め方

  • 2変量に絞る
  • Ageが欠損しているので、AgeFillカラムを追加 
    • Ageカラムのnullを中央値で補完
    • 元のAgeカラムは残しておく

Pythonの実行でエラーが出ても結果は出ているみたい(LogisticRegression().fit)

DataConversionWarning: A column-vector y was passed when a 1d array was expected. Please change the shape of y to (n_samples, ), for example using ravel().

ハンズオン2 (2変数から生死を判別)

pythonオープンソースを使うとかなり簡単に実現出来る。難しい微分とかは出てこない  バックエンドはパッと書いてしまって、フロントにこだわるのもあり。REST APIとか

※ 図示化して表示してあげると色々な人を説得しやすい

ハンズオン3(混同行列とクロスバリデーション)

※ ヒートマップも上司に喜ばれるかも

※ きれいな図を書くなら、Seabornがおすすめ  matplotlibのラッパー。もう少しきれいに書ける

スクリーンショット

f:id:n_morioka:20190527004845p:plain

【ラビットチャレンジ】機械学習:その2 非線形回帰モデル

ラビットチャレンジ 機械学習:その2

非線形回帰モデル

  • 複雜な非線形構造を内包する事象にフィットさせるために
  • 規定展開法

正則化

過学習と未学習 学習データに対して、十分小さな誤差が得られない:未学習 小さな誤差は得られたけど、テスト集合誤差との差が大きい場合:過学習

過学習正則化法で回避

汎化性能(Generalization)

  • 学習に使用した入力だけでなく、これまで見たことのない新たな入力に対する予測性能

正則化

  • モデルの複雑さに伴っtえペナルティ項を課す
  • ペナルティ項無し:最小2乗推定量
  • L2ノルムを利用したペナルティ項:Ridge推定量
  • L1ノルムを利用したペナルティ項:Lasso推定量

Ridgeはなるべく原点に近づけるように推定しようとする → 縮小推定 Lassoはパラメータが0になりやすい、予測に関係しないパラメータを無視できる → スパース推定

※ 成約の幾何学図が何を意味しているのか? → 複雜なモデルでは、バリアンスが高い状態になってしまう → 縮小推定をするとバリアンスを下げる

※ 線形回帰についても過学習が発生する可能性はある → パラメータが複数ある場合にモデル選択に失敗する可能性がある

モデル選択

ホールドアウト法

  • 手元のデータを2つに分割して学習用とテスト用に使い予測精度や誤り率を推定するために使用する方法
    • 有限のデータだと分割データ数が足りない
    • データが大量にないと厳しい

クロスバリデーション(交差検証)

  • データを学習用とテスト用に分割するセットを複数回繰り返す
  • 少ないデータでも精度を上げることが可能

※ ML08での正則化の質問は何回か見て理解したいかもしれない

【ラビットチャレンジ】機械学習:その1 線形回帰モデル

ラビットチャレンジ 機械学習:その1

機械学習モデリングプロセス

  1. 問題設定
    • 機械学習が必要なければ使う必要もない
    • 「仕事ではじめる機械学習」の著者も言っている
    • 機械学習のデメリット
      • 技術的ハードルが高い
        • 運用者のことまで考えられるか?
      • テストも難しい
  2. データ選定
  3. データの前処理
  4. 機械学習モデルの選定
    • 線形回帰
    • ロジスティック回帰
    • SVM
    • 主成分分析(PCA)
  5. モデルの学習
  6. モデルの評価

線形回帰とロジスティック回帰でモデリングプロセスを体験

※感想 機械学習をあえて使う必要が無いというのは大事 運用者への配慮はコモディティ化が進むとあるような、もっとハードルが下がるような… どっちだろう

SVMについて 資料にはあるので、そちらで学習ヨロ

環境について

  • Anacondaがあれば大丈夫

ルールベースモデルと機械学習モデル

  • シラバス
    • 人工知能学会の推薦
    • グッドフェローの深層学習
  • 機械学習とは?
    • タスクT:アプリケーションにさせたいこと
    • 性能指標P
    • 経験E:データ

回帰問題

  • ある入力(数値)から出力(連続値)を予想する問題
  • 回帰で扱うデータ
    • 入力はm次元のベクトル(m=1の場合はスカラ)

線形回帰モデル

  • 教師あり学習(正解付きデータから学習)
  • ある条件から、物件の価格を出すなどに使える
    • 部屋数、築年数、駅からの距離など

線形結合

  • 入力ベクトルと道野パラメータの各要素を掛け算し足し合わせたもの
  • 入力ベクトルとの線形結合に加え、切片も足し合わせる
  • 出力は1次元
  • パラメータ
    • 特徴量が予測値に対してどのように影響を与えるかを選定する重みの就業
    • 未知パラメータは最小二乗法により推定

※ハットについて(データYの上についていたもの)。予測値を表す場合には統計のせかいなどで「ハット」を使う

線形単(m=1)回帰モデル

データは回帰直線に誤差が加わり観測されていると過程

※εは正規分布と考えてよいか? → 最小二乗法の場合は考えなくて良い 最尤法の場合は正規分布で考えた方が詳細な分析が出来る。後で最尤法は出てくる

データ分割

  • データがn個ある場合に、全部を学習に使うことはしない
    • 学習用と評価用に分ける(80%が学習、20%を評価みたいなイメージ)
    • 学習 = train, 評価 = test

パラメータの推定

  • 平均二乗誤差
    • MSE
  • 最小二乗法
    • 行列に対して微分の操作をすれば推定量を得られる

※線形回帰はデータからパラメータを数学で推定出来るのが良いところ

ハンズオン(線形回帰モデル)

ボストンの住宅価格の予測

  • Scikit-learnを利用
  • Pandas
  • Numpy

jupiter notebookを使ってやる 1変量の単回帰から 2変量の重回帰もやる

model.coef : 回帰係数 model.intercept:切片

※ 犯罪率が上がると家賃が下がりがちなので… みたいな説明を数学的に出来る

スクリーンショット

f:id:n_morioka:20190527003840p:plain

【ラビットチャレンジ】応用数学:第3章 情報理論

ラビットチャレンジ 応用数学第3章のまとめ

情報量

増加の比率が直感的に重要に思える → エントロピー

自己情報量

f:id:n_morioka:20190425005644p:plain

確率を対数で取る

シャノンエントロピー

自己情報量の期待値

f:id:n_morioka:20190425005808p:plain

カルバック・ライブラー ダイバージェンス

同じ事象・確率変数における異なる確率分布 P,Q の違いを表す

f:id:n_morioka:20190425005957p:plain

交差エントロピー

  • KLダイバージェンスの一部を取り出したもの

  • Qについての自己情報量をPの分布で平均している

f:id:n_morioka:20190425010327p:plain