機械学習の素人が、コンペで入賞するまで
はじめまして。pizza3900と申します。
先日、SIGNATEの機械学習コンペで、入賞することができました。
私は、機械学習ナンモワカラン状態から、独学で機械学習について学んできました。このような経験は、もしかしたら比較的珍しいのかもしれない、と最近感じました。
そこで機械学習に興味がある方に向けて、これまで行ってきたことを紹介したいと思います。
雑多なメモですが、一部でも参考になれば幸いです。
0. 最初のスペック
機械学習のみならず、Python等のプログラミング経験もありませんでした。
1. 機械学習に興味を持つ期
データの見えざる手
機械学習に興味を持つきっかけとなったのは、「データの見えざる手」を読んだことでした。
データを活用することで、人が思いつかないような売上アップ方法が判明する、などの内容です。例えば、店員さんの配置と売り上げのデータ解析結果をもとに、一見不可解な配置にしなおすことで、実際に売り上げがアップした、などです。
人工知能は人間を超えるか
そしてデータを解析する手法について興味を持つ中で、機械学習/DeepLearningがちらほら現れてきました。 そして、松尾先生の「人工知能は人間を超えるか」を読みました。
これまで人間が「こういう処理を行う」と決めて実装していたことを、データから抽出し自動的に決めるという、機械学習の概要を把握することができました。もしかすると、「今までのルールベースを、よしなに自動抽出してくれるの?めっちゃ楽じゃん!」といったように、わたしのズボラ精神が共鳴したのかもしれません。
2. 機械学習を知る期
ゼロから作るDeepLearning
上述のように、機械学習に興味を持ったので、今度は中身を知りたくなりました。
ネットのレビューを参考にすると、「ゼロから作るDeepLearning」という本がわかりやすそうでした。
この本は、中身を理解するために、ライブラリを使わずDeepLearningを実装するという内容です。その当時はPythonが全くわからなかったのですが、実装以外のDeepLearningの説明だけでもためになるかと思い、読み進めました。
結果として、個人的にはこの本がかなり刺さりました。機械学習のアルゴリズムを全く知らない状態からでも読み進めることができたのが、非常に良かったです。
JDLA G検定
そんなこんなで本を読み続けているうちに、JDLAという協会が試験を実施していることを知りました。
ここまでインプットばかりだったので、知識を整理するのも兼ねて、試験を受けてみようと考えました。
受けたのはG検定であり、実装面の知識はほぼ問われなかったのですが、全般的な知識を振り返るのには役立ちました。
Pythonを学ぶ
やっとこのタイミングでPythonを勉強しました。使ったのはUdemyでした。基本文法の講座ではなく、いきなりライブラリ(Numpy, pandas)の使い方の講座でした。
ただそのおかげで、そのままデータ解析に使ってみるなど、講座受講後もPythonを使っていくことができたので、結果的に良かったかと思います。
機械学習コンペの存在を知ったのは、このあたりです。この時期から、最終的にはコンペに参加してみたいと考えていました。
Corseraを受講する
「ゼロから作るDeepLearning」は非常にためになったのですが、内容としては機械学習分野の一部分(ニューラルネット、画像処理)でした。
機械学習全般知識を得たくて、よい本や講座はないかと探している中で見つかったのが、Courseraの機械学習講座です。
この講座は受講記が数多くあり、初心者でもわかりやすいとのことだったので、受けてみることにしました。なんたって無料でしたし。
いきなりDeepLearningから入った人間だったのですが、この講座で機械学習の手法や、予測精度の考え方など、基礎を固めることができたと感じました。宿題がちょくちょくあるため、本より思いかもしれませんが、私のようなバックボーンを持たない人には有用な講座だと思います。
3. コンペ参加する期
勉強しようとすれば、いくらでも勉強することはありました。
ただ、ここらで早速コンペをやってみよう!と考えました。
その時開催していたコンペが、野球の配球予測コンペであり、題材として興味があったのも参加に踏み切ったきっかけです。
Kaggleのチュートリアル
コンペ参加に当たり一つネックだったのは、上記野球コンペは表形式のデータ(テーブルデータ)のコンペでした。それまで、せいぜい画像系の一部を勉強してきただけで、テーブルデータの扱いと学習については未知数でした。
そこで、テーブルデータの扱い方と、コンペでの実際の流れ(配布されたデータから学習し、予測実行、ファイル提出)を知るために、「Kaggleのチュートリアル」を読みました。
このチュートリアルのおかげで、テーブルデータの学習は初でしたが、コンペに参加することができました。そして一度コンペに参加し1回でも予測結果を提出すれば、順位が表示されます。すると、順位を上げたいとモチベーションが湧き、コンペにのめり込んでいきました。
開催されるコンペにとにかく参加
1回目のコンペは、銀メダルで幕を閉じました。自分としては、初コンペで銀メダルに入れたことが嬉しく、もっと極めたいと思うようになりました。
そこで、とにかくまずは、コンペにどんどん参加しようと決めました。そのため、コンペ参加時点で、どんな解法があるのか検討もつかないまま、参加していることもありました。
ただそこで臆することなく、参加していけたのが良かったと思います。というより、自分は素人だと認識していたので、「知らなくて当たり前。やってみながら勉強する。」という開き直りスタンスでした。このスタンスのおかげで、いろいろなライブラリの使い方や機械学習手法を知ることができたと感じています。
コンペとしては、例えば画像系のコンペに挑戦したり、
テーブルデータに再挑戦したりしていました。
初入賞
そして冒頭の通り、あるコンペで入賞できました。
手法はどの参加者も似ており、またスコアもかなり接戦でした。今回入賞できたのは、パラメータがうまく噛み合ったなど、運の要素が強いと考えています。もう一回他のコンペで入賞しろと言われたら、できる自信が全くありません。
今後もコンペに参加すると思うので、入賞目指して取り組みたいと思います。
おわりに_機械学習が気になる方へ
つらつらと経緯を書いてみました。特に機械学習に興味を持っているが、まだ始めていない方に向けて、最後に個人的な思いを書いておこうと思います。
興味がある方は、まずとにかく始めてみるのが良いかと思います。私も、何かを目指していたわけではなく、とりあえず始めてみた結果、今に至っています。
学生時代や仕事で携わってない分野というのは、かなりハードルが高そうに感じてしまいます。特に最近は、ネットで強い人がすぐ見つかるので、しり込みしやすくなっているように思います。
確かに、いきなり一晩で強い人と並ぶことはできません。一方で、機械学習に関する書籍も多く出てきており、始めやすい環境が揃っていると思います。
そして、自分が決められるのは、"今、何をするか" だけだと考えています。今できることを、1つ1つ進めるのみです。
仕事ではないので、途中でやめるのも簡単です。ゲームや漫画と同様に、途中でやめても誰も何も言いません。逆に、転職でアピールすることをモチベーションにすることもできます。例えばSIGNATEであれば、転職エージェントのサービスも運営していて、コンペの結果をアピールできるようです。
まずは1歩だけ、進んでみませんか?
私の経験が、何かを始めるきっかけになってもらえれば幸いです:-)
pizza3900