初心者が機械学習をできるようになるための全て

#はじめに
この記事は僕がインターン志望先で課題として出された、**「機械学習をするために必要な知識」**として提示されたものをこなしつつ、機械学習をできるようにするというための記事です。
この記事の全てを行うことで初めて**見習い機械学習エンジニア**となることができるでしょう。
逆に、この記事の全てを行うだけで簡単に機械学習の基礎をさらうことができます。


自分用としての性質も含むため、完璧な解説ではありません。

#開発環境
色々言う前にまずは私の開発環境から参りましょう。
**OS**
・Windows
・Windows Subsystem for Linux(Ubuntuでも動かせるようにしています)
**IDE**
Pycharm



#初心者が機械学習をするために何が必要?
以下、インターン志望先から提示された課題を箇条書きします。これが**「必要な物」**です。
のちに一個一個説明していきますが、まずは全容を抑えましょう。


**①エンジニアとして絶対必要な能力**
すらすらと使いこなせるようにする。
・python3の基礎知識
・command line
・Git

**②セットアップ**
以下の物を把握する。
・Python系統
　・pip
　・pipenv
・Ubuntuの端末（コマンドライン）で効率化の為に必須なもの
　・tmux
・その他
　・マークダウン記法(Qiita用)

・デバッグ作業
　・Pycharmによるデバッグ

**③機械学習**
ライブラリとして、以下の物を把握する。
  　・scikit-learn
　・Numpy
　・Pandas
  　・Matplotlib
　・Keras


