Open21

Python機械学習プログラミング

radidaniradidani

第一章

ノーフリーランチ定理

機械学習におけるノーフリーランチ定理(No Free Lunch theorem:「無料のランチはない」定理)とは、あらゆる問題を効率よく解けるような“万能”の「教師ありの機械学習モデル」や「探索/最適化のアルゴリズム」などは存在しない(理論上、実現不可能)、ということを主張する定理である。

"全部知ったうえで適切なのを選びなはれ"ということを伝えたいのだと思う
機械学習の軽い全体像と環境構築
デザインが好きだからJupyter NotebookではなくJupyter Labを使う

radidaniradidani

第二章

パーセプトロン、ADALINEを用いて2値分類を実装した
勾配降下法で駆動方法(?)によってバッチ勾配降下法、確率的勾配降下法、ミニバッチ勾配降下法があるらしいです
偏微分が出てきてビビる
numpyを前提とした実装で、ソースを読むときに変数の次元について考えなければならず、読むのが遅い.
そしてndarray.dotの挙動が以下の記事にある通り直感的ではない😅
(助かりました)https://qiita.com/ao_log/items/64768b67153e8fb6820b

radidaniradidani

ADALINEとパーセプトロンとの違い
正解のクラスラベルと
パーセプトロン:予測したクラスラベルと比較する
ADALINE:線形活性化関数から出力された連続値と比較する

radidaniradidani

バッチ勾配降下法と確率的勾配降下法との折半案の
ミニバッチ学習が最適では??

radidaniradidani

第三章

層化サンプリングとは入力の各クラスの比率をテストデータセットと訓練データセットで保持する手法

radidaniradidani

モデル.score(X_test, y_test)で予測と評価をしてくれる

radidaniradidani

オッズ比の対数がロジット関数でロジット関数の逆関数がロジスティックシグモイド関数ね。
なるほど、なるほど、、、

radidaniradidani

尤度、対数尤度(log-likelihood)、対数尤度をもとにしたコスト関数
yが1と0で視力検査みたいに一方を見なくするのが面白い
コストの求め方で、シグモイドの対数のマイナスで頭の中の符号がごちゃごちゃになったけどChatGPTの助けをもって理解

radidaniradidani

負の対数尤度関数を偏微分してマイナスと学習率を掛けるとADALINEの時に使った勾配降下法の更新規則と同じらしい。

radidaniradidani

なんでL2正則化の項を追加すると、ノイズが取り除かれるのか分からない

radidaniradidani

損失関数に必ず重み分のペナルティが課せられる。
そして重みの更新の時にも正則化の項の影響があるから?

radidaniradidani

サポートベクターマシン(Support Vector Machine)は線形分離が前提だが、スラック変数を用いることで誤分類を許容しながら収束することが出来る(ソフトマージン分類:soft-margin classification)
最小化する対象のCを操作することで、バイアスとバリアンスのトレードオフの調整が可能

radidaniradidani

RBFがなぜ高次元に変換しているのか分からない

radidaniradidani

触れちゃいけない空気が漂っていた。
暗黙的に無限次元の計算を行っているという理解にとどめておこう。

radidaniradidani

カーネルSVMが最強、カーネルトリック様様

radidaniradidani

決定木には情報利得があり、親ノードと子ノードの不純度の差が最大となるように分割を決めていく。
決定木は意味解釈可能性があるが、ランダムフォレストは決定木ほどのそれはない。
ブートストラップ標本のサイズは最適化できるが、訓練データセットのサイズと同じ値が最適らしい?
scikit-learnも訓練データセットのサイズと同じ値が選択される。

radidaniradidani

KNNは訓練データセットを記憶して最も近いK個から多数決を取る。
訓練に時間はかからないが、予測時間は訓練データセットや次元に比例して長くなる。
ノンパラメトリックモデルという概念があまり理解できない
どうしてカーネルSVMがノンパラメトリックモデルなんだろう?