Pythonではじめる教師なし学習 ――機械学習の可能性を広げるラベルなしデータの利用

参加者

  1. 小林 和央
  2. 奈須 日向太
  3. 藤兼 由生
  4. 嶋田 恭助
  5. 赤尾 貴仁
  6. 葛西 日向
  7. 清水 一生
  8. 鈴木 葵登

目次

目次
まえがき [教員]

Ⅰ部 教師なし学習の基礎

1章 機械学習エコシステムにおける教師なし学習の立ち位置…3 [鈴木] 24ページ
1.1 基本的な機械学習用語…3
1.2 ルールベース vs. 機械学習…4
1.3 教師あり学習 vs. 教師なし学習…5
1.3.1 教師あり学習の利点と欠点
1.3.2 教師なし学習の利点と欠点
1.4 教師なし学習を用いて機械学習システムを改良する…7
1.4.1 ラベル付きデータが十分にない
1.4.2 過剰適合
1.4.3 次元の呪い
1.4.4 特徴量エンジニアリング
1.4.5 外れ値
1.4.6 データドリフト
1.5 教師あり学習アルゴリズムの紹介…9
1.5.1 線形手法
1.5.2 近傍ベース法
1.5.3 決定木ベースの手法
1.5.4 サポートベクタマシン
1.5.5 ニューラルネットワーク
1.6 教師なし学習アルゴリズムの詳細…15
1.6.1  次元削減
1.6.2 クラスタリング
1.6.3 特徴量抽出
1.6.4 教師なし深層学習
1.6.5 教師なし学習を用いた逐次データ分析
1.7 教師なし学習を用いた強化学習…22
1.8 半教師あり学習…23
1.9 教師なし学習の応用例…24
1.9.1  異常検出
1.10 結論…25

2章 機械学習プロジェクトのはじめから終わりまで…27 [嶋田] 40ページ
2.1 環境の準備…27
2.1.1 バージョン管理:Git
2.1.2 本書のGitレポジトリのクローン
2.1.3 科学技術計算ライブラリ:Anacondaディストリビューション
2.1.4 ニューラルネットワーク:TensorFlowとKeras
2.1.5 勾配ブースティングその1:XGBoost
2.1.6 勾配ブースティングその2:LightGBM
2.1.7 クラスタリングアルゴリズム
2.1.8 対話的環境:Jupyter Notebook
2.2 データの概要…30
2.3 データの準備…31
2.3.1 データの取得
2.3.2 データの調査
2.3.3 特徴量行列とラベル配列の作成
2.3.4 特徴量エンジニアリングと特徴量選択
2.3.5 データの可視化
2.4 モデルの準備…38
2.4.1 訓練セットとテストセットへの分割
2.4.2 コスト関数の選択
2.4.3  k分割交差検証セットの作成
2.5 機械学習モデル(PartⅠ)…40
2.5.1 モデル#1:ロジスティック回帰
2.6 評価尺度
2.6.1  混同行列
2.6.2 適合率-再現率曲線
2.6.3  ROC:受信者動作特性
2.7 機械学習モデル(PartⅡ)…48
2.7.1 モデル#2:ランダムフォレスト
2.7.2 モデル#3:勾配ブースティング器(XGBoost)
2.7.3 モデル#4:勾配ブースティング器(LightGBM)
2.8 テストセットを用いた4つのモデルの検証…56
2.9 アンサンブル…59
2.9.1 スタッキング
2.10 最後のモデル選択…62
2.11 実運用システムパイプライン…63
2.12 まとめ…64

Ⅱ部 scikit-learnを用いた教師なし学習

3章 次元削減…67 [葛西] 26ページ
3.1 次元削減を行う動機…67
3.1.1  MNIST数字データセット
3.2 次元削減アルゴリズム…68
3.2.1 線形射影 vs. 多様体学習
3.3  PCA(主成分分析)…72
3.3.1  PCAの概要
3.3.2  PCAの使い方
3.3.3 インクリメンタルPCA
3.3.4 スパースPCA
3.3.5 カーネルPCA
3.4 特異値分解…81
3.5 ランダム射影…82
3.5.1 ガウス型ランダム射影
3.5.2 スパースランダム射影
3.6  Isomap…84
3.7  MDS(多次元尺度構成法)…85
3.8  LLE(局所線形埋め込み)…86
3.9  t-SNE
3.10 他の次元削減手法…89
3.11 辞書学習…89
3.12  ICA(独立成分分析)…91
3.13 まとめ…92

