scikit-learnとTensorFlowによる実践機械学習

[cover photo]
オライリー・ジャパンで書籍を購入:
定価4,860円


本書はコードを動かしながら学び、機械学習が使えるようになることを目的とした書籍です。現実的な問題を出し、サンプルデータを示しながら、機械学習で問題を解決に導くまでの一連の手法を体系立てて解説します。
深層学習以外の機械学習にはscikit-learnを使い、機械学習プロジェクトの流れ、データからモデルを学習する方法、コスト関数の最適化、データの処理・クリーニングなどの基礎から、特徴量の選択や過学習、データの次元削減など応用までを学びます。
深層学習にはTensorFlowを使い、ニューラルネットワークの構築と訓練、ニューラルネットワークアーキテクチャ、深層学習や強化学習、さらにTensorFlowの分散処理のメカニズムや実装までを幅広く解説します。
すべてのコードがGitHub上で公開されており、Jupyter Notebookを使って試しながら学ぶことができます。アルゴリズムの説明に終始せず、実際の業務で必要となる機械学習のスキルをまとめた本書は機械学習を学びたいエンジニア必携の一冊です。

関連書籍

Pythonではじめる機械学習
実践 Deep Learning
ゼロから作るDeep Learning

監訳者まえがき
はじめに

第I部 機械学習の基礎

1章 機械学習の現状
    1.1 機械学習とは何か
    1.2 なぜ機械学習を使うのか
    1.3 機械学習システムのタイプ
        1.3.1 教師あり/教師なし学習
        1.3.2 バッチ学習とオンライン学習
        1.3.3 インスタンスベース学習とモデルベース学習
    1.4 機械学習が抱える難問
        1.4.1 訓練データ例の品質の低さ
        1.4.2 現実を代表しているとは言えない訓練データ
        1.4.3 品質の低いデータ
        1.4.4 無関係な特徴量
        1.4.5 訓練データへの過学習
        1.4.6 訓練データへの過小適合
        1.4.7 1 歩下がって復習しよう
    1.5 テストと検証
    1.6 演習問題

2章 エンドツーエンドの機械学習プロジェクト
    2.1 実際のデータの操作
    2.2 全体像をつかむ
        2.2.1 問題の枠組みを明らかにする
        2.2.2 性能指標を選択する
        2.2.3 前提条件をチェックする
    2.3 データを手に入れる
        2.3.1 ワークスペースを作る
        2.3.2 データをダウンロードする
        2.3.3 データの構造をざっと見てみる
        2.3.4 テストセットを作る
    2.4 洞察を得るためにデータを研究、可視化する
        2.4.1 地理データの可視化
        2.4.2 相関を探す
        2.4.3 属性の組み合わせを試してみる
    2.5 機械学習アルゴリズムに渡せるようにデータを準備する
        2.5.1 データをクリーニングする
        2.5.2 テキスト/カテゴリ属性の処理
        2.5.3 カスタム変換
        2.5.4 特徴量のスケーリング
        2.5.5 変換パイプライン
    2.6 モデルを選択して訓練する
        2.6.1 訓練セットを訓練、評価する
        2.6.2 交差検証を使ったよりよい評価
    2.7 モデルを微調整する
        2.7.1 グリッドサーチ
        2.7.2 ランダムサーチ
        2.7.3 アンサンブルメソッド
        2.7.4 最良のモデルと誤差の分析
        2.7.5 テストセットでシステムを評価する
    2.8 システムを本番稼働、モニタリング、メンテナンスする
    2.9 試してみよう
    2.10 演習問題

3章 分類
    3.1 MNIST
    3.2 二項分類器の訓練
    3.3 性能指標
        3.3.1 交差検証を使った正解率の測定
        3.3.2 混同行列
        3.3.3 適合率と再現率
        3.3.4 適合率と再現率のトレードオフ
        3.3.5 ROC 曲線
    3.4 多クラス分類
    3.5 誤分類の分析
    3.6 多ラベル分類
    3.7 多出力分類
    3.8 演習問題

