FC2ブログ

子供の落書き帳 Remix

15/4/13:ひと月に一度更新するブログになってしまっている

スポンサーサイト
--/--/--(--) --:--:--

上記の広告は1ヶ月以上更新のないブログに表示されています。
新しい記事を書く事で広告が消せます。
  1. --/--/--(--) --:--:--|
  2. スポンサー広告

kaggle初心者はカーネルを読むだけでも勉強になったよ
2018/06/17(日) 20:59:31

はじめに



機械学習を少しずつ勉強している。
その中で先月kaggleに登録して、そこから少しずつkernelを写して書いている。
「このやり方、結構いいんじゃないか」と思ったので、kaggleのkernelの良さについて書く。

対象読者



「kaggle登録はしたけどどうすればいいかよく分からん」
「いきなり問題を解けといったって、いい解法が思いつかない」
くらいの人を想定しています。
kaggleのコンペティションにガンガン出て順位を競っているような人は対象外です。

Kernelとは何か?



少し分かりにくいところにあるが、kaggle公式では以下のように説明されている。
Titanic: Machine Learning from Disaster | Kaggle

What are kernels?
Kaggle Kernels is a cloud computational environment that enables reproducible and collaborative analysis. Kernels supports scripts in R and Python, Jupyter Notebooks, and RMarkdown reports.

拙訳:
kernelとは何ですか?
Kaggle Kernelは、クラウド上の計算環境であり、再現性のある共同の解析ができます。RとPythonのスクリプト、Jupyter Notebook、そしてRMarkdown reportをサポートしています。

pythonに限れば、kaggle上でJupyter Notebook形式でコードを書いて実行することができる。
また、ここに他の参加者がソースコードを投稿・公開している。
上手い人のコードを読んで参考にすることができるというわけだ。

このkernelを見て学習をするメリットは以下のとおりである。

利点1:Pythonの各種ライブラリの実用的な使い方がわかる



俺自身はPythonを普段あまり使っていないので、文法や関数が分からないこともある。
たまにRubyの書き方をしてしまったりするし。
そもそもライブラリをどう使うか、どういったことが可能なのか、という知識があまりない。
機械学習をやっていく上では、Numpy・Pandas・Matplotlibなどのライブラリは避けて通れない。
機械学習の勉強を進めるときは素のpythonだけではなく、これらのライブラリも使えるようにならなければいけない。何種類かのライブラリの知識も必要になるという点は、ちょっとハードルが高いと思う。

kaernel上で、実際で使われているのを見ることで
「pandasってこういうことができるんだな」「numpyのこの関数ってこう使うのか」と分かる。
もちろんライブラリの公式ドキュメントを順番に見ても使い方を学ぶことはできると思うが、
しかしそれだと滅多に使わないものまで出てきてしまう。
実践に即した知識を習得できるのが良い点かと思う。

利点2:問題の解き方がわかる


kaggleでは機械学習のコンペティションが開催されている。
しかし「はい、これが問題です、解いてください」と言われても、初心者は解けないわけだ。
どういう解法でどういうパラメータを設定して解けば上手くいくかなんて分からないからである。

そしてある特定のアルゴリズムで解いてみようとしても、コードが上手く動かなくてエラーが出たりして、
「え、どこで間違えたんだ、分からない、困った」ということになる。
「解法が分からなくて詰む」「解法が分かってもコードが書けなくて詰む」の二重苦である。

SIGNATE(旧名:DeepAnalytics)というkaggleの日本語版のようなサイトがあり、同様にコンペティションが開催されている。
俺は3月に、初めてコンペティションに参加して
「取りあえず思いついた解法で解いて提出してみるか、きっと酷いスコアだろうけど」と思ってゼロから書き始め、
数多のエラーを喰らった末に疲労困憊しながら提出したが、予想していた以上に酷いスコアだった。
もちろん手を動かしたぶんの実力がついたとは思うが、しかし技術力をつける上では遠回りだった。

そこでkernelの出番である。

・(Jupyter Notebook形式の場合は)手法の説明+コードがある
・ちゃんと動くコードなので、エラーにハマらずに済む
・自分のkernelにコピー(fork)して動かせる
・そこから少しずつ書き換えてみて、どうなるかな、と試してみることも可能
といった利点がある。

なお、機械学習の初心者ではなく実力者であっても、
素晴らしく上手く解ける方法を最初から分かっているとは限らないので、
kernelに掲載された解法を参考にしているようだ。
以下の記事を参照。
Kaggleを取り掛かるまでにやったこととと、モチベーションの維持のために必要だったこと - にほんごのれんしゅう

どのkernelから見れば良いの?



コンペティションを決めていて、それに関する良い感じのkernelを探す場合は
ひとまずはVote数でソートすれば良さそうだ。
「このkerelは参考になった」と思った人がVote(投票)するので、Vote数の順にすれば人気のあるkernelを見られる。
(下の図の赤い四角の部分)

20180616_kaggle-kernels.png

投票数の多く人気のあるkernelの中でもどれを選ぶか、という点については、
タイトルやタグ名から以下のことが読み取れるので、それを参考に決めれば良いだろう。

・EDA:「Exploratory Data Analysis」の略、日本語に訳すと「探索的データ解析」となる。分かりやすくいうと「問題を解くより前に、入力として与えられたデータがどのようなものか、表やグラフに可視化しながら観察してみよう」くらいのニュアンスである。したがってこのタイトル/タグがある場合、問題そのものを解いていない場合が多い。
・解法名:「特定の解法を使って解いてるコードを見たいんだよなぁ」という場合にはそのアルゴリズムの名前があるものを選べばよい。
・スコア:そのkernelのコードを実行したときのスコアを表す。例えば上の図で上から2番目のkernelには「0.735」というタグが付いているので、submitすればそのスコアになるはずである。



参考・関連



kaggle初心者に向いている、kaggle内のコンテンツ、という切り口で考えると

Titanic コンペティションのtutorialをやる
Learn(機械学習やPandasやRなどの教材)をやる
あたりも良いだろう。

それでは。
  1. 2018/06/17(日) 20:59:31|
  2. プログラミング
  3. | トラックバック:0
  4. | コメント:0

コメント


管理者にだけ表示を許可する

トラックバック

トラックバック URL
http://luvtome.blog5.fc2.com/tb.php/644-f37c8d1c
この記事にトラックバックする(FC2ブログユーザー)

FC2Ad

上記広告は1ヶ月以上更新のないブログに表示されています。新しい記事を書くことで広告を消せます。