**④本**
**Must**
　・[リーダブルコード](https://www.amazon.co.jp/%E3%83%AA%E3%83%BC%E3%83%80%E3%83%96%E3%83%AB%E3%82%B3%E3%83%BC%E3%83%89-%E2%80%95%E3%82%88%E3%82%8A%E8%89%AF%E3%81%84%E3%82%B3%E3%83%BC%E3%83%89%E3%82%92%E6%9B%B8%E3%81%8F%E3%81%9F%E3%82%81%E3%81%AE%E3%82%B7%E3%83%B3%E3%83%97%E3%83%AB%E3%81%A7%E5%AE%9F%E8%B7%B5%E7%9A%84%E3%81%AA%E3%83%86%E3%82%AF%E3%83%8B%E3%83%83%E3%82%AF-Theory-practice-Boswell/dp/4873115655)
　・[機械学習のエッセンス](https://www.amazon.co.jp/%E6%A9%9F%E6%A2%B0%E5%AD%A6%E7%BF%92%E3%81%AE%E3%82%A8%E3%83%83%E3%82%BB%E3%83%B3%E3%82%B9-%E5%AE%9F%E8%A3%85%E3%81%97%E3%81%AA%E3%81%8C%E3%82%89%E5%AD%A6%E3%81%B6Python-%E3%82%A2%E3%83%AB%E3%82%B4%E3%83%AA%E3%82%BA%E3%83%A0-Machine-Learning/dp/4797393963)
　・[仕事で始める機械学習](https://www.amazon.co.jp/%E4%BB%95%E4%BA%8B%E3%81%A7%E3%81%AF%E3%81%98%E3%82%81%E3%82%8B%E6%A9%9F%E6%A2%B0%E5%AD%A6%E7%BF%92-%E6%9C%89%E8%B3%80-%E5%BA%B7%E9%A1%95/dp/4873118255)
**その他個人的に良かった本**
　・[やさしく学ぶ 機械学習を理解するための数学のきほん](https://www.amazon.co.jp/%E3%82%84%E3%81%95%E3%81%97%E3%81%8F%E5%AD%A6%E3%81%B6-%E6%A9%9F%E6%A2%B0%E5%AD%A6%E7%BF%92%E3%82%92%E7%90%86%E8%A7%A3%E3%81%99%E3%82%8B%E3%81%9F%E3%82%81%E3%81%AE%E6%95%B0%E5%AD%A6%E3%81%AE%E3%81%8D%E3%81%BB%E3%82%93-%E3%82%A2%E3%83%A4%E3%83%8E-%E3%83%9F%E3%82%AA%E3%81%A8%E4%B8%80%E7%B7%92%E3%81%AB%E5%AD%A6%E3%81%B6-%E6%A9%9F%E6%A2%B0%E5%AD%A6%E7%BF%92%E3%81%AE%E7%90%86%E8%AB%96%E3%81%A8%E6%95%B0%E5%AD%A6%E3%80%81%E5%AE%9F%E8%A3%85%E3%81%BE%E3%81%A7/dp/4839963525)
　・[Pythonで動かして学ぶ! あたらしい深層学習の教科書 機械学習の基本から深層学習まで](https://www.amazon.co.jp/Python%E3%81%A7%E5%8B%95%E3%81%8B%E3%81%97%E3%81%A6%E5%AD%A6%E3%81%B6-%E3%81%82%E3%81%9F%E3%82%89%E3%81%97%E3%81%84%E6%B7%B1%E5%B1%A4%E5%AD%A6%E7%BF%92%E3%81%AE%E6%95%99%E7%A7%91%E6%9B%B8-%E6%A9%9F%E6%A2%B0%E5%AD%A6%E7%BF%92%E3%81%AE%E5%9F%BA%E6%9C%AC%E3%81%8B%E3%82%89%E6%B7%B1%E5%B1%A4%E5%AD%A6%E7%BF%92%E3%81%BE%E3%81%A7-AI-TECHNOLOGY/dp/4798158577)

#①エンジニアとして絶対必要な能力
・python3の基礎知識
・command line
・Git

これらの能力なしでは実際のところ何もできないのと同じようなものです。
まずは何よりも最初にこの３つをやってしまいましょう。
[Progate](https://prog-8.com/)が志望先でお勧めされていました。無料でやることが可能ですし、自分では環境開発の必要がないのも最初の一歩として魅力的です。僕自身、１日で全て終わらせましたので難なく進められると思います。
後々多用するであろう早見表をProgateを参考に作ってみましたので是非ご活用ください。
・[Git基本・早見表](https://qiita.com/ryusei172525/items/f149c6b9ff2475a5ba66)
・[コマンドライン基本・早見表](https://qiita.com/ryusei172525/items/3af93d04b4b057549a4e)

#②セットアップ
**Python系統**
　・pip
　・pipenv

これらはPythonで必要なライブラリを手に入れるためのツールです。
実際問題としては、pipを使うのはpipenvをインストールするためだけです。
pipについては以下をご覧ください。
・[pipの早見表](https://qiita.com/ryusei172525/items/34a212c994f22e0c7263)
pipenvについては他の方が書かれた良い記事をご覧ください。
Anacondaやpyenvなどがある中で何故Pipenvを使うのかという理由が記されている記事です。
・[pyenv、pyenv-virtualenv、venv、Anaconda、Pipenv。私はPipenvを使う。](https://qiita.com/KRiver1/items/c1788e616b77a9bad4dd#pipenv)
Pipenvのインストールについては次の記事を参考にさせて頂きました。
・[Pipenvを使ったPython開発まとめ](https://qiita.com/y-tsutsu/items/54c10e0b2c6b565c887a)

**Ubuntuの端末（コマンドライン）で効率化の為に必須なもの**
　・tmux

tmuxは開発を効率化してくれる道具です。
ターミナルで複数個のウインドウを作る必要がなく、同じ一画面で操作できるようにするものです。
以下のウェブサイトを参照させていただきました。
・[インフラエンジニアならtmuxを使いこなしているか！？](http://developers.goalist.co.jp/entry/2017/03/09/184319)

**その他**
　・マークダウン記法(Qiita用)

この「マークダウン記法」、最初はプログラムの記法か何かかと思いましたが単純に今私が現在進行形で行っているQiitaを書く作業で便利な記法です。文字を大きくする方法や段落の作り方、ただそれだけあります。
以下の記事を参照すればすべてがまとまっております。
・[Qiita マークダウン記法 一覧表・チートシート](https://qiita.com/kamorits/items/6f342da395ad57468ae3)

**デバッグ作業**
　・Pycharmによるデバッグ

これも効率化の問題ですが、単なる効率化で済ませてはいけません。Pythonのデバッグ作業は有用な方法があります。それが「Pycharmを使う」ことです。
志望先からは以下の記事の内容を理解し、使いこなせることが求められました。
・[【ノンプログラマー向けPython】PyCharmでデバッグをする基本中の基本](https://tonari-it.com/python-pycharm-debug/)

#③機械学習系
Pythonの文法ではなくて、ライブラリを使いこなそうという話です。

機械学習を学ぶ中で重要なのは**「何ができるのかわかったら十分」**ということでしょう。

私も最初はとても時間をかけてライブラリの一つ一つを勉強していたのですが、そのような必要はないように思えます。
何ができるのか理解して知っていれば、片手に本が一冊あったり**Qiitaのチートシート**の様なものを見れば実装することができるでしょう。プログラミングの実装は試験ではありません。カンニングしたい放題です。ですから僕は「自分用」の意味も含めて**早見表**の記事などを書いています。

僕が説明する必要などなく、素晴らしいまとめ記事があふれていますので、ぜひご自分で調べてみてください。
公式Tutorialこそが全てでもあるので貼っておきますね。

今の僕から思えば１週間ほどで全てできたのではないかなと少し後悔しています。

以下の順番で学習したら良いでしょう。
###①scikit-learn
[scikit-learn公式チュートリアル](https://scikit-learn.org/stable/tutorial/index.html)
###②Numpy
[Numpy公式チュートリアル](https://numpy.org/)
[Numpy完全基礎の全て](https://qiita.com/ryusei172525/items/96e84adce10aa6cd708d)
###③Pandas
[Pandas公式チュートリアル](https://pandas.pydata.org/pandas-docs/stable/getting_started/tutorials.html)
###④Matplotlib
[Matplotlib公式チュートリアル](https://matplotlib.org/3.1.1/tutorials/introductory/pyplot.html)
###⑤Keras
[Keras公式（日本語）](https://keras.io/ja/)

もう一度言いますよ！重要なのは
**「何ができるか分かったらOK！」**ですよ！！

#④本
機械学習を学ぶ上で読んだ本を紹介します。


###機械学習のエッセンス
[機械学習のエッセンス](https://www.amazon.co.jp/%E6%A9%9F%E6%A2%B0%E5%AD%A6%E7%BF%92%E3%81%AE%E3%82%A8%E3%83%83%E3%82%BB%E3%83%B3%E3%82%B9-%E5%AE%9F%E8%A3%85%E3%81%97%E3%81%AA%E3%81%8C%E3%82%89%E5%AD%A6%E3%81%B6Python-%E3%82%A2%E3%83%AB%E3%82%B4%E3%83%AA%E3%82%BA%E3%83%A0-Machine-Learning/dp/4797393963)
この本はPythonの基本、機械学習に必要な数学の話、Pythonを使った数値計算、機械学習アルゴリズムを取り扱っています。これ以上ないほど機械学習の全てがまとまっているように思えます。
大学で数学を学んだ方はPythonによる数値計算から読み進めたら良いでしょう。

###仕事で始める機械学習
[仕事で始める機械学習](https://www.amazon.co.jp/%E4%BB%95%E4%BA%8B%E3%81%A7%E3%81%AF%E3%81%98%E3%82%81%E3%82%8B%E6%A9%9F%E6%A2%B0%E5%AD%A6%E7%BF%92-%E6%9C%89%E8%B3%80-%E5%BA%B7%E9%A1%95/dp/4873118255)
その名の通り実務のイメージがつきます。理論だけ勉強しても何に使えるのかわからないですよね。
そんな時に良い道しるべとなってくれると思います。また、２冊目に読むべき本ですので、基礎は抑えてから読むのが良いでしょう。とはいえ、まとめ本としての性質も持つので機械学習手法の復習に最適だと思います。

###やさしく学ぶ 機械学習を理解するための数学のきほん
[やさしく学ぶ 機械学習を理解するための数学のきほん](https://www.amazon.co.jp/%E3%82%84%E3%81%95%E3%81%97%E3%81%8F%E5%AD%A6%E3%81%B6-%E6%A9%9F%E6%A2%B0%E5%AD%A6%E7%BF%92%E3%82%92%E7%90%86%E8%A7%A3%E3%81%99%E3%82%8B%E3%81%9F%E3%82%81%E3%81%AE%E6%95%B0%E5%AD%A6%E3%81%AE%E3%81%8D%E3%81%BB%E3%82%93-%E3%82%A2%E3%83%A4%E3%83%8E-%E3%83%9F%E3%82%AA%E3%81%A8%E4%B8%80%E7%B7%92%E3%81%AB%E5%AD%A6%E3%81%B6-%E6%A9%9F%E6%A2%B0%E5%AD%A6%E7%BF%92%E3%81%AE%E7%90%86%E8%AB%96%E3%81%A8%E6%95%B0%E5%AD%A6%E3%80%81%E5%AE%9F%E8%A3%85%E3%81%BE%E3%81%A7/dp/4839963525)
この本のおかげで基本的な機械学習における数学の知識が理解できました。
機械学習のエッセンスが難しいと感じるならばこれから始めれば問題ないでしょう。

###Pythonで動かして学ぶ! あたらしい深層学習の教科書 機械学習の基本から深層学習まで
[Pythonで動かして学ぶ! あたらしい深層学習の教科書 機械学習の基本から深層学習まで](https://www.amazon.co.jp/Python%E3%81%A7%E5%8B%95%E3%81%8B%E3%81%97%E3%81%A6%E5%AD%A6%E3%81%B6-%E3%81%82%E3%81%9F%E3%82%89%E3%81%97%E3%81%84%E6%B7%B1%E5%B1%A4%E5%AD%A6%E7%BF%92%E3%81%AE%E6%95%99%E7%A7%91%E6%9B%B8-%E6%A9%9F%E6%A2%B0%E5%AD%A6%E7%BF%92%E3%81%AE%E5%9F%BA%E6%9C%AC%E3%81%8B%E3%82%89%E6%B7%B1%E5%B1%A4%E5%AD%A6%E7%BF%92%E3%81%BE%E3%81%A7-AI-TECHNOLOGY/dp/4798158577)
僕がメインで勉強したのはこの本です。どのように人工知能を学ぼうかと、教授に相談しに研究室に行ったときに頂いた本です。
（理論的な話は置いといて）深層学習の全てが記されています。環境開発から実装まで全てを行います。この本をまず第一にやってから上記の本をやるというのが本当の初心者の方におすすめです。また、僕が上記に記したライブラリ(Numpyとかです)のことも全て学べるようにできております。

#さいごに
僕が今までしてきたことの全てをこの記事に詰めさせていただきました。
これからは論文を読みながら人工知能の最先端技術に触れられればと思います。
長ったらしくなりましたが、読んでいただいてありがとうございました。