【実用編】教師あり学習を全部学ぼう Part1:道具の準備

# はじめに
自分と仲間用に[「Pythonではじめる機械学習」](https://www.oreilly.co.jp/books/9784873117980/)をまとめました。
本記事は特に、教師あり学習についてです。
[こちらのGithubのコード](https://github.com/amueller/introduction_to_ml_with_python)をお借りしています。
言語は**Python**ですのでお忘れなきように。
超基本からいきますので困らないと思います。基本的にwindowsでやってます。

機械学習には大きく分けて教師あり学習と教師なし学習がある。

![image.png](https://qiita-image-store.s3.ap-northeast-1.amazonaws.com/0/481370/fe695d9e-2de5-91a6-91e4-900f4fdbf943.png)

(引用元：https://mining-activity.com/unsupervised_learning/)

教師なし学習は次元圧縮法やクラスタリング法、教師あり学習は分類法や回帰法に大別されることがこの図よりわかります。


# 必要な道具を用意しよう
### Anaconda(アナコンダ)
機械学習を使う際によく使われるディストリビューション(必要な道具が最初からすべて入っている嬉しいやつ)というもの。
具体的には...
・NumPy(ナムパイ)
・SciPy(サイパイ)
・matplotlib(マットプロットリブ)
・IPython(アイパイソン)
・Jupyter Notebook(ジュピターノートブック)
・scikit-learn(サイキットラーン)
が含まれる。

windowsでのインストールは[こちら](https://www.python.jp/install/anaconda/windows/install.html)
Macでのインストールは[こちら](https://www.python.jp/install/anaconda/macos/install.html)
Macでは「Anaconda-Navigator」という可愛いUIのもので開発できます！


インストールしたら、windowsであればAnaconda Promptから起動できます！

![image.png](https://qiita-image-store.s3.ap-northeast-1.amazonaws.com/0/481370/f180a79e-a84d-3e98-239a-f37a1a3df85b.png)

![image.png](https://qiita-image-store.s3.ap-northeast-1.amazonaws.com/0/481370/543b1e67-0636-14d6-f010-5000c7f21eb9.png)

こんなウィンドウが表示されて```python```と打ち込むとpythonが起動できます。

## 必要なライブラリ
### Jupyter Notebook
コマンドプロンプトでガツガツコードを書いていても仕方ないので、より見やすく、使いやすくするのがJupyter Notebookです。

Anacondaに最初から入っているので、特別インストールする必要はありません！
使い方はシンプルで、Anaconda Promptで```jupyter notebook```とするだけです。
Macではanacondaをインストールした時に自動で入ってくるアプリのAnaconda Navigatorから「notebook」をLaunch!

cdコマンドで機械学習用のフォルダに移動してから```jupyter notebook```!
![image.png](https://qiita-image-store.s3.ap-northeast-1.amazonaws.com/0/481370/c8209064-8fa2-b7b6-9cac-7e15d342e724.png)

そうすると、webブラウザがURL:localhostってやつで起動されたはずです。localhostというのは自分のPCの環境内ってことです。webブラウザだからと全世界にオープンされたわけではないのでご心配なく。

↓僕の場合すでにファイルが入っているのでこうなってます。

![image.png](https://qiita-image-store.s3.ap-northeast-1.amazonaws.com/0/481370/680ab7ef-ee4c-e426-2e3f-1d5731a956fc.png)

### NumPy
コマンドプロンプトの四則演算だけでは対応できないので、それを補う計算用のツールです。
Anacondaに入っています。

jupyter notebookでNumpyの具体的なコードを書いてみましょうか。

右上のNewから新しいファイルを作りましょう。この時、Python3というものを選んでください。

![image.png](https://qiita-image-store.s3.ap-northeast-1.amazonaws.com/0/481370/8ed31b40-9620-00bb-925a-f1c49a34605b.png)

これができたらおｋ。ファイル名はpracticeとでもしておきます。

![image.png](https://qiita-image-store.s3.ap-northeast-1.amazonaws.com/0/481370/6a8c78bd-fd01-4883-7dea-c07a6241b0b5.png)

```practice.py
import numpy as np

x = np.array([[1,2,3],[4,5,6]])
print("x:\n{}".format(x))
```

コピペでも大丈夫です。Runをしましょう。

![image.png](https://qiita-image-store.s3.ap-northeast-1.amazonaws.com/0/481370/40fa72b8-f15d-1332-9460-561f92d843f6.png)

行列が出力されましたね。

![image.png](https://qiita-image-store.s3.ap-northeast-1.amazonaws.com/0/481370/aacdd923-833a-126e-db01-68b9debec4a9.png)

いま書いてもらったNumPy配列は非常に重要なのですが、気を付けてほしいのが次の図のように**配列の中に複数の配列が入っているという構造**になっていることです。

![image.png](https://qiita-image-store.s3.ap-northeast-1.amazonaws.com/0/481370/9651c7f0-eaf6-0752-2f14-514993c540f8.png)

### SciPy
NumPy同様に高度な計算を行うためのライブラリです。これもAnacondaに入っております。

最も使うのはscipy.sparseというもので、**疎行列**(成分のほとんどが0)を表します。
いずれ具体的に使うときに学びましょう。

### matplotlib
グラフ描画ライブラリです。これもAnacondaに入っております。

Jupyter notebookでは```%matplotlib inline```か```%matplotlib notebook```とすることでブラウザ上に図を表示できます。

```practice.py
%matplotlib notebook
import matplotlib.pyplot as plt

# -10から10までを100個に区切った列を配列として生成
x = np.linspace(-10, 10, 100)
# sin関数を用いて2つ目の配列を作成
y = np.sin(x)
# plot関数は、一方の配列に対して他方の配列をプロットする
plt.plot(x, y, marker="x")
```

![image.png](https://qiita-image-store.s3.ap-northeast-1.amazonaws.com/0/481370/3987812c-bb03-be3d-bcbc-dc381de1cde0.png)

### pandas
データの変換、解析用のライブラリです。データをExcelやRDB(リアルタイムデータベース)などに入出力することができます。

次の例ではPython用語でいうところの**辞書**をつかって配列を構成しています。
Pythonの**リスト**、**辞書**などが怪しい人は[こちら](https://qiita.com/taro-ari/items/9f54536fe3c623813db1)

```practice.py
import pandas as pd

# 人を表すデータセットを作る。
data = {'Name': ["John", "Anna", "Peter", "Linda"],
        'Location' : ["New York", "Paris", "Berlin", "London"],
        'Age' : [24, 13, 53, 33]
       }

data_pandas = pd.DataFrame(data)
# pandas.DataFrameを用いると綺麗に表示できる
display(data_pandas)
```

![image.png](https://qiita-image-store.s3.ap-northeast-1.amazonaws.com/0/481370/54822086-293e-7986-1ed6-1a8cb29a04dd.png)

このテーブルに対していろいろな操作をすることができる。
例えば、必要な情報だけを抽出したいなら次のようにする。

```practice.py
# Ageが30を超えるすべての行を取り出す
display(data_pandas[data_pandas.Age > 30])
```

![image.png](https://qiita-image-store.s3.ap-northeast-1.amazonaws.com/0/481370/f86bd62c-9e66-097b-2a89-2cc46e4f3c94.png)

### mglearn
[「Pythonではじめる機械学習」](https://www.oreilly.co.jp/books/9784873117980/)にはじめから付いている本書で学習する人に向けたライブラリです。機械学習用のデータがいろいろと入っていて、後々使うこともあるかもしれません。
Anaconda promptで```pip install mglearn```としてインストールしておきましょう。

### scikit-learn
機械学習をやる中で一番大切なライブラリです。サンプルデータが揃っており、教師あり、なし学習用のアルゴリズムが始めからすべて入っています。これを用いて機械学習を進めていきます。
Anacondaに始めから入っているので心配はいりません。具体的な使い方は次回見ていきましょう。

以上が、とりあえず必要な道具たちです。Part2以降、これからコードを実行するときは明示していなくても次のようにライブラリをインストールしていると思って下さい。(必要であれば、Jupyter Notebookのファイルの一番上に書くことをおすすめします。)


```*.py
import numpy as np
import matplotlib.pyplot as plt
import pandas as pd
import mglearn
from IPython.display import display
import sklearn
from sklearn.datasets import make_blobs
```