4章 異常検出…93 [赤尾] 24ページ
4.1 クレジットカード不正検出…93
4.1.1 データの準備
4.1.2 異常スコア関数の定義
4.1.3 評価尺度の定義
4.1.4 プロット関数の定義
4.2 通常のPCAによる異常検出…97
4.2.1 元の次元数と同じ数の主成分を用いるPCA
4.2.2 最適な主成分数の探索
4.3 スパースPCAによる異常検出…101
4.4 カーネルPCAによる異常検出…103
4.5 ガウス型ランダム射影を用いた異常検出…105
4.6 スパースランダム射影を用いた異常検出…106
4.7 非線形異常検出…108
4.8 辞書学習による異常検出…108
4.9  ICAによる異常検出…110
4.10 テストセットに対する不正検出…111
4.10.1 通常のPCAを用いたテストセットに対する異常検出
4.10.2  ICAを用いたテストセットに対する異常検出
4.10.3 辞書学習を用いたテストセットに対する異常検出
4.11 まとめ…115

5章 クラスタリング…117 [清水] 22ページ
5.1  MNIST数字データセット…117
5.1.1 データの準備
5.2 クラスタリングアルゴリズム…119
5.3  k平均法…120
5.3.1  k平均法のクラスタ慣性
5.3.2 クラスタリング結果の評価
5.3.3  k平均法の精度
5.3.4  k平均法と主成分の数
5.3.5 元のデータセットに対するk平均法
5.4 階層クラスタリング…127
5.4.1 凝集型階層クラスタリング
5.4.2 デンドログラム
5.4.3 クラスタリング結果の評価
5.5  DBSCAN…133
5.5.1  DBSCANアルゴリズム
5.5.2  DBSCANのMNIST数字データセットへの適用
5.5.3  HDBSCAN
5.6 まとめ…137

6章 グループ分け…139 [清水] 22ページ
6.1  LendingClubデータ…139
6.1.1 データの準備
6.1.2 文字列から数値への変換
6.1.3 欠損値の補間
6.1.4 特徴量エンジニアリング
6.1.5 最終的な特徴量集合の選択とスケール変換
6.1.6 評価用ラベルの指定
6.2 クラスタリングの評価…147
6.3  k平均法の適用…148
6.4 階層クラスタリングの適用…151
6.5  HDBSCANの適用…155
6.6 まとめ…156

Ⅲ部 TensorFlowとKerasを用いた教師なし学習

7章 オートエンコーダ…161 [藤兼] 8ページ
7.1 ニューラルネットワーク…161
7.1.1 TensorFlow
7.1.2 Keras
7.2 オートエンコーダ:エンコーダとデコーダ…164
7.3 未完備オートエンコーダ…165
7.4 過完備オートエンコーダ…166
7.5 デンス vs. スパースオートエンコーダ…166
7.6 ノイズ除去オートエンコーダ…167
7.7 変分オートエンコーダ…167
7.8 まとめ…168

8章 オートエンコーダハンズオン…169 [藤兼] 33ページ
8.1 データの準備…169
8.2 オートエンコーダの構成要素…172
8.3 活性化関数…172
8.4 最初のオートエンコーダ…173
8.4.1 損失関数
8.4.2 最適化手法
8.4.3 モデルの訓練
8.4.4 テストセットを用いた評価
8.5 線形活性化関数を用いた2層未完備オートエンコーダ…179
8.5.1 ノード数を増やしてみる
8.5.2 層を増やしてみる
8.6 非線形オートエンコーダ…184
8.7 線形活性化関数を用いた過完備オートエンコーダ…187
8.8 線形活性化関数を用いドロップアウトを適用した過完備オートエンコーダ…189
8.9 線形活性化関数を用いたスパース過完備オートエンコーダ…191
8.10 線形活性化関数を用いドロップアウトを適用したスパース過完備オートエンコーダ…192
8.11 ノイズのあるデータセットへの対応…194
8.12 ノイズ除去オートエンコーダ…195
8.12.1 線形活性化関数を用いた2層ノイズ除去未完備オートエンコーダ
8.12.2 線形活性化関数を用いた2層ノイズ除去過完備オートエンコーダ
8.12.3  ReLU活性化関数を用いた2層ノイズ除去過完備オートエンコーダ
8.13 まとめ…201

9章 半教師あり学習…203 [奈須] 14ページ
9.1 データの準備…203
9.2 教師ありモデル…206
9.3 教師なしモデル…208
9.4 半教師ありモデル…210
9.5 教師あり学習と教師なし学習の威力…212
9.6 まとめ…213

