Pythonではじめる機械学習 3回目

Contents
  1. 3章 教師なし学習と前処理
  2. 3.1 教師なし学習の種類
  3. 3.2 教師なし学習の難しさ
  4. 3.3 前処理とスケール変換
  5. 3.4 次元削減、特徴量抽出、多様体学習
  6. 3.5 クラスタリング
  7. 所感

nownab.log | Pythonではじめる機械学習 2回目

Pythonではじめる機械学習 ―scikit-learnで学ぶ特徴量エンジニアリングと機械学習の基礎

週一でやっていて、毎週読む範囲を決めて資料にまとめて発表するという感じでやっている。

また、勉強会で書いたコードや疑問点などをまとめるために GitHub のレポジトリを活用している。 Wondershake/machine-learning-study: 機械学習勉強会

この記事は資料作りの下書き的扱い。

3章 教師なし学習と前処理

3.1 教師なし学習の種類

  • 教師なし変換 (Unsupervised transformations)
    • もとのデータを変換して、人間やアルゴリズムにわかりやすいデータを作る
    • 次元削減、トピック抽出
  • クラスタリングアルゴリズム (Clustering algorithms)
    • データをグループに分ける

3.2 教師なし学習の難しさ

  • アルゴリズムの評価が難しい
    • 出力がどうあるべきかわからない
  • データを理解するために用いられることが多い
  • 教師あり学習の前処理としても使われる

3.3 前処理とスケール変換

3.3.1 さまざまな前処理

  • StandardScaler
    • それぞれの特徴量が平均 0、分散 1 となるように変換する
  • RobustScaler
    • 平均値と分散のかわりに中央地と四分位数を用いる
    • 外れ値を無視する
  • MinMaxScaler
    • データが 0 から 1 の間になるように変換する
  • Normalizer
    • 特徴量ベクトルのユークリッド長が 1 になるように変換する
    • データポイントを超球面に投射する

3.3.2 データ変換の適用

3.3.3 訓練データとテストデータを同じように変換する

  • 訓練データに fit したものを使ってテストデータを変換する
  • テストデータで fit してはダメ

3.3.4 教師あり学習における前処理の効果

3.4 次元削減、特徴量抽出、多様体学習

3.4.1 主成分分析 (PCA)

  • データセットの特徴量を回転する
    • まず最も分散が大きい方向をみつけ、その方向の軸を第 1 成分とする
    • 第 1 成分と直行する軸のうち最も情報を持つ軸を探し第 2 成分とする
    • これを繰り返す
  • それぞれの軸を主成分という
  • もとの特徴量と同じだけ主成分が存在する

3.4.1.1 cancerデータセットのPCAによる可視化

  • PCA は高次元データセットの可視化で用いられることがある
  • 主成分の解釈が簡単ではないことが多い

3.4.1.2 固有顔による特徴量抽出

  • PCA を特徴量抽出に使う
    • より機械学習アルゴリズムに適したデータに変換する
  • Labeled Faces in the Wild
  • 主成分の一部で元のデータをある程度再現できる
    • すべての主成分を使えば完全に再現できる

3.4.2 非負値行列因子分解 (NMF)

  • 特徴量を抽出することを目的とする教師なし学習手法
  • 係数と成分が非負
    • 特徴量が非負のデータにしか使えない
  • 複数の独立した発生源からのデータを重ね合わせたデータに有効
  • NMF は PCA よりも理解しやすい成分に分解する
3.4.2.1 NMFの合成データへの適用
  • NMF の成分に順番はない
  • 乱数で初期化するので毎回結果が変わる
3.4.2.2 NMFの顔画像への適用
  • 再構成やエンコードは苦手
  • データ中から興味深いパターンを見つけるのに用いられる
  • 音声データ、遺伝子発見、テキストデータにうまく機能する
  • 合成データをうまく分離できる

3.4.3 t-SNEを用いた多様体学習

  • 多様体学習アルゴリズムは可視化によく用いられる
    • 特に有用なのが t-SNE
  • 訓練データにしか使えない
    • 探索的なデータ解析に有用
    • 教師あり学習の前処理には用いない
  • デフォルトのパラメータで大抵うまくいく

3.5 クラスタリング

  • クラスタリングはデータセットをクラスタと呼ばれるグループに分割するタスク

3.5.1 k-meansクラスタリング

  • k-means は最も単純で最も広く用いられているクラスタリングアルゴリズム
  • クラスタ重心を見つけていく
    • ランダムでクラスタセンタを選択
    • 個々のデータポインタを最も近いクラスタセンタのクラスタに割り当てる
    • それぞれのクラスタの重心をクラスタセンタに設定し直す
    • 繰り返し、収束したら終了
3.5.1.1 k-meansがうまくいかない場合
  • k-mean のクラスタは凸形状であるという強い仮定がある
    • 複雑な形のクラスタにはうまく対応できない
3.4.1.2 ベクトル量子化、もしくは成分分解としてのk-means
  • PCA や NMF などの成分分解手法との類似性がある
    • 個々のデータポイントをクラスタセンタという単一の成分で表現していると考えることができる
  • ベクトル量子化 (vector quantization)
    • k-means を単一成分で個々のデータポイントを表現する成分分解手法としてみる考え方
  • k-means によるベクトル量子化では入力次元よりはるかに多くのクラスタを使うことができるのが特徴
  • k-means の欠点の 1 つは乱数で初期化されること

所感

  • k-means のベクトル量子化の項はそういう使い方もあるのか!という感じだった