【勉強メモ編】kaggleに登録したはいいが、手を動かしはじめられない人が見るページ

こちらの記事の続きです。

kaggleに登録したはいいが、手を動かしはじめられない人が見るページ
何度kaggleをやろうと思い立ったことか! ただ、一人ではどうにも進めるのにかなりパワーが必要になってしまう。 そんな時、あなたは...

不明点(+追加で設定)が出てきたのでメモがてら調べました。(つまりはメモです!)

静的解析する!

vimのプラグインとか改めて全然知らなかったんだなと思いました。

静的解析はいれなければいれようと何度も動画出てくるので、探してみました!

というか、Neovimを今頃はじめて知るとは、結構ヤバイっぽいです。

dein.vim

NeoBundleというものを知る前に時代が終わっていた…

dein.vimを入れる。

コピペするコードのpathを変更する必要はありますが、それ以外はハマらない。(というか、そんなところにハマるのは私ぐらいだ…)

pep8,mccabe,pyflakes

この辺りのライブラリで静的解析を入れることができた!

インストールは以下のサイトを参考に。

NeoBundleになっているますが、そこはdein.vimに置き換えてください!

私のは最終的にこうなりました。

deoplete-jedi

コード打ってる途中で候補を出してくれる。

Please install Jedi if you want to use jedi-vim.
The error was: No module named jedi

エラー!

そこで、vimanacondaのpythonを読ませるように、この記事のpython.vimanaconda.pthを追加しました!

Vim: Caught deadly signal ABRT
Vim: Finished.
Abort trap: 6

ぐぬぅ。

.vimrcにこれをはる。

とにかく何のエラーもでなくなってかつ、anacondaのpythonを読んでいる。のに!

ハマりまくった末に、エラーも全部出ないようになったんですが、ダメだ!

なぜかjediが動いてくれない…

GCPのubuntuでやってみよう…

画面を分割する!

超基本的なことですが、私は今までタブを使っていました。

なんならタブでもいいんじゃないかと思っていますが、同じ画面で見れるように画面分割を身に着けましょう。(身についていないのは私ぐらいかもしれませんが。)

普通にvim画面から:spで上下に分割、:vspで左右に分割できます!簡単!

また画面間移動はvimを使っている人ならば超簡単。

いつも、hjklあたりを使って、コード内を移動していると思います。

ctrl + wをはじめに押すことで、それをそのまま使えます。

例えば、下画面に移動したいときは、ctrl + wを押してからjを押します!

predictとpredict_probaの違い!

ビデオ内で、predictを使おうとしてpredict_probaを使ったケースがあったかと思うのですが、これは何故か気になったので調べてみました。

学習したパラメータを使って、新しいデータの処理をおこなう。
obj.predict(new_data)
タスクがClassificationの場合、定量化された値を返すために、
obj.predict_proba(new_data)

classificationのときのみ、predict_probaを使えばよさそうですね。

cross validation!

何度も聞く言葉ですが、忘れガチ…なのでメモ。

交差検証(交差確認)(こうさけんしょう、英: Cross-validation)とは、統計学において標本データを分割し、その一部をまず解析して、残る部分でその解析のテストを行い、解析自身の妥当性の検証・確認に当てる手法を指す。

