はじめに
だんないよ、nikkieです。
#stapyでおすすめされた『Python機械学習プログラミング』の読書会があったので、参加してきました。
機械学習に業務で取り組んでいるのですが、独学の限界を感じ、
ノウハウを持っている社外の人の話を聞きに行くというアプローチで勉強しています。
勉強会の概要
Python機械学習プログラミング勉強会#5 - connpass
対象の4章を読み進めて参加しました。
正則化のところはとっつきにくかったので予習では飛ばしました。
参加者の中で機械学習歴は一番浅いと思うので、
全部わからなくても何か一つは持ち帰ろうという思いで参加していました。
初回や2回目は倍率が高かったのですが、今回は偶然にも参加できました。
統計学にバックグラウンドがある人が多いコミュニティという印象です。
原著者による公開Notebook:
4章読書メモ
pandasは経験がありますが、scikit-learnは触ったことがありません。
業務に活かせるかもと思った事項を書き出します。
予習時につけた付箋と一致するところが多かったです。
- この本では欠損値=欠測値
- pandas::dropna
いずれかの列に欠損値を含む行を削除する(axis=0が指定されている)
axis=1を指定するといずれかの行に欠損値を含む列を削除する - 欠損値を抜くことはデータが失われることでもある。そこで抜くのではなく補完する
- sklearn::Imputer
欠損値補完(axis=0で列方向、axis=1で行方向)
※統計学では平均値補完は避けるべきと言われているとのこと。
(感想:機械学習は実用に堪えるものができればOKというスタンスらしい。
平均値補完してもうまくいったらOKという感じなのではなかろうか?
もっと言えば統計的な厳密さは追求していないのでは?) - pandas::map
順序変数(str)をmapに渡したdictで整数に変換する。
順序変数の例:服のサイズ M < L < XLという関係 M=0, L=1, XL=2
逆のdictを渡すことで、整数から文字列に戻せる。
クラスラベルを整数に変換するのにも使う - sklearn::LabelEncoder
クラスラベルを整数に変換するのに使える - sklearn::OnehotEncoder
色(red, green, blue)について0, 1, 2と置き換えると、実際にはない「順序」を想定して学習してしまう
red=(1, 0, 0), green=(0, 1, 0), blue=(0, 0, 1)のように置き換える - pandas::get_dummies
上述のone-hotエンコーディングをしてくれる - sklearn::train_test_split
トレーニングデータとテストデータへの分割 - 正規化 min-maxスケーリング(0〜1の範囲)
標準化 平均0、標準偏差1
※正規化は外れ値の影響を受けやすい(例:外れ値が1になり、それ以外のデータが0の付近に集中) - sklearn::StandardScaler
標準化のクラス - (再挑戦予定)L2正則化とL1正則化
- トレーニングデータとテストデータとでAccurancyが同じくらいなので過学習を抑制したといえる
- ランダムフォレストを使って特徴量の重要度を測定できる
終わりに
機械学習の知識を付けるには、この本を読み切るのが一番と考えているので
引き続き参加していきます。
scikit-learnは触ってみたいです。