4章 モデルの訓練
    4.1 線形回帰
        4.1.1 正規方程式
        4.1.2 計算量
    4.2 勾配降下法
        4.2.1 バッチ勾配降下法
        4.2.2 確率的勾配降下法
        4.2.3 ミニバッチ勾配降下法
    4.3 多項式回帰
    4.4 学習曲線
    4.5 正則化された線形回帰
        4.5.1 リッジ回帰
        4.5.2 Lasso 回帰
        4.5.3 Elastic Net
        4.5.4 早期打ち切り
    4.6 ロジスティック回帰
        4.6.1 確率の推計
        4.6.2 訓練とコスト関数
        4.6.3 決定境界
        4.6.4 ソフトマックス回帰
    4.7 演習問題

5章 サポートベクトルマシン(SVM)
    5.1 線形SVM 分類器
        5.1.1 ソフトマージン分類
    5.2 非線形SVM 分類器
        5.2.1 多項式カーネル
        5.2.2 類似性特徴量の追加
        5.2.3 ガウスRBF カーネル
        5.2.4 計算量
    5.3 SVM 回帰
    5.4 水面下で行われていること
        5.4.1 決定関数と予測
        5.4.2 訓練の目標
        5.4.3 二次計画法
        5.4.4 双対問題
        5.4.5 カーネル化されたSVM
        5.4.6 オンラインSVM
    5.5 演習問題

6章 決定木
    6.1 決定木の訓練と可視化
    6.2 決定木による予測
    6.3 クラスの確率の推計
    6.4 CART 訓練アルゴリズム
    6.5 計算量
    6.6 ジニ不純度かエントロピーか
    6.7 正則化ハイパーパラメータ
    6.8 回帰
    6.9 不安定性
    6.10 演習問題

7章 アンサンブル学習とランダムフォレスト
    7.1 投票分類器
    7.2 バギングとペースティング
        7.2.1 scikit-learn におけるバギングとペースティング
        7.2.2 OOB 検証
    7.3 ランダムパッチとランダムサブスペース
    7.4 ランダムフォレスト
        7.4.1 Extra-Tree
        7.4.2 特徴量の重要度
    7.5 ブースティング
        7.5.1 アダブースト(AdaBoost)
        7.5.2 勾配ブースティング
    7.6 スタッキング
    7.7 演習問題

8章 次元削減
    8.1 次元の呪い
    8.2 次元削減のための主要なアプローチ
        8.2.1 射影
        8.2.2 多様体学習
    8.3 PCA
        8.3.1 分散の維持
        8.3.2 主成分
        8.3.3 低次のd 次元への射影
        8.3.4 scikit-learn の使い方
        8.3.5 因子寄与率
        8.3.6 適切な次数の選択
        8.3.7 圧縮のためのPCA
        8.3.8 追加学習型PCA
        8.3.9 ランダム化PCA
    8.4 カーネルPCA
        8.4.1 カーネルの選択とハイパーパラメータのチューニング
    8.5 LLE
    8.6 その他の次元削減テクニック
    8.7 演習問題

第II部 ニューラルネットワークと深層学習

9章 TensorFlow を立ち上げる
    9.1 インストール
    9.2 最初のグラフの作成とセッション内での実行
    9.3 グラフの管理
    9.4 ノードの値のライフサイクル
    9.5 TensorFlow による線形回帰
    9.6 勾配降下法の実装
        9.6.1 マニュアルの勾配計算
        9.6.2 自動微分を使った方法
        9.6.3 オプティマイザを使うと
    9.7 訓練アルゴリズムへのデータの供給
    9.8 モデルの保存と復元
    9.9 TensorBoard を使ったグラフと訓練曲線の可視化
    9.10 名前スコープ
    9.11 モジュール性
    9.12 変数の共有
    9.13 演習問題