[blog_card url=”https://ja.wikipedia.org/wiki/%E4%BA%A4%E5%B7%AE%E6%A4%9C%E8%A8%BC”]

汎化性能!

なんとなく漢字から予想できそうですが、念の為。

[blog_card url=”https://tjo.hatenablog.com/entry/2016/04/14/190000″]

「学習モデルへの当てはまりは必ずしも良くないものの未知データ(テストデータ)への当てはまりが良い」ことを「汎化性能(汎化能力:generalization)」と呼びます。

xgboost!

XGBoostの主な特徴を以下に纏めました.時間のない方など,ここだけ見て頂ければと思います.
・ XGBoostとは,Gradient BoostingとRandom Forestsを組み合わせたアンサンブル学習である
・ 高いスケーリング性を持つend-to-endなtree boostingシステムをもつ
・ sparseなデータ(値が欠損,0が多い,one-hot encodingなどの特殊な処理を施したなど)について,予め分岐の方向を決めるアルゴリズムを導入している
・ CPU外(out-of-core)での学習が可能であり,計算速度が高速化されている
・ 複数のパラメータ調整によるチューニングが必要であり,最適化はグリッドサーチやCross Validationを複数行う
・ 汎化能力を上げるために,学習率(XGBoostパッケージではパラメータeta)を下げていき,その都度最適化を行う

hyperopt(ハイパーオプト)!

機械学習でモデルを作成する際、hyper-parameterのチューニングが必要になります。
gridサーチで徹底的に調べることができればいいのですが、DNNのようにパラメータ数が多くなると、計算量がとんでもないことになります。
ランダムサーチでパラメータの探索を行えば、計算量を少なくすることは可能ですが、最適なパラメータを見つける確率は低くなります。
そこで、効率よく、良さげなパラメータを探索していく方法に、Sequential Model-based Global Optimization(SMBO)というものがあります。
pythonには、SMBOを利用するためのライブラリであるhyperoptというものがあります(kagglerがよく利用しているらしい・・・)。

こちらはペーパーがありますが、実際のkagglerの方々(神々)はどれぐらいペーパーを読んで実装しているのか気になりますね。

one hot encoding!

記事によると、

one hot encoding

ダミー変数みたいな感じですかね。

発言メモ!

少しでもtkmさんに食らいついていこうと、ためになりそうな発言をメモしておきました。

汎化性能を測って、リーダーボードのスコアリングと同じようにやる。手元cvとリーダーボードcvが合うように適正にcross_validation_splitを切るというのも大事。手元cvスコアとリーダーボードが一致しなかった時はどこかに偏りが生じているので原因をみつける。それがkaggle力。

cvとはcross validationの略っぽいのですが、どうやって切ればいいんでしょうかね…?

二値分類なので、loglossもみていく

こちらのサイトに見事にまとめてくれていました!

logのレベルで標準出力を見たときにパッとわかるようにしておくの結構大事

φ(・_・”)メモメモ.

今回はパラメーター調整しかしないが、本当はfeature engineeringが大切。とにかくxgboostをかけとけばいいいみたいになっている。feature engineeringに時間の9割を割くべき。パラメーターサーチをいつまでもやっていてはいけない。パラメーターサーチは流しておけばいい。

φ(・_・”)メモメモ.

関数の引数を**にすることで、dictをkeyword argsとして渡せる

これは、pythonの基本っぽいところですが、個人的にφ(・_・”)メモメモ.

GridSearchは完全並列できるの並列しちゃうとよい

φ(・_・”)メモメモ.

learning_rateははじめは高めで(0.1固定で)、特徴を考えてsubmit直前で0.01とかで試すといいです。なぜなら、0.01とかだと一つの予測値を作るのにかなり時間がかかってしまいます。

メモ…

ユーザーの情報、アイテムの情報、ユーザー x アイテムの情報で俯瞰的に眺める。Big queryは個人でも使えるので便利。

メ…

ノートブックは使わずに、big queryでデータを眺めて、見たいものだけノートブックを少し使う

その他!

結構最近更新されていそうなkaggleの解説サイト!

こんにちは。未熟者です。

という挨拶が絶妙でした。

日本語でコミュニケーションのできる、ハイレベルなデータサイエンティストは、まさに希少人材。DeNAなどによると、Kaggleマスターと呼ばれるレベルは、日本に数十人。グランドマスターに至っては数人だという。

みなさん、がんばりましょう!

何をやるか全体像が欲しいところですが…

一番重要なのは、前処理でした。他のコンペは違うケースもあると思いますが、メダルをとるくらいのレベルになってくると予測モデルそのものより前処理をどれだけこなせるかが順位に響いてくると思います。

φ(・_・”)メモメモ.

数学も勉強したいのですが、ロードマップが欲しいところです…

こういうのは有り難いです!

また時間がある時にtkmさんのこちらの動画も見て進めていきたいなと思っています!

コメントを残す

メールアドレスが公開されることはありません。 * が付いている欄は必須項目です