【感想・ネタバレ】[第2版]Python機械学習プログラミング 達人データサイエンティストによる理論と実践のレビュー

\ レビュー投稿でポイントプレゼント / ※購入済みの作品が対象となります
レビューを書く

感情タグBEST3

Posted by ブクログ 2020年04月23日

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

0
ネタバレ

Posted by ブクログ 2019年11月17日

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


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の使い方、線形代数の行列分解についても補足として載ってる(割愛)

0

「IT・コンピュータ」ランキング