ITエンジニアのための機械学習理論入門
- 作者: 中井悦司
- 出版社/メーカー: 技術評論社
- 発売日: 2015/10/17
- メディア: 単行本(ソフトカバー)
- この商品を含むブログ (1件) を見る
社内の読書会が終わりました。毎週1時間で全18回でした。5ヶ月弱です。一言で言うと非常に読みやすかったです。今まで何冊か機械学習の入門書を読んでいましたが、理論的なアプローチについて体系立てて、かつ、分かりやすく書かれていたと思います。同じテーマについて複数の手法を適用し、その差についても説明されているので、全体像も把握できるのがよかったです。数式も数学徒の小部屋というコラムで導出過程について説明されており、同僚の助けもあって何とか読める感じでした。以下、メモです。
- 統計学のための数学入門30講 (科学のことばとしての数学)を読んでいたおかげで数式は読めた。微積と線形代数と統計の基本的な知識(正規分布など)は知らないと読んでも面白く無いと思う。
- 話のわかりやすさを優先して、一部定義が曖昧だったり省略されていると感じる部分はあった。そういう箇所は気にせず読み飛ばして、筆者が全体として言いたいことだけ読み取るで良いと思った。何度か遭遇し、読書会のメンバーで悩んでも結論が出なかったのでw
- 改めてモデルを理解することは重要だと感じた。仕組みがわかれば向き/不向きも分かるので、とりあえずデータ集めて適当なモデルにぶち込んでとやっても精度出るわけないよなーと再認識した。既にみんなが取り組んでいるタスクでセオリーも存在し、素性と利用するモデルも分かっている場合はいいだろうけど。
- 読書会として読んでよかった。一人で読むと数式で心が挫けたり、読みやすいのでなんとなく理解した気になって読み飛ばしていたところがかなりありそうな感じだった。
- 数式はノートに写しながら導出過程を理解するのがいいかと考えていたけれど、同僚から計算結果だけを見て利用するスタンスでもいいのではと言われたのは結構衝撃だった。実際に深層学習 (機械学習プロフェッショナルシリーズ)を少しだけ読んだら計算の流れは似ていて、導出過程が分からなくとも結果となる数式の意味が分かればそれなりに読める感じだった。
- ソースコードがついているので実際に試せるのもよかった。ただ、ソースはあまり読みやすい感じではない気もした。
ということで、来週からはPython機械学習プログラミング 達人データサイエンティストによる理論と実践 (impress top gear)に取り組みます。Pythonでさくっと機械学習のスクリプトを書けるようになるといいなと思ってます。
あと、参考までに読書会のメモについて以下に貼っておきます。ノートにとっていた数式のメモは貼るのが大変なので割愛します。あと、記号は意味がわかればいいと割り切りそれっぽくメモしたのでその辺りはご了承下さい。
- 主な数学記号と基本公式
- (12)は全微分みたい
- 合成関数の偏微分法(differentiation of composite functions)
- http://next1.msi.sk.shibaura-it.ac.jp/MULTIMEDIA/calc/node49.html
- (12)は全微分みたい
- 2.1.4
- 2.1.5
- 2.2.4
- 3.1.3
- 3.2.2
- 3.2.3
- 一致性はデータ数を大きくすると真の値に近づいていくこと
- 不偏性は何度も推定を繰り返した際に、推定値の平均が真の母数に近づいていく。不偏性がある場合は、データ数が少ない場合に真の母数からはずれる可能性があるが、大きい方にはずれる場合と小さい方にはずれる場合が均等にある。
- 3.3.2
- 標本分散がずれるのは、「NS2n/σ2が自由度N-1のx2分布に従う」という事実に関係する。そもそも、標本分散S2nは正の値しか取らないため、散らばり具合が対称な形にならない
- 不偏分散はN/(N-1)倍したものなので、データの散らばり具合は対象な形にならない
- 不偏推定量というのは、あくまでも「多数の推定を繰り返した際の平均値」についての性質であって、1回の観測に基づく推定値の正確性を示すものではない
- 4.1
- パーセプトロンは誤差関数を使う手法?
- 一般的にはシグモイド関数を利用した識別手法
- https://en.wikipedia.org/wiki/Perceptron
- "In machine learning, the perceptron is an algorithm for supervised learning of binary classifiers"
- 日本語版Wikipediaは参考にしないほうがいい
- パーセプトロンは誤差関数を使う手法?
- 4.1.1
- (4.2)は普段見ている一次関数。f(x,y)=1 とかだと、それは切片(w0)
- 直線上は不正解としている?
- そもそも直線上を正解にできない手法。そうしないとその後の計算を透過的に扱えない。
- 4.1.2
- Σは判定に失敗したものだけなので、式に補足があってもいい気がする。
- 4.1.3
- 勾配ベクトルは一般的なもの?
- 「novikovの定理」→「パーセプトロンの収束性定理」で検索すると色々出てくる
- 4.2.1
- 4.30 式
- もっと効率のよい方法はあるのか?
- xとyのデータの分布に依存する?
- 正規化すれば問題ない?
- xとyのオーダーが異なる場合はどうなる?
- xとyにはバイアス項のようなものはつけられない。xとyは移動する距離が決まっている。一方cは任意なので計算する意味がありそう。
- もっと効率のよい方法はあるのか?
- w0は増え続けたりしない?
- tが + / - 両方あるので大丈夫。
- 局所解に陥ることはある?
- 収束したかどうかの判定条件に1つもエラーがないことがあるので、大域解に至るといえるのでは。
- 4.30 式
- 4.2.3
- 同次座標系
- http://detail.chiebukuro.yahoo.co.jp/qa/question_detail/q1270910567
- 要は1次元増やすことで、1つのベクトルとして扱えるってことでいいみたい。
- グラフ描画
- Grapher
- 同次座標系
- 5.1.1
- ロジスティック関数の由来は?
- http://mathworld.wolfram.com/LogisticEquation.html
- http://math.stackexchange.com/questions/357918/why-is-logistic-equation-called-logistic
- 発表者がロジスティック曲線とだけ呼んでて、そういう風に命名した理由は述べなかった。。
- https://en.wikipedia.org/wiki/Logistic_function
- ロジスティック方程式 - Wikipedia
- 例題で学ぶ微分方程式
- ロジスティック関数の由来は?
- 5.1.3
- 計算コストで比較するとどうなのか?
- 現実的にあえてパーセプトロンを使うケースはあるのか?
- 次元が多くなると逆行列あるし、大変なのでは。
- 収束速度に差はあるのは?
- ニューラルネットワークの場合は活性化関数を変えることで変わることがある。
- やってみないと分からないので。
- 必ず 1 や 0 になる?そもそもロジスティック関数は距離が離れていれば 0 や 1 になるだろうが、近ければ 0.4 や 0.6 になるのでは?
- 5.2.3
- 下回るなら反転すればいいから、実際は学習してるはずw
- 階段みたいな線になったら、それはデータを増やせば直線になるはず。
- 最初下回って、途中から上回るみたいなのがあれば、そこで線を引いて反転させれば応用としては使えそう。
- 5.3
- 誤差関数の定義
- 最小化して目的とする値を得るための関数。
- 線形性がある
- 近傍
- 近くぐらいで理解しておく方が無難。位相とかに入ると危険。
- 凸性の判定条件
- 誤差関数の定義
- 6.1
- k-meansの他にk-medoidsとかあるらしい
- http://ibisforest.org/index.php?k-medoids%E6%B3%95
- Medoidは実際にデータセットに含まれる値から採用する点が異なる模様
- Why does k-means clustering algorithm use only Euclidean distance metric? - Cross Validated
- http://stats.stackexchange.com/questions/81481/why-does-k-means-clustering-algorithm-use-only-euclidean-distance-metric
- そもそも k-means はユークリッド距離しか扱えないのかという議論もある
- ソース読んだ方がいい。
- min_dist = sum( (256 - 0) ** 2 for i in range(3) )
- k-meansの他にk-medoidsとかあるらしい
- 6.2
- k近傍法も使える場面あるのでは。
- 7.1.1
- なぜこれで上手くいくのかという説明を構築するモデルが必要
- 7.1.2
- 7.2.1
- 7.10の左辺のμkはPの添字。
- EMで極限に飛ばすとk-meansになる。PARMに書いてあるらしい。
- http://stats.stackexchange.com/questions/117874/k-means-as-a-limit-case-of-em-algorithm-for-gaussian-mixtures-with-covariances
- http://stats.stackexchange.com/questions/132995/deriving-k-means-algorithm-as-a-limit-of-expectation-maximization-for-gaussian-m
- http://www.stat.ucla.edu/~yuille/courses/Stat161-261-Spring14/LectureNote14.pdf
- 7.2.2
- 7.14 画層生成器毎の確率Pνk(X)にπを掛けているから。
- 8
- 8.1.2
- 8.1.3
- 8.1.4
- (8.50)で分かっている前提の分散に収束するというのが書いてあるので、あくまで分散は分かっている前提だった模様。
- ベイズ推定の雰囲気を理解するのが趣旨なので、分散については分かっている前提で書いてあるのかも。
- 08-bayes_normal.py
- あくまでデータ件数が少ないと事前分布に引きづられると言いたいだけで、分散を出せると言いたいわけではない。
- 実際 33 行目で真の分散を計算式に代入している。
- mu_N = (beta_true * mu_ML + beta_0 * mu_0 / n) / (beta_true + beta_0 / n)
- (8.50)で分かっている前提の分散に収束するというのが書いてあるので、あくまで分散は分かっている前提だった模様。
- 8.2.1
- (8.65) は右辺がない場合は最小二乗法とおなじになる。そして右辺がある場合は最小化するために左辺のf(Xn)の中のWも含めて小さくなるという意味。要はαの大きさでWの大きさを調整できるということが言いたい。
- 8.2.2
- (8.69)はどうやって出す?
- 8.2.3
- 図 8.9
- オーバーフィッティングはM=9、α-1=10000でも図3.5のM=9のようになっていないという意味。
- 観測点から離れるほど分散が大きくなっていることが分かる。
- 図 8.10
- Wを4つ適当に選出しても、データ数が多くなれば分散が小さくなるので問題ない事がわかる。
- 8.9 はあくまでも観測データの話。
- 図 8.9