[第2版]Python 機械学習プログラミング 達人データサイエンティストによる理論と実践 (impress top gear)

制作 : 福島真太朗 
  • インプレス
4.13
  • (6)
  • (5)
  • (4)
  • (0)
  • (0)
本棚登録 : 230
感想 : 10
本ページはアフィリエイトプログラムによる収益を得ています
  • Amazon.co.jp ・本 (584ページ)
  • / ISBN・EAN: 9784295003373

作品紹介・あらすじ

本書では、機械学習の各コンセプトについて、理論的背景とPythonコーディングの実際を解説。初期の機械学習アルゴリズムから、ニューラルネットワーク(CNN/RNN)までの手法を取り上げます。Python関連ライブラリとしてはscikit‐learnやTensorFlowなどを使用。第2版では、第1版への読者のフィードバックを随所に反映し、ライブラリの更新に対応しました。13章以降はほとんど新規の書き下ろしです。本書は、機械学習を本格的に理解・実践するのに不可欠な一冊となっています。

感想・レビュー・書評

並び替え
表示形式
表示件数
絞り込み
  • 最低限必要な知識
    ・Pythonをすでに勉強していること
    本書で解説されること
    ・主な機械学習の手法
    ・感覚的な数学的説明
    ・scikit-learnなどの最低限の外部ライブラリを用いたコーディング
    ・TensorFlowの使い方
    本書では解説されていないこと
    ・詳細な数学的背景(PRMLなどで補強する必要がある)
    ・強化学習
    ・機械学習についての最新の研究

  • 機械学習の基本的な知識とセンス,そして実装方法を獲得できる良書.前提としてPythonの基本的な知識,大学学部レベルの線形代数と微積分の知識を必要とする.2020年10月に第3版が出ているので購入する場合はそちらを推奨.

  • 請求記号 007.1/R 17

  • 機械学習と深層学習の各種アルゴリズムの理論とPythonでのアルゴリズムの書き方、さらにはそれらのパッケージの実際の実用コードまで書かれている、網羅的な教科書
    機械学習にしても教師あり学習の分類と回帰、教師なし学習、NLPを網羅し、さらに深層学習ではNNの基礎からCNNやRNNについて書かれていてTensorflowでの実装にも触れられている
    高校数学はもちろん、大学数学も線形代数と微積の基礎は知っている前提で展開が進み、深層学習の話ではテンソルや畳み込み積分といった大学数学の中でも難易度の高いものに触れられるので、全体的に難易度の高い本ではあるが、プログラミング力はそこまで要求されず、長いコードは読み飛ばしても問題なさそう
    強化学習の詳細、物体検出、動画、音声あたりは対象外である


    1章 機械学習概要
    3種の機械学習の概要と以降で頻出する基本用語、Pythonやパッケージの準備について


    2章 機械学習の分類 基礎
    単層パーセプトロンの実装によるアイリスの分類について
    また、以降に頻出する勾配降下法についての説明も
    重みwにコスト関数の負の勾配×学習率をかけたΔwを順次足していく(重みは特徴量の個数分あるのがややこしい)
    このコスト関数の各重みごとに偏微分してく過程はややこしいけどめちゃくちゃ大事 そして学習率の大きさも適切なものにすることが重要
    次にスケーリングについて、勾配降下法でスケーリングが大事なのは各重み係数を対等に扱うため(だからXGBTもスケーリングいると思うんだけどどうなんだろうか?)
    勾配降下法もいろいろあってバッチ勾配降下法がまとめてやるやつ(小さいデータセットなら有効)で、でかいのには確率的勾配降下法(逐次的勾配降下法やオンライン勾配降下法とも呼ぶ)で、トレーニングセット増加ごとに重みを更新する
    これも以降(NNやブースティングとかで)よく出てくる 地味にめちゃくちゃ大事な気がする 当たり前だけどオンライン学習にも使えるから便利


    3章 機械学習の分類 scikit-learnの活用
    有名な分類アルゴリズムの理論と実装の解説やそれぞれの良さ悪さ
    2章の単層パーセプトロンは単純だけどやっぱ弱い
    まずは①ロジスティック回帰で、パーセプトロンと非線形関数(シグモイド)を使う 正解値と予測値が違えば重みをあげてく
    またここで正則化について、重みの大きさに課すペナルティでL1とL2がある 前者は疎行列になるからそれぞれ役割が変わってくる いずれにせよ過学習防止にやくだつ(ちなみにL2正則化で係数に1/2を使う理由はよく分からない 微分した時に消えるから?)
    次に②SVMで、これは分類平面の式にでてくる各種重みwの最小化問題になる
    ①と②は前者は更新データに強い 後者は外れ値の影響を受けにくい という良さ
    次に③カーネルSVM 非線形のものに強い 一度次元をあげて分類してから下げる
    ④決定木は値の大小に注目するのでスケーリングがいらないのが強い 決定木はLGBMとかにも使われてるからとても重要そう
    結局分岐した瞬間に発生する情報利得の最大化の問題(ようはその条件分岐によってちゃんと目的変数を分岐できたかの度合い)意味解釈性がとてもでかい
    ⑤ランダムフォレストは④のアンサンブル版 
    最後に怠惰学習の⑥k近傍法 これは正直僕もよく分からない なにが怠惰なんだろう 要するに従来と異なり関数を作らずデータセットを丸暗記する(アルゴリズムが非常に単純なため)


    4章 前処理
    欠損値対応や名義特徴量(Tシャツの色)順序特徴量(Tシャツのサイズ)のマッピングについて
    名義特徴量はonehotエンコーディングが必要 この際Tシャツの色が3色なら列は2列でいいことに注意 計算量軽減のためにも覚えとこう
    他にもスケーリングやtrain-testの分割
    ランダムフォレストを使うと特徴量の重要度が分かるので便利


    5章 次元削減によるデータ圧縮
    ①PCA(教師なし)によりデータをより低次元にする(分散が大きくなるように軸を選択)
    ②LDA(教師あり)は教師ありなのでクラスの分離を最適化する方向に次元圧縮する ここらへん線形代数がとても難しかった(変動行列の固有値分解の話)
    ③カーネルPCAは非線形への対応 ここらへんもすごく難しいが一旦高次元にしてから低次元にするって感じ


    6章 モデル評価とハイパラのチューニング
    パイプラインによる効率化
    k分割交差検証によるモデル性能評価によりバイアスバリアンスのいいバランスを作る
    グリッドサーチによりハイパラの最適な組み合わせを見つける 網羅的に見つけてくれる
    最後に性能評価について これは単なる正解率だけでない手法について(混同行列とか)
    不均衡データを扱う際は少数派クラスの間違えにペナルティを課すとか数を無理やり揃えるとか


    7章 アンサンブル
    異なるモデルの組み合わせということで、アンサンブル学習とバギングとブースティングについて 
    特にブースティングは今流行りの手法なので非常に重要 
    要は非復元抽出して学習を繰り返し、前回外したものは重みを強くするという手法


    8章 感情分析
    NLPの1つである感情分析について 
    要するに単語を特徴量にした行列を生成して機械学習するだけ ただ頻出する単語(be動詞とか冠詞)を消したりするのは独特の作業 大きい疎行列を扱うからオンライン学習も推奨されてる 
    アウトオブコアはデータをすべてはメモリに読み込まずに使える メモリ効率が良い
    1からトピックを作って分類する教師なし学習もある(トピックモデル)


    9章 Webアプリケーションとしての利用
    Flaskを用いてWebアプリケーションを開発して8章の映画レビュー分類を実装
    MLの話というよりFlaskの話で、Pythonでどのようにディレクトリ構造やファイルシステム、CSSを設定するかについて
    最後はWebサーバへのデプロイ


    10章 回帰分析
    重回帰分析の理論と実装について
    実装の前のEDAとして相関行列の調査やスケーリングなど
    回帰分析のコスト関数は誤差平方和が一般的 これを最小化する
    外れ値除去の代わりにRANSACにより正常値のみを選定して学習させる
    性能評価では決定係数を用いるのが一般
    非線形関係に対応するためにランダムフォレスト回帰を使う方法もある(少し難しかった)不純度の指標として誤差平方和ろ使う感じ


    11章 教師なし学習
    k-meansによるグループ化(適切なkの設定が大事 エルボー法で決定することもできる)
    樹形図などいろんな表記法がある
    DBSCANはクラスタの形が球状という制限がないので半月上のクラスタも作れる


    12章 多層NNの基礎
    NNの基礎 コスト関数は確率的勾配降下法はオンラインで便利だし、ノイズがあるのも極小値回避に役立つ
    ミニバッヂ学習の方が時間効率が良いのでこっちを使うこともある(確率的勾配法と同じだけど母集団全部でなく一部を選んで使うから効率的って感じ)
    コスト関数と非線形活性化関数により出力の誤差を計算し、この誤差を最小化していく
    バックプロバゲーション(リバース自動微分)により前の層の重みを更新していく(ちょっと難しい)


    13章 TensorFlowによるNNトレーニングの並列化
    TensorFlowの低レベルAPIにより単純なモデルを作成 高レベルAPIでモデルトレーニングを行う
    GPUを用いる方法について
    活性化関数としてソフトマックス関数は所属確率を出してくれる ReLU関数は勾配消失問題(大きい値に対して勾配が0に近づいてしまい計算が遅くなる)


    14章 TensorFlowの機能
    テンソルに対する演算や関数を計算グラフとして定義できる(そもそもテンソルがややこしいが行列やベクトルの一般化って感じ) 計算グラフはネットワークそのものに感覚的に近い この計算グラフの作り方がややこしい 入力ノードにテンソルをいれる(ためしに階数0のテンソルを入れてみるとわかりやすい)
    計算グラフを作るためにプレースホルダを設定する必要あり
    あとは計算グラフの設定と図示化について


    15章 画像分類 CNN
    入力画像から特徴マップを作るのが非常に大事 これによって低レベルの特徴量を導ける
    畳み込みを行う上で0パディング(周りを0にしとく)と反転(畳み込みのままだとindexの方向が異なるので 2次元の場合回転であって転置ではない)が大事
    パディングはいろいろな大きさがあるがsameパディングが主流 境界の影響は気にしなくて良いからfullずあなくていいしテンソルの幅を維持したいからvalidじゃなくてよい
    最近は畳み込みにフーリエ変換を使う
    プーリングも重要 画像をぼかす 計算効率があがり過学習も減る
    たとえばカラー画像に対し、テーブルが3つあるイメージになり、それぞれにカーネル行列(重み行列 1こにつき3層)をかける カーネル行列の数だけ出力される たとえば5個なら5個の出力マップが行われる 次にそれぞれプーリングする そして活性化して出力する
    畳み込みとプーリングは数回繰り返すこともある
    正則化としてドロップアウト(トレーニング時に隠れユニットをランダムで一部使わない 実行時は全部使う)
    あとはTensorFlowでの実装について


    16章 RNN
    系列データの場合はh(t)をx(t)のみでなくh(t-1)も使う
    何回も重みをかけて1つの重み行列になるが、このとき重みが1以下ならどんどん小さく(勾配消失)、1以上なら発散してしまう(勾配発散)
    勾配消失を防ぐためにLSTMユニットがある これがh(t)だけでなくc(t)からなるメモリセルからなる(とても難しい)
    TensorFlowによる感情分析の実装 文書の場合は長さ(つまり単語数)はまちまちなので空いたところは0で埋める 次に各単語を数値化するときにonehotを使うと大変な計算量や次元の呪いになるので埋め込みを使って数値化するとよい
    次に単語でなく文字レベルの実装(次の文字の予測) 教師なしなのでbuildメソッド→trainメソッドの次はsampleメソッドというものになり勝手に文書を作ってくれる




    その他JupyterNotebookの使用方法やMatplotの使い方、線形代数の行列分解についても補足として載ってる(割愛)

  • 機械学習実践に必要な情報がよくまとまっている。

  • やっと読み終わった

全10件中 1 - 10件を表示

Sebastian Raschkaの作品

  • 話題の本に出会えて、蔵書管理を手軽にできる!ブクログのアプリ AppStoreからダウンロード GooglePlayで手に入れよう
ツイートする
×