機械学習で使用する手法を全公開

[株式会社デジサク](https://digisaku.co.jp) がお送りするプログラミング記事、
今回はAI(機械学習)について扱っていこうと思います。

※ [無料セミナー](https://digisaku.connpass.com/)も開催中なので、ぜひご覧になってみて下さい。

## はじめに
kaggleや学習サイトなど誰でも機械学習を学べる機会が増えてきました。
その反面、情報量が多すぎて全体感を掴めていない人が多いと感じています。

そこで、**様々な参考書や記事で紹介されている機械学習で使用する手法**を全公開しようと思います。
細かなコーディングはリンクを貼っておくので、そちらを参照されてください。




SNS でも色々な情報を発信しているので、記事を読んで良いなと感じて頂けたら
 [Twitterアカウント「Saku731」](https://twitter.com/digisaku710) もフォロー頂けると嬉しいです。

## 機械学習の一連手順
まず、機械学習を習得するために必要なスキルは下記です。
実務の場では数段細かな作業が必要になりますが、最初は下記を勉強するだけで十分です。

- １）データの可視化　　：データの全体感を掴んで前処理の方針を決める
- ２）データの前処理　　：予測精度が高くなるよう、データを綺麗にする
- ３）アルゴリズムの選定：データに対して適切なアルゴリズムを決める
- ４）モデルの学習　　　：コンピュータにデータの法則性を学習させる
- ５）モデルの検証　　　：出来上がったモデルの予測精度を確認する


## １）データの可視化
- [基礎統計量の確認](https://www.python.ambitious-engineer.com/archives/1096)
    - 平均値
    - 標準偏差
- データを集計
    - [クロス集計](https://note.nkmk.me/python-pandas-crosstab/)
    - [ビニング](https://note.nkmk.me/python-pandas-cut-qcut-binning/)
    - [ピボットテーブル](https://note.nkmk.me/python-pandas-pivot-table/)
    - [グループ化](https://qiita.com/propella/items/a9a32b878c77222630ae)
- [グラフ化](https://qiita.com/nkay/items/d1eb91e33b9d6469ef51)（詳細版は[こちら](https://qiita.com/skotaro/items/08dc0b8c5704c94eafb9)）
    - 棒グラフ
    - 散布図
    - ヒストグラム
    - 箱ひげ図
- [相関行列のヒートマップ](https://qiita.com/zerebom_3/items/a9777a53754538b45e6f)

## ２）データの前処理

- [欠損値の処理](https://qiita.com/0NE_shoT_/items/8db6d909e8b48adcb203)
    - 除去
    - 補完
- [データのスケールを揃える](https://qiita.com/ttskng/items/2a33c1ca925e4501e609)　※数学の部分が難しいので、飛ばして読んでください
    - 標準化
    - 正規化
- カテゴリカル変数のエンコーディング
    - [one-hot エンコーディング](https://blog.shikoan.com/pandas-get-dummies/)
    - [ラベル エンコーディング](https://qiita.com/yoshimo123/items/3717bd17ba74764dbc69)
    - [エンコーディングの違いを知りたい方はコチラ](https://www.renom.jp/ja/notebooks/tutorial/preprocessing/category_encoding/notebook.html)
- [テーブルの結合（DataFrameの結合）](https://qiita.com/hikaru_/items/e9c1356f674f2baa9e64)
    - merge
    - concat



## ３）アルゴリズムの選定
リンクは[こちら](https://avinton.com/academy/classification-regression/)

- 回帰
    - 線形回帰（単回帰、重回帰）
    - 回帰木
    - ランダムフォレスト回帰
- 分類
    - ロジステック回帰
    - [決定木](https://qiita.com/3000manJPY/items/ef7495960f472ec14377)
    - ランダムフォレスト
    - サポートベクターマシン（SVM）
- どちらにも使える
    - ニューラルネットワーク（ディープラーニング）
    - XGBoost
    - LightGBM



## ４）モデルの学習

- [バリデーション](https://avinton.com/academy/classification-regression/)
    - ホールドアウト法
    - 交差検証（クロスバリデーション）
- [パラメータチューニング](https://qiita.com/ragAgar/items/2f6bebdba5f9d7381310)
    - グリッドサーチ
    - ランダムサーチ
    - [（応用）ベイズ最適化](https://qiita.com/koshian2/items/1c0f781d244a6046b83e)


## ５）モデルの検証

- [評価指標（回帰）](https://funatsu-lab.github.io/open-course-ware/basic-theory/accuracy-index/) ※[こちら](https://qiita.com/monda00/items/a2ee8e0da51953c24da8)の記事も分かりやすいです
    - RMSE ( Root Mean Squared Error )
    - RMSLE ( Root Mean Squared Logarithmic Error )
    - MAE ( Mean Absolute Error )
    - 決定係数
- [評価指標（２クラス分類）](https://www.haya-programming.com/entry/2018/03/14/112454)
    - 混同行列（TP, TN, FP, FN）
    - Accuracy
    - Precision
    - Recall
    - F値
    - LogLoss（クロスエントロピー誤差）
    - AUC（ROC曲線の面積）
- [評価指標（多クラス分類）](https://www.haya-programming.com/entry/2018/03/14/112454)
    - multi-class accuracy
    - multi-class logloss
    - mean-F1, macro-F1, micro-F1



## さいごに
情報は随時増やしていこうと思います。
追加・訂正要望がありましたらご連絡いただけると大変助かります。

また、「機械学習を仕事に使うシリーズ」でも記事を書いてます。ぜひご活用ください。


- [第１回：機械学習の目的を理解する](https://qiita.com/Saku731/items/a708ec5c7cbc54e2c1ef)
- [第２回：AI開発のプロジェクト全体像](https://qiita.com/Saku731/items/4bbb0798cd55a17e34f0)
- [第３回：Pythonのコーディング手順](https://qiita.com/Saku731/items/7f444e1312b85996842f)


SNS でも色々な情報を発信しているので、記事を読んで良いなと感じて頂けたら
 [Twitterアカウント「Saku731」](https://twitter.com/digisaku710) もフォロー頂けると嬉しいです。



~~また、文末にはなりますが、期間限定で「**チーム開発体験プロジェクト**」をやってます。~~
~~もしご興味あれば[【応募シート】](https://forms.gle/5Jf6EaVkKt8eM4S49)で詳細確認してください。~~
（追記）
満員のため締め切らせて頂きました。
次回は2019年３月を予定しているので、ご案内を希望される方は[【予約フォーム】](https://forms.gle/62troSMPQv8wLitQ8)にご記載ください。