Pythonではじめる教師なし学習

―機械学習の可能性を広げるラベルなしデータの利用

[cover photo]
TOPICS
Programming , Python
発行年月日
PRINT LENGTH
344
ISBN
978-4-87311-910-6
原書
Hands-On Unsupervised Learning Using Python
FORMAT
Print PDF
Ebook
3,960円
Ebookを購入する
Print
3,960円

教師なし学習はラベル付けされていないデータから学習する機械学習の一種です。現在の機械学習では大量のラベル付きのデータを用いる教師あり学習が主流ですが、ラベルを付けるには膨大なコストがかかります。現実世界に機械学習を適用していくためには、ラベル付けを必要としない教師なし学習の重要性が増してくると考えられます。本書は実践的な視点から、データにある隠れたパターンを特定し、異常検出や特徴量抽出・選択を行う方法を紹介します。ラベルなしデータを有効に利用することで、機械学習の可能性を各段に広げる教師なし学習の本質に迫ります。さらに、変分オートエンコーダ(VAE)や敵対的生成ネットワーク(GAN)、制限付きボルツマンマシン(RBM)などの生成モデルも紹介します。

正誤表

ここで紹介する正誤表には、書籍発行後に気づいた誤植や更新された情報を掲載しています。以下のリストに記載の年月は、正誤表を作成し、増刷書籍を印刷した月です。お手持ちの書籍では、すでに修正が施されている場合がありますので、書籍最終ページの奥付でお手持ちの書籍の刷版、刷り年月日をご確認の上、ご利用ください。

第1刷正誤表


p31、2.3.1.1 データのダウンロード
【誤】

すでにそこにこのファイルがあるはずだ。

【正】

すでにそこにこのファイルがあるはずだ*1

[*1] 訳注:2021年12月現在、GitHubにはこのファイルが存在しないので、前ページ脚注のURLからダウンロードする必要がある。この場合ファイル名はcreditcard.csvとなるので、ファイル名を変更してほしい。


p40、下から9行目、2.5.1.1 ハイパーパラメータの設定
【誤】
penalty = 'l2'
C = 1.0
class_weight = 'balanced'
random_state = 2018
solver = 'liblinear'

logReg = LogisticRegression(penalty=penalty, C=C,
            class_weight=class_weight, random_state=random_state,
                            solver=solver, n_jobs=n_jobs)
【正】
penalty = 'l2'
C = 1.0
class_weight = 'balanced'
random_state = 2018
solver = 'liblinear'
n_jobs = 1
logReg = LogisticRegression(penalty=penalty, C=C,
            class_weight=class_weight, random_state=random_state,
                            solver=solver, n_jobs=n_jobs)

目次

目次
まえがき

Ⅰ部 教師なし学習の基礎

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

2章 機械学習プロジェクトのはじめから終わりまで
    2.1 環境の準備
        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 データの概要
    2.3 データの準備
        2.3.1 データの取得
        2.3.2 データの調査
        2.3.3 特徴量行列とラベル配列の作成
        2.3.4 特徴量エンジニアリングと特徴量選択
        2.3.5 データの可視化
    2.4 モデルの準備
        2.4.1 訓練セットとテストセットへの分割
        2.4.2 コスト関数の選択
        2.4.3  k分割交差検証セットの作成
    2.5 機械学習モデル(PartⅠ)
        2.5.1 モデル#1:ロジスティック回帰
    2.6 評価尺度
        2.6.1  混同行列
        2.6.2 適合率-再現率曲線
        2.6.3  ROC:受信者動作特性
    2.7 機械学習モデル(PartⅡ)
        2.7.1 モデル#2:ランダムフォレスト
        2.7.2 モデル#3:勾配ブースティング器(XGBoost)
        2.7.3 モデル#4:勾配ブースティング器(LightGBM)
    2.8 テストセットを用いた4つのモデルの検証
    2.9 アンサンブル
        2.9.1 スタッキング
    2.10 最後のモデル選択
    2.11 実運用システムパイプライン
    2.12 まとめ

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

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

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

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

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

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

7章 オートエンコーダ
    7.1 ニューラルネットワーク
        7.1.1 TensorFlow
        7.1.2 Keras
    7.2 オートエンコーダ:エンコーダとデコーダ
    7.3 未完備オートエンコーダ
    7.4 過完備オートエンコーダ
    7.5 デンス vs. スパースオートエンコーダ
    7.6 ノイズ除去オートエンコーダ
    7.7 変分オートエンコーダ
    7.8 まとめ

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

9章 半教師あり学習
    9.1 データの準備
    9.2 教師ありモデル
    9.3 教師なしモデル
    9.4 半教師ありモデル
    9.5 教師あり学習と教師なし学習の威力
    9.6 まとめ

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

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

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

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

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

14章 終わりに
    14.1 教師あり学習
    14.2 教師なし学習
        14.2.1  scikit-learn
        14.2.2  TensorFlowとKeras
    14.3 強化学習
    14.4 教師なし学習応用が期待される分野
    14.5 教師なし学習の未来
    14.6 最後に一言

索引