ありまっくすのへっぽこ日記

アラフォーでへっぽこエンジニアをしております。へっぽこなりに頑張っています。

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)

 

生成モデルは「データが何かの分布から生成されているのかを考えて、その分布を推定する」もの。

 

f:id:ari_max:20180803070558p:plain

 DeepLearningにおける生成モデル

 DeepLearningにおける生成モデルには2種類あります。

  • VAE
  • GAN

VAEの方が比較的学習しやすいですが、最近の主流はGANです。

VAE (Variational Auto Encoder)

学習データを与えると、その学習データに似ているデータを生成できるようになる。

Auto Encoderの仕組み

隠れ層だけニューロンが少ないというのが特徴です。情報が少なくなっているのに入力が復元できているというのは、優秀な次元削減ができているということです。

f:id:ari_max:20180803074203p:plain

 

 

 うーん、間に合わなかった。

とりあえず公開だけしておきまーす。