Book description
本書はコードを動かしながら学び、機械学習が使えるようになることを目的とした書籍です。現実的な問題を出し、サンプルデータを示しながら、機械学習で問題を解決に導くまでの一連の手法を体系立てて解説します。深層学習以外の機械学習にはscikit-learnを使い、機械学習プロジェクトの流れ、データからモデルを学習する方法、データの処理・クリーニングなどの基礎から、特徴量の選択や過学習、データの次元削減など応用までを学びます。深層学習にはTensorFlowとKerasを使い、ニューラルネットワークの構築と訓練、ニューラルネットワークアーキテクチャ、深層学習や強化学習、さらにTensorFlowの分散処理のメカニズムや実装までを幅広く解説します。
Table of contents
- 大扉
- 原書大扉
- クレジット
- 監訳者まえがき
- はじめに
- 第Ⅰ部 機械学習の基礎
- 1章 機械学習の現状
- 1.1 機械学習とは何か
- 1.2 なぜ機械学習を使うのか
- 1.3 応用の例
- 1.4 機械学習システムのタイプ
- 1.4.1 教師あり/教師なし学習
- 1.4.2 バッチ学習とオンライン学習
- 1.4.3 インスタンスベース学習とモデルベース学習
- 1.5 機械学習が抱える難問
- 1.5.1 訓練データ例の品質の低さ
- 1.5.2 現実を代表しているとは言えない訓練データ
- 1.5.3 品質の低いデータ
- 1.5.4 無関係な特徴量
- 1.5.5 訓練データへの過学習
- 1.5.6 訓練データへの過小適合
- 1.5.7 一歩下がって復習しよう
- 1.6 テストと検証
- 1.6.1 ハイパーパラメータの調整とモデルの選択
- 1.6.2 データのミスマッチ
- 1.7 演習問題
- 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 Ridge回帰
- 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 演習問題
- 9章 教師なし学習のテクニック
- 9.1 クラスタリング
- 9.1.1 K平均法
- 9.1.2 K平均法の限界
- 9.1.3 画像セグメンテーションとしてのクラスタリング
- 9.1.4 前処理のためのクラスタリング
- 9.1.5 半教師あり学習の一部としてのクラスタリング
- 9.1.6 DBSCAN
- 9.1.7 その他のクラスタリングアルゴリズム
- 9.2 混合ガウスモデル
- 9.2.1 混合ガウスモデルを使った異常検知
- 9.2.2 クラスタ数の選択
- 9.2.3 混合ベイズガウスモデル
- 9.2.4 異常/新規検知のためのその他のアルゴリズム
- 9.3 演習問題
- 第Ⅱ部 ニューラルネットワークと深層学習
- 10章 人工ニューラルネットワークとKerasの初歩
- 10.1 生物学的なニューロンから人工ニューロンへ
- 10.1.1 生物学的ニューロン
- 10.1.2 ニューロンによる論理演算
- 10.1.3 パーセプトロン
- 10.1.4 MLPとバックプロパゲーション
- 10.1.5 回帰MLP
- 10.1.6 分類MLP
- 10.2 KerasによるMLPの実装
- 10.2.1 TensorFlow 2のインストール
- 10.2.2 シーケンシャルAPIを使った画像分類器の構築
- 10.2.3 シーケンシャルAPIを使った回帰MLPの構築
- 10.2.4 関数型APIを使った複雑なモデルの構築
- 10.2.5 サブクラス化APIを使ったダイナミックなモデルの構築
- 10.2.6 モデルの保存と復元
- 10.2.7 コールバックの使い方
- 10.2.8 TensorBoardを使った可視化
- 10.3 ニューラルネットワークのハイパーパラメータの微調整
- 10.3.1 隠れ層の数
- 10.3.2 隠れ層あたりのニューロン数
- 10.3.3 学習率、バッチサイズ、その他のハイパーパラメータ
- 10.4 演習問題
- 11章 深層ニューラルネットワークの訓練
- 11.1 勾配消失/爆発問題
- 11.1.1 GlorotとHeの初期値
- 11.1.2 飽和しない活性化関数
- 11.1.3 バッチ正規化
- 11.1.4 勾配クリッピング
- 11.2 事前学習済みの層の再利用
- 11.2.1 Kerasによる転移学習
- 11.2.2 教師なし事前学習
- 11.2.3 関連タスクの事前学習
- 11.3 オプティマイザの高速化
- 11.3.1 モーメンタム最適化
- 11.3.2 NAG
- 11.3.3 AdaGrad
- 11.3.4 RMSProp
- 11.3.5 Adam、Nadam最適化
- 11.3.6 学習率のスケジューリング
- 11.4 正則化による過学習の防止
- 11.4.1 l1、l2正則化
- 11.4.2 ドロップアウト
- 11.4.3 モンテカルロ(MC)ドロップアウト
- 11.4.4 重み上限正則化
- 11.5 まとめと実践的なガイドライン
- 11.6 演習問題
- 12章 TensorFlowで作るカスタムモデルとその訓練
- 12.1 TensorFlow弾丸旅行
- 12.2 TensorFlowのNumPyのような使い方
- 12.2.1 テンソルとそのオペレーション
- 12.2.2 テンソルとNumPy
- 12.2.3 型変換
- 12.2.4 変数
- 12.2.5 その他のデータ構造
- 12.3 モデルと訓練アルゴリズムのカスタマイズ
- 12.3.1 カスタム損失関数
- 12.3.2 カスタムコンポーネントを含むモデルの保存とロード
- 12.3.3 カスタム活性化関数、初期化子、正則化器、制約
- 12.3.4 カスタム指標
- 12.3.5 カスタムレイヤ
- 12.3.6 カスタムモデル
- 12.3.7 損失や指標にモデルの内部状態を反映させる方法
- 12.3.8 自動微分を使った勾配の計算
- 12.3.9 カスタム訓練ループ
- 12.4 TensorFlow関数とグラフ
- 12.4.1 自動グラフとトレーシング
- 12.4.2 TF関数のルール
- 12.5 演習問題
- 13章 TensorFlowによるデータのロードと前処理
- 13.1 データAPI
- 13.1.1 変換の連鎖
- 13.1.2 データのシャッフル
- 13.1.3 データの前処理
- 13.1.4 1つにまとめる
- 13.1.5 プリフェッチ
- 13.1.6 tf.kerasのもとでのデータセットの使い方
- 13.2 TFRecord形式
- 13.2.1 TFRecordファイルの圧縮
- 13.2.2 プロトコルバッファ入門
- 13.2.3 TensorFlow Protobuf
- 13.2.4 Exampleのロードとパース
- 13.2.5 SequenceExample protobufを使ったリストのリストの処理
- 13.3 入力特徴量の前処理
- 13.3.1 ワンホットベクトルを使ったカテゴリ特徴量のエンコード
- 13.3.2 埋め込みを使ったカテゴリ特徴量のエンコード
- 13.3.3 Kerasの前処理層
- 13.4 TF Transform
- 13.5 TFDSプロジェクト
- 13.6 演習問題
- 14章 畳み込みニューラルネットワークを使った深層コンピュータビジョン
- 14.1 視覚野のアーキテクチャ
- 14.2 畳み込み層
- 14.2.1 フィルタ
- 14.2.2 複数の特徴量マップの積み上げ
- 14.2.3 TensorFlowとKerasによる実装
- 14.2.4 メモリ要件
- 14.3 プーリング層
- 14.3.1 KerasとTensorFlowによる実装
- 14.4 CNNのアーキテクチャ
- 14.4.1 LeNet-5
- 14.4.2 AlexNet
- 14.4.3 GoogLeNet
- 14.4.4 VGGNet
- 14.4.5 ResNet
- 14.4.6 Xception
- 14.4.7 SENet
- 14.5 Kerasを使ったResNet-34 CNNの実装
- 14.6 Kerasで事前学習済みモデルを使う方法
- 14.7 事前学習済みモデルを使った転移学習
- 14.8 分類と位置特定
- 14.9 物体検知
- 14.9.1 全層畳み込みネットワーク
- 14.9.2 YOLO(You Only Look Once)
- 14.10 セマンティックセグメンテーション
- 14.11 演習問題
- 15章 RNNとCNNを使ったシーケンスの処理
- 15.1 再帰ニューロンとレイヤ
- 15.1.1 記憶セル
- 15.1.2 入出力シーケンス
- 15.2 RNNの訓練
- 15.3 時系列データの予測
- 15.3.1 ベースライン指標
- 15.3.2 単純なRNNの実装
- 15.3.3 深層RNN
- 15.3.4 複数のタイムステップ後の予測
- 15.4 長いシーケンスの処理
- 15.4.1 不安定な勾配問題への対処
- 15.4.2 短期記憶問題への対処
- 15.5 演習問題
- 16章 RNNと注意機構による自然言語処理
- 16.1 文字RNNを使ったシェイクスピア風テキストの生成
- 16.1.1 訓練セットの作り方
- 16.1.2 シーケンシャルデータセットの分割方法
- 16.1.3 シーケンシャルデータセットの複数のウィンドウへの分割
- 16.1.4 文字RNNモデルの構築と訓練
- 16.1.5 文字RNNモデルの使い方
- 16.1.6 シェイクスピア風の偽文書の生成
- 16.1.7 ステートフルRNN
- 16.2 感情分析
- 16.2.1 マスキング
- 16.2.2 事前学習済みの埋め込みの再利用
- 16.3 ニューラル機械翻訳のためのエンコーダ-デコーダ・ネットワーク
- 16.3.1 双方向RNN
- 16.3.2 ビームサーチ
- 16.4 注意機構
- 16.4.1 ビジュアル注意
- 16.4.2 必要なものは注意だけ:Transformerアーキテクチャ
- 16.5 言語モデルにおける最近のイノベーション
- 16.6 演習問題
- 17章 オートエンコーダとGANを使った表現学習と生成型学習
- 17.1 効率のよいデータ表現
- 17.2 不完備線形オートエンコーダによるPCA
- 17.3 スタックオートエンコーダ
- 17.3.1 Kerasによるスタックオートエンコーダの実装
- 17.3.2 再構築の可視化
- 17.3.3 Fashion MNISTデータセットの可視化
- 17.3.4 スタックオートエンコーダを使った教師なし事前学習
- 17.3.5 重みの均等化
- 17.3.6 オートエンコーダの層ごとの訓練
- 17.4 畳み込みオートエンコーダ
- 17.5 再帰型オートエンコーダ
- 17.6 ノイズを除去するオートエンコーダ
- 17.7 スパース・オートエンコーダ
- 17.8 変分オートエンコーダ(VAE)
- 17.8.1 Fashion MNIST風の画像の生成
- 17.9 GAN
- 17.9.1 GANの訓練の難しさ
- 17.9.2 深層畳み込みGAN
- 17.9.3 PGGAN(Progressive Growing of GANs)
- 17.9.4 StyleGAN
- 17.10 演習問題
- 18章 強化学習
- 18.1 報酬の最大化の学習
- 18.2 方策探索
- 18.3 OpenAI Gym入門
- 18.4 ニューラルネットワークによる方策
- 18.5 行動の評価:信用割当問題
- 18.6 方策勾配法
- 18.7 マルコフ決定過程
- 18.8 TD学習
- 18.9 Q学習
- 18.9.1 探索方策
- 18.9.2 近似Q学習と深層Q学習
- 18.10 深層DQNの実装
- 18.11 深層Q学習のバリアント
- 18.11.1 ターゲットQ値の固定化
- 18.11.2 ダブルDQN
- 18.11.3 優先度付き経験再生
- 18.11.4 Dueling DQN
- 18.12 TF-Agentsライブラリ
- 18.12.1 TF-Agentsのインストール
- 18.12.2 TF-Agents環境
- 18.12.3 環境の仕様
- 18.12.4 環境ラッパーとアタリ前処理
- 18.12.5 訓練のアーキテクチャ
- 18.12.6 DQNの作り方
- 18.12.7 DQNエージェントの作り方
- 18.12.8 再生バッファと対応するオブザーバの作り方
- 18.12.9 訓練指標の作り方
- 18.12.10 ドライバの作り方
- 18.12.11 データセットの作り方
- 18.12.12 訓練ループの作り方
- 18.13 広く使われているRLアルゴリズム
- 18.14 演習問題
- 19章 大規模なTensorFlowモデルの訓練とデプロイ
- 19.1 TensorFlowモデルのサーブ
- 19.1.1 TF Servingの使い方
- 19.1.2 GCP AI Platform上での予測サービスの作成
- 19.1.3 予測サービスの使い方
- 19.2 モバイル/組み込みデバイスへのモデルのデプロイ
- 19.3 GPUを使った計算のスピードアップ
- 19.3.1 自前のGPU
- 19.3.2 GPU装着仮想マシン
- 19.3.3 Colaboratory
- 19.3.4 GPU RAMの管理
- 19.3.5 オペレーション、変数のデバイスへの配置
- 19.3.6 複数のデバイスにまたがる並列実行
- 19.4 複数のデバイスによるモデルの訓練
- 19.4.1 モデル並列
- 19.4.2 データ並列
- 19.4.3 Distribution Strategy APIを使った大規模な訓練
- 19.4.4 TensorFlowクラスタによるモデルの訓練
- 19.4.5 Google Cloud AI Platformでの大規模な訓練ジョブの実行
- 19.4.6 AI Platform上でのブラックボックス型のハイパーパラメータ調整サービス
- 19.5 演習問題
- 19.6 ありがとう!
- 付録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章:教師なし学習のテクニック
- A.10 10章:人工ニューラルネットワークとKerasの初歩
- A.11 11章:深層ニューラルネットワークの訓練
- A.12 12章:TensorFlowで作るカスタムモデルとその訓練
- A.13 13章:TensorFlowによるデータのロードと前処理
- A.14 14章:畳み込みニューラルネットワークを使った深層コンピュータビジョン
- A.15 15章:RNNとCNNを使ったシーケンスの処理
- A.16 16章:RNNと注意機構による自然言語処理
- A.17 17章:オートエンコーダとGANを使った表現学習と生成型学習
- A.18 18章:強化学習
- A.19 19章:大規模なTensorFlowモデルの訓練とデプロイ
- 付録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 リバースモード自動微分
- 付録E その他の広く知られているANNアーキテクチャ
- E.1 ホップフィールドネットワーク
- E.2 ボルツマンマシン
- E.3 制限付きボルツマンマシン
- E.4 DBN
- E.5 自己組織化マップ
- 付録F 特殊なデータ型
- F.1 文字列
- F.2 不調和テンソル
- F.3 疎テンソル
- F.4 テンソル配列
- F.5 集合
- F.6 キュー
- 付録G TensorFlowグラフ
- G.1 TF関数と具象関数
- G.2 関数定義とグラフの調べ方
- G.3 トレーシングの詳細
- G.4 自動グラフによるダイナミックループ
- G.5 TF関数における変数、その他のリソースの処理
- G.6 tf.kerasのもとでTF関数を使うか否かの指定方法
- 著者紹介
- 奥付
Product information
- Title: scikit-learn、Keras、TensorFlowによる実践機械学習 第2版
- Author(s):
- Release date: October 2020
- Publisher(s): O'Reilly Japan, Inc.
- ISBN: 9784873119281
You might also like
book
仕事ではじめる機械学習 第2版
2018年の発行以来、多くの読者に支持された書籍を全面改訂! 不確実性の高い機械学習プロジェクトについて、「仕事で使う」という観点から整理するコンセプトはそのままに、初版の発行後に登場した概念や課題を取り上げます。「機械学習でいい感じにしてくれ」と突然上司に言われたとき、本書で学んだことが読者の力になるはずです。本書で得た知識は読者が「いま」困っている問題を解決する助けとなるでしょう。 第2版では、機械学習システムの開発と運用の統合する「ML Ops」、機械学習モデルを解釈し、その妥当性や根拠を明らかにする「機械学習モデルの検証」、ユーザーの行動を学習しながら予測を進める「バンディットアルゴリズム」、意思決定における予測システムの役割や意思決定のデザインを扱う「オンライン広告での機械学習」といった新章を追加しています。
book
Pythonではじめる機械学習 ―scikit-learnで学ぶ特徴量エンジニアリングと機械学習の基礎
Pythonの機械学習用ライブラリの定番、scikit-learnのリリースマネージャを務めるなど開発に深く関わる著者が、scikit-learnを使った機械学習の方法を、ステップバイステップで解説します。ニューラルネットを学ぶ前に習得しておきたい機械学習の基礎をおさえるとともに、優れた機械学習システムを実装し精度の高い予測モデルを構築する上で重要となる「特徴量エンジニアリング」と「モデルの評価と改善」について多くのページを割くなど、従来の機械学習の解説書にはない特長を備えています。
book
プログラミングRust 第2版
次世代ブラウザ開発用にMozillaによって開発されたRustは、C/C++並みのパフォーマンスと低レベルの制御能力に加え、メモリとスレッドの安全性を担保し、さらに並行性にも優れるといった特徴を持つ、優秀な言語です。本書はMozillaで実際にRustを使ってFirefoxを開発している著者らによる、言語の概要と用途について解説する書籍で、Rustのほとんどの機能を詳細にカバーします。Rustのメジャーバージョンアップにより非同期処理が可能となったことに対応し、第2版では新たに非同期処理の章を設け、この機能を詳細に解説しています。Rust 2021対応。
book
バイオインフォマティクスデータスキル ―オープンソースツールを使ったロバストで再現性のある研究
バイオインフォマティクス(生命情報科学)とは、コンピュータによる情報解析の手法を生物学の問題に応用する学問のことを指します。本書は、基本的なプログラミングに関する知識を持ったバイオ研究者を対象に、“ロバストで再現性のある研究”のため、複雑で大規模な配列データから意味を抽出し、探索するための技術を解説します。データを処理する方法としてPython、R、Gitなどのオー プンソースツールを用いるため、次世代のデータにも適用できます。近年、ニーズが高まりつつあるバイオ分野において不可欠なデータ処理技術のすべてがこの一冊に詰まっています。