DeepLearning講座(第8回)を受けてきたよ
7/20(金)にDeepLearning講座(第8回)を受けて来ました。
この講座もついに大詰め。少しは賢くなれたかしら??
コンテンツは以下の通りでした。
- 7/14でやった問題の解説
- 生成モデル、識別モデル
7/14でやった問題の解説
7/14にイベントがあり、そこでチームごとのコンペが行われました。コンペの解説を行って下さいました。
お題
お題は「教師用に用意されたワインのデータをもとに、ワインが高級かそうでないかを予測する」というものでした。
データは↓にあるので、ご参考まで。
どうやって自分は分析したか
限られた時間でしたが、自分なりに解いてみました。
問題を見ると、これは「分類問題」で「機械学習を使う」ということはすぐにわかったので、RandomForestClassifierやGradientBoostingClassifierを使うのかなと思いました。そして、欠損があれば補完し(実際にはなかった)、パラメータの絞り込みを行いました。(実際には必要なかったかも)
教師用データから20%を検証用データとして切り出し、精度を確認したところRandomForestClassifierを使った時が一番精度が高かったので、それを採用しました。一応出力出来たところで、タイムアップ。「パラメータチューニングできてないなー、グループで話し合うかー」なんて思っていたのですが、なんと。。。
誰もできていませんでした(^_^;)
発表者を決めるときも私に救いを求める目が。。。なんの改善もできずに発表する羽目になりました。。(結果は・・・でした。なんとかaccuracyが90%超えててよかった。。。)
オリジナルのコードはこちら
講師の方からの解説
ありがたいことに、最初の時間を使って解説していただきました。
データの性質を見る
- 順序などは数値と質が違うので要注意
- データの分布に外れ値があるか
データの件数を見る
- データの数が少ないので、DeepLearningは使えない
- XGBoostやLightGBMといったライブラリを使うのが良さそう。(Logistic回帰を素直に使うだけでもaccuracy88%の精度は出る)
パラメーターチューニング
- ランダムサーチでチューニングする
これらを踏まえたコードは、、、書いてみます。
生成モデルと識別モデル
ここからが本題。
識別モデル (今までやってきたこと)
データxがクラスyに属する確率P(y|x)をモデル化し、確率が一番高いものを求める。
(一番確率の高そうなクラスyに分類する)
生成モデル
データxがクラスyに属する確率P(y|x)をモデル化せずに、ベイズの定理を用いて以下のように書き直す。
P(y|x) = (P(x|y)P(y) ) / P(x)
生成モデルは「データが何かの分布から生成されているのかを考えて、その分布を推定する」もの。
DeepLearningにおける生成モデル
DeepLearningにおける生成モデルには2種類あります。
- VAE
- GAN
VAEの方が比較的学習しやすいですが、最近の主流はGANです。
VAE (Variational Auto Encoder)
学習データを与えると、その学習データに似ているデータを生成できるようになる。
Auto Encoderの仕組み
隠れ層だけニューロンが少ないというのが特徴です。情報が少なくなっているのに入力が復元できているというのは、優秀な次元削減ができているということです。
うーん、間に合わなかった。
とりあえず公開だけしておきまーす。