10章 人工ニューラルネットワーク入門
    10.1 生物学的なニューロンから人工ニューロンへ
        10.1.1 生物学的ニューロン
        10.1.2 ニューロンによる論理演算
        10.1.3 パーセプトロン
        10.1.4 MLP とバックプロパゲーション
    10.2 TensorFlow の高水準API を使ったMLP の訓練
    10.3 プレーンなTensorFlow を使ったDNN の訓練
        10.3.1 構築フェーズ
        10.3.2 実行フェーズ
        10.3.3 ニューラルネットワークを実際に使ってみる
    10.4 ニューラルネットワークのハイパーパラメータの操作
        10.4.1 隠れ層の数
        10.4.2 隠れ層あたりのニューロン数
        10.4.3 活性化関数
    10.5 演習問題

11章 深層ニューラルネットの訓練
    11.1 勾配消失/爆発問題
        11.1.1 Xavier の初期値とHe の初期値
        11.1.2 非飽和活性化関数
        11.1.3 バッチ正規化
        11.1.4 勾配クリッピング
    11.2 プレトレーニング済み層の再利用
        11.2.1 TensorFlow モデルの再利用
        11.2.2 ほかのフレームワークで作ったモデルの再利用
        11.2.3 下位層の凍結
        11.2.4 凍結層のキャッシング
        11.2.5 上位層の調整、除去、置換
        11.2.6 model zoo
        11.2.7 教師なしプレトレーニング
        11.2.8 付随的なタスクのプレトレーニング
    11.3 オプティマイザの高速化
        11.3.1 Momentum(慣性)最適化
        11.3.2 NAG
        11.3.3 AdaGrad
        11.3.4 RMSProp
        11.3.5 Adam 最適化
        11.3.6 学習率のスケジューリング
    11.4 正則化を通じた過学習の防止
        11.4.1 早期打ち切り
        11.4.2 ℓ1、ℓ2 正則化
        11.4.3 ドロップアウト
        11.4.4 重み上限正則化
        11.4.5 データ拡張
    11.5 実践的なガイドライン
    11.6 演習問題

12章 複数のデバイス、サーバーを使った分散TensorFlow
    12.1 1 台のマシンの複数のデバイス
        12.1.1 初期化
        12.1.2 GPU RAM の管理
        12.1.3 デバイスへのオペレーションの配置
        12.1.4 並列実行
        12.1.5 依存ノード制御
    12.2 複数のサーバーの複数のデバイス
        12.2.1 セッションの開設
        12.2.2 マスターサービスとワーカーサービス
        12.2.3 タスクを越えたオペレーションのピン留め
        12.2.4 複数のパラメータサーバーへの変数のシャーディング
        12.2.5 リソースコンテナを使ったセッション間での状態の共有
        12.2.6 TensorFlow キューを使った非同期通信
        12.2.7 グラフからのデータの直接ロード
    12.3 TensorFlow クラスタ上でのニューラルネットワークの並列化
        12.3.1 デバイスごとにひとつのニューラルネットワーク
        12.3.2 グラフ内レプリケーションとグラフ間レプリケーション
        12.3.3 モデル並列
        12.3.4 データ並列
    12.4 演習問題

13章 畳み込みニューラルネットワーク
    13.1 視覚野のアーキテクチャ
    13.2 畳み込み層
    13.3 フィルタ
        13.3.1 複数の特徴量マップの積み上げ
        13.3.2 TensorFlow による実装
        13.3.3 メモリ要件
    13.4 プーリング層
    13.5 CNN のアーキテクチャ
        13.5.1 LeNet-5
        13.5.2 AlexNet
        13.5.3 GoogLeNet
        13.5.4 ResNet
    13.6 演習問題

