機械学習ことはじめ（オススメ教材・情報）

# はじめに

<div align="center">
<img width="360" alt="d7f2b1da-908e-82a9-5e21-ed8799e7ec60.png" src="https://qiita-image-store.s3.amazonaws.com/0/108483/b54a62f4-93e9-ae0f-ca99-e7ee0c17e1e8.png">
</div>

## 何を書くのか
AI技術の中でも非常に重要な「機械学習」の基本を勉強するときの考え方、オススメの教材、情報などのメモとして、自分のここ半年の経験をざっくりまとめました。

これから機械学習の勉強を始めます、という方の参考に少しでもなれば嬉しいです。

# 機械学習の基本を勉強する際の考え方
機械学習の勉強を始める理由は、人によって様々だと思います。
世間はAIで大変騒がくなって参りましたので、経営層から突然AIのことを調べろと言われた可哀想な事務系の担当者もいるでしょう。
既にやりたいこと、作りたいアプリケーションが決まっていて、そのために機械学習を使いたい（けど開発経験はない）という人もいるでしょうし、統計は詳しいけどプログラミングは初心者、という人もいると思います。

以下の記述は、工学系の大学院を出た私(半分研究開発職/半分事務職、半分スタッフ/半分マネージャー)が、業務と直接の関係は無く、概ね趣味で機械学習を勉強した時の記録です。

- プログラミング経験はそれなりにあり
- 統計も数学も基本的なことは理解しているが
- 機械学習についてはほぼ初めて
- 理学系よりは工学系マインドだが、原理もアルゴリズムも背景の数学もそれなりに理解してスッキリしたい性格

というバージョンでお送りします。

機械学習 中・上級者の皆様はこの初学者の歩みを生暖かく見守りつつ、懐かしい気持ちになったり、アドバイスなど頂けると嬉しいです。
周囲に気軽に相談できる上級者がいないので。。