Ⅳ部TensorFlowとKerasを用いた深層教師なし学習

10章 制限付きボルツマンマシンを用いた推薦システム…217 [小林] 18ページ
10.1  ボルツマンマシン…217
10.1.1 制限付きボルツマンマシン(RBM)
10.2 推薦システム…218
10.2.1  協調フィルタリング
10.2.2  The Netflix Prize
10.3  MovieLensデータセット…219
10.3.1  データの準備
10.3.2 コスト関数の定義:平均二乗誤差
10.3.3 ベースライン実験
10.4 行列分解…226
10.4.1  潜在因子が1の場合
10.4.2 潜在因子が3の場合
10.4.3 潜在因子が5の場合
10.5  RBMを用いた協調フィルタリング…228
10.5.1  RBMニューラルネットワークの構造
10.5.2  RBMクラスの部品の作成
10.5.3  RBMを用いた推薦システムの訓練
10.6 まとめ…234

11章 深層信念ネットワークを用いた特徴量検出…235 [奈須] 28ページ
11.1 深層信念ネットワークの詳細…235
11.2  MNIST画像クラス分類…236
11.3 制限付きボルツマンマシン…237
11.3.1  RBMクラスの構成要素の構築
11.3.2  RBMモデルを用いた画像の生成
11.3.3 中間特徴量検出を見る
11.4  3つのRBMからなるDBNの学習…242
11.4.1 不正検出の試行
11.4.2 生成された画像
11.5 完全な深層信念ネットワーク…248
11.5.1  DBNの学習プロセス
11.5.2  DBNの学習
11.6 教師なし学習を用いた教師あり学習手法の改善…253
11.6.1  画像クラス分類器を改善するための画像生成
11.7  LightGBMを用いた画像クラス分類器…259
11.7.1 教師あり学習だけの場合
11.7.2 教師なし学習と教師あり学習を併用したシステム
11.8 まとめ…262

12章 敵対的生成ネットワーク…263 [嶋田] 16ページ
12.1  GANの考え方…263
12.1.1  GANの威力
12.2 深層畳み込み敵対的生成ネットワーク…264
12.3 畳み込みニューラルネットワーク…265
12.4  DCGAN再訪…269
12.4.1  DCGANの生成ネットワーク
12.4.2  DCGANの識別ネットワーク
12.4.3 識別モデルと敵対的モデル
12.4.4  MNISTデータセット用DCGAN
12.5  MNIST DCGANの動作…275
12.5.1 合成画像の生成
12.6 まとめ…277

13章 時系列クラスタリング…279 [小林] 22ページ
13.1  心電図データ…280
13.2 時系列クラスタリングに対するアプローチ…280
13.2.1  k-Shape法
13.3  k-Shape法による時系列クラスタリング:ECGFiveDays…281
13.3.1 データの準備
13.3.2 訓練と評価
13.4  k-Shape法による時系列クラスタリング:ECG5000…286
13.4.1  データの準備
13.4.2 訓練と評価
13.5  k平均法を用いたECG5000に対する時系列クラスタリング…292
13.6 階層DBSCANによる時系列クラスタリング:ECG5000…293
13.7 時系列クラスタリングアルゴリズムの比較…294
13.7.1  すべてのデータセットに対するk-Shape法の実行
13.7.2 すべてのデータセットに対するk平均法の実行
13.7.3 すべてのデータセットに対するHDBSCANの実行
13.7.4  3つの時系列クラスタリング手法の比較
13.8 まとめ…300

14章 終わりに…301 [教員] 5ページ
14.1 教師あり学習…301
14.2 教師なし学習…302
14.2.1  scikit-learn
14.2.2  TensorFlowとKeras
14.3 強化学習…304
14.4 教師なし学習応用が期待される分野…304
14.5 教師なし学習の未来…305
14.6 最後に一言…306

索引


環境の準備

  1. Gitのインストール(ない場合)
  2. Git Large File Storageのインストール
  3. Gitリポジトリのクローン
  4. handson-unsupervised-learningフォルダに移動
  5. Anacondaのインストール (Python 3.6の最新版) 以下のように隔離されたPython環境を作るとよい(他の方法でもよい).
  6. DLライブラリ: TensorFlow(本書は1系)のインストール
  7. DLライブラリ: Kerasのインストール
  8. 勾配ブースティング: XGBoostのインストール
  9. 勾配ブースティング: LightGBM
  10. クラスタリング: fastcluster & hdbscan & tslearn
  11. 対話的環境:Jupyter Notebookの起動

参考資料


風間 一洋