14章 再帰型ニューラルネットワーク
    14.1 再帰ニューロン
        14.1.1 記憶セル
        14.1.2 入出力シーケンス
    14.2 TensorFlow による初歩的なRNN
        14.2.1 時系列に沿った静的なアンロール
        14.2.2 時系列に沿った動的なアンロール
        14.2.3 可変長入力シーケンスの処理
        14.2.4 可変長出力シーケンスの処理
    14.3 RNN の訓練
        14.3.1 シーケンス分類器の訓練
        14.3.2 時系列データを予測するための訓練
        14.3.3 創造的RNN
    14.4 深層RNN
        14.4.1 複数のGPUによる深層RNNの分散処理
        14.4.2 ドロップアウトの適用
        14.4.3 多数のタイムステップによる訓練の難しさ
    14.5 LSTM セル
        14.5.1 ピープホール接続
    14.6 GRU セル
    14.7 自然言語処理
        14.7.1 単語の埋め込み
        14.7.2 機械翻訳のためのエンコーダ- デコーダネットワーク
    14.8 演習問題

15章 オートエンコーダ
    15.1 効率的なデータ表現
    15.2 不完備線形オートエンコーダによるPCA
    15.3 スタックオートエンコーダ
        15.3.1 TensorFlow による実装
        15.3.2 重みの均等化
        15.3.3 オートエンコーダをひとつずつ訓練する
        15.3.4 再構築の可視化
        15.3.5 特徴量の可視化
    15.4 スタックオートエンコーダを使った教師なしプレトレーニング
    15.5 ノイズを除去するオートエンコーダ
        15.5.1 TensorFlow による実装
    15.6 スパースオートエンコーダ
        15.6.1 TensorFlow による実装
    15.7 変分オートエンコーダ
        15.7.1 数字の生成
    15.8 その他のオートエンコーダ
    15.9 演習問題

16章 強化学習
    16.1 報酬の最適化の学習
    16.2 方策探索
    16.3 OpenAI Gym入門
    16.4 ニューラルネットワークによる方策
    16.5 行動の評価:信用割当問題
    16.6 方策勾配法
    16.7 マルコフ決定過程
    16.8 TD 学習とQ学習
        16.8.1 探索方策
        16.8.2 近似的Q学習と深層Q学習
    16.9 DQN アルゴリズムを使ったパックマンのプレイの学習
    16.10 演習問題
    16.11 ありがとう!

付録A 演習問題の解答
    A.1 1 章:機械学習の現状
    A.2 2 章:エンドツーエンドの機械学習プロジェクト
    A.3 3 章:分類
    A.4 4 章:モデルの訓練
    A.5 5 章:サポートベクトルマシン(SVM)
    A.6 6 章:決定木
    A.7 7 章:アンサンブル学習とランダムフォレスト
    A.8 8 章:次元削減
    A.9 9 章:TensorFlow を立ち上げる
    A.10 10 章:人工ニューラルネットワーク入門
    A.11 11 章:深層ニューラルネットの訓練
    A.12 12 章:複数のデバイス、サーバーを使った分散TensorFlow
    A.13 13 章:畳み込みニューラルネットワーク
    A.14 14 章:再帰型ニューラルネットワーク
    A.15 15 章:オートエンコーダ
    A.16 16 章:強化学習

付録B 機械学習プロジェクトチェックリスト
    B.1 問題の枠組みを明らかにし、全体の構図をつかむ
    B.2 データを手に入れる
    B.3 データを探る
    B.4 データを準備する
    B.5 有望なモデルを絞り込む
    B.6 システムを微調整する
    B.7 ソリューションをプレゼンテーションする
    B.8 本番稼働!

付録C SVM 双対問題

付録D 自動微分
    D.1 マニュアルの微分
    D.2 数式微分
    D.3 数値微分
    D.4 フォワードモード自動微分
    D.5 リバースモード自動微分

付録E その他の広く知られているANN アーキテクチャ
    E.1 ホップフィールドネットワーク
    E.2 ボルツマンマシン
    E.3 制限付きボルツマンマシン
    E.4 DBN
    E.5 自己組織化マップ

索引

Feedback

皆さんのご意見をお聞かせください。ご購入いただいた書籍やオライリー・ジャパンへのご感想やご意見、ご提案などをお聞かせください。より良い書籍づくりやサービス改良のための参考にさせていただきます。
[feedbackページへ]