# オススメ教材
まずはとっても有名な、[CourseraのMachine Learningの講義](https://www.coursera.org/learn/machine-learning/)を受けることをオススメします。
<img width="400" alt="a0a59a1c-bf54-5ccd-3586-248a5c76c307.png" src="https://qiita-image-store.s3.amazonaws.com/0/108483/42d4723e-4062-800a-d61a-015ac9d22edd.png">


真面目に取り組めば、3ヶ月で完結できる内容です。
ただ、プログラミングの経験があって、あと行列計算にそれなりに慣れてないとスケジュール通りにこなすのは大変かもしれません。

私はiPadのCourseraアプリに授業の動画をダウンロードしておき、通勤電車の中や歩いてる時、お昼休み、お風呂に入ってる時などに動画を観ていました。

プログラミングの宿題もあるのですが、これは奥さんと子供が寝た後、夜中にやってました。週末にも時間が取れればやってました。
過去にMATLABを使った開発経験があったので、Octaveはスムーズに使えました。
（しかし、スマートな行列演算のやり方についてだけでもこのコースから学ぶことは多かったです。）

また、このようなMOOCsは続けるのが一番大変なので、社内の有志を募って、隔週くらいでお互いに進捗報告をする勉強会を開催しながら進めるようにしました。
とは言え実際は、別チーム所属の先輩ひとりと一緒に進めることになりましたが、1人でやるのと2人でやるのは全然違います。
ひとりで進めるのは精神的に辛いものがあると思います。

## Coursera後
松尾先生の[「人工知能は人間を超えるか」](https://www.amazon.co.jp/dp/4040800206?tag=lucas29liao-22&camp=243&creative=1615&linkCode=as1&creativeASIN=4040800206&adid=01X9RK06A2M6XFMPKAPV&)を読むと、機械学習をとりまくトピックが広く把握できます。

![41awNvZKJNL._SX354_BO1,204,203,200_.jpg](https://qiita-image-store.s3.amazonaws.com/0/108483/10893cc9-10d1-0e41-e81f-1bb843c829c1.jpeg)


読みやすい本なのでCourseraを完了する前に読んでももちろんOKですが、Coursera完了後に読むとかなり細かな部分まで内容を把握することができるでしょう。
Courseraで出てこないアルゴリズムの紹介があることにも気づけますし、Andrew先生と松尾先生とで説明に相違がある箇所にも気がつけて楽しいです。


![41QWM8+Tb-L.jpg](https://qiita-image-store.s3.amazonaws.com/0/108483/d3f97bf2-f2e6-0aff-b9b7-a13ece892354.jpeg)
[データ・アナリティクス 3.0](https://www.amazon.co.jp/dp/B00K0Z2YI6?tag=lucas29liao-22&camp=243&creative=1615&linkCode=as1&creativeASIN=B00K0Z2YI6&adid=1WTVKCF445KQP8FQPTMC&)
なども読み物として楽しめました。

また、Courseraの宿題を一通り終えると、それがそのまま手元で使えるアセットになります。
私はこれを使って、自分の住んでいる部屋の価格を、同じマンションのその他の部屋の売買成約価格を教師データに、各種条件(階数、面積、部屋数、成約時期など)から予測したりしてみました。

## 次に読んだ本
![61kYbes17OL._SX352_BO1,204,203,200_.jpg](https://qiita-image-store.s3.amazonaws.com/0/108483/fa7fd445-fc46-aebc-5692-8810ef711da2.jpeg)
次に、BookLab Tokyoで買った[「データサイエンティスト養成読本 機械学習入門編」](https://www.amazon.co.jp/dp/4774176311?tag=lucas29liao-22&camp=243&creative=1615&linkCode=as1&creativeASIN=4774176311&adid=074K7FBHYHQA1N64ECFW&)を読みました。

無料コーヒーに釣られて、この本がどこかの記事でオススメされていたなーと思い出し勢いで買ったものの、振り返ってみるとCourseraを読んだ直後に読むには最適な本でした。
本の中では各種アルゴリズムの説明はかなりあっさりしているので、何の知識もない状態で読んでも理解に時間がかかったと思います。しかしCourseraを受けた後に読むと基本的なことがわかっているので応用的な情報に集中することができました。

また、この本には実際にRやPythonで書いたサンプルコードも登場します。
アルゴリズムを理解するためにはCourseraの宿題でスクラッチでコードを書くことは役に立ちましたが、簡単に機械学習を使ってごにょごにょするなら既にあるライブラリを用いた方が簡単です。
この本には各種ライブラリの使い方も載っているので、Coursera後の学習セットアップを進めるにあたってとっても使いやすかったです。

## Pythonで機械学習
次に学習を進めるために、私はPythonを使うことにしました。

「プログラミングに抵抗があって、Courseraも宿題は飛ばして動画だけ観た」みたいな人はGUIツールを使うのが早いもしれませんが、プログラミングに抵抗がない場合はPythonかRが良いと思います。
私はプログラミング経験がそれなりにあるため、汎用的なスクリプト言語であるPythonを選びました。プログラミングの経験があまりない場合は統計計算に特化したRの方が使いやすいかもしれません。

Pythonで機械学習の勉強を進めるためには、scikit-learn, Numpy, Scipy, matplotlibといった各種ライブラリを使うのが一般的です。
ここでこれらの基本を勉強しました。

まずは
![51Y8KNTSc1L._SX389_BO1,204,203,200_.jpg](https://qiita-image-store.s3.amazonaws.com/0/108483/8b502a8d-927f-7bf5-9cc0-d1b0f7432ff6.jpeg)
[Pythonによるデータ分析入門](https://www.amazon.co.jp/dp/4873116554?tag=lucas29liao-22&camp=243&creative=1615&linkCode=as1&creativeASIN=4873116554&adid=1M8GQ5T2Q29ZBBZ9YRQF&)
を、そして

![51YzbphP0JL._SX390_BO1,204,203,200_.jpg](https://qiita-image-store.s3.amazonaws.com/0/108483/d5cf95b8-1ad4-1a9e-c3b5-8190d4794614.jpeg)
[Python機械学習プログラミング](https://www.amazon.co.jp/dp/4844380605?tag=lucas29liao-22&camp=243&creative=1615&linkCode=as1&creativeASIN=4844380605&adid=1PHJ4QGAEKH6FEQR7Z56&)
を読みました。

前者の本はデータの整形等にページが多く割かれています。
実際の開発の際には、プログラミング作業の大半はデータのロード、クリーニング、変換、再配置といった、データの準備に費やされます。
ありがたいことにここで紹介されているpandasとPythonの標準ライブラリを併せることで、高度で柔軟なデータ操作ができます。

後者の本はscikit-learnを用いた豊富なコード例が参考になりました。
他の本で紹介されていないアルゴリズムにも出会うことができ、初歩段階でも機械学習の奥深さを感じることができました。

これらの本は年末年始の休暇を使って読みました。
オーストラリアやバンコクへの旅行中でしたが、夜などに時間をとってざっくりと消化し、あまり細かな部分まで丁寧に読むことはあえてしませんでした。
それよりも、開発の全貌と、必要な知識の範囲を把握しておきたかったからです。
だいたい1日に100pくらいのペースで、気になったところにメモを取りながら読みました。

それから、Courseraの宿題をPythonでやり直すと言うことをしました。
[Coursera Machine Learningの課題をPythonで: ex1](http://qiita.com/nokomitch/items/a756e276cdb8c3f5035d) に続く記事など、参考にさせて頂きました。

学習環境にはJupyter Notebookを使いました。
使いやすさに感動。。

# 前半まとめ
ここ最近は、猫も杓子もAIとでも言うような状況で、きちんとした技術的理解なしにこのトレンドに踊らされるのはあまりにも危険だという感覚がありました。

この半年、ひとつずつ機械学習の基本的なアルゴリズムを理解して、サンプルデータや手元のデータを使ってライブラリを触って予測を組み立てることを経験した結果、IT業界で働いている訳でもなく、周囲に詳しい研究開発者がいない状況でも、学習を進め、AIに関する多くのいい加減な記事のいい加減さを評価できるくらいにはなりました。

データサイエンティスト(と敢えて呼びましょう)の今後の需要は短期的には増えても長期的には減るという予想もありますが、人がやらなくていい仕事の自動化が進んで行くのは必然で、IoT/BigData/AIというトレンドは間違っていないと思います。
大きな原則から細部まで、機械学習の勉強をしておくことは、どの業界でビジネスをする時にも参考になると思います。

# 次回予告
Pythonで機械学習:実践編に続く予定です