こんにちは!
消費財メーカーでデータサイエンティストとして働いているウマたん(@statistics1012)です!
統計学の修士号を持っており、大学時代は統計学を主に専攻していました。
AIやビッグデータ、機械学習という言葉が巷を賑わせていますが、実際に機械学習とは何かご存知でしょうか?
この記事では、機械学習の種類と実装・勉強法について見ていきますよ!
・機械学習とは
・機械学習の種類
・機械学習をRで実装してみよう!
・機械学習をPythonで実装してみよう!
・機械学習を勉強する方法
目次
機械学習とは

まずは、機械学習について簡単に確認しておきましょう!
以下の動画でも分かりやすく解説していますよー!
機械学習とは、その名の通り「機械に学習させてルールを作り出す」ということ。
機械学習が発展する前は、人間がルールを決めていました。
レコメンドで言えば、「この商品を購入した人にはこの商品を紹介したいから、そのようなルールを決めよう!」というように(ルールベースレコメンドと呼びます)。
そこに存在するのは人間の勘と想像です。
実際にこのようなレコメンドはまだまだ実用的に使われていますが、より精度の高いレコメンドを行うためには機械学習が必要になります。
「この商品を購入した人はこの商品を購入する確率が高いから、そのようなルールを作る」というように現在存在するデータを学習して自動的にルールを作っていくわけです。
最近よく使われているレコメンドロジックは協調フィルタリングと言います。
簡単に言うと行動パターンの似ているユーザーが買っているモノを似たユーザーにレコメンドするといった仕組み。
レコメンドロジックについてはこちらの記事に詳しくまとめていますのでよければご覧ください!

このように現在存在するデータから自動的にルールを作ってくれるアルゴリズムが機械学習なのです。
ちなみに統計学を起点とする多変量解析手法群もその定義からすると機械学習の中に含まれますが、機械学習手法と統計学ではスタンスが若干違います。
統計学は現在のデータを解釈することを目的としますが、機械学習は未知のデータを正確に予測できることを目的とします。
僕は、統計学は解釈追求型、機械学習は精度追求型と呼んでいます。ただ境目は曖昧ですのでそれほど気にする必要はないでしょう。明確に切り分けることはできません。
詳しくは以下の記事をご覧ください!

機械学習の種類

続いて、そんな機械学習にはどんな種類があるのか見ていきましょう!
機械学習には大きく分けて教師あり学習・教師なし学習・強化学習があります。

教師あり学習
教師あり学習はデータ群に対して正解が紐づいているデータセットを学習する手法のことを指します。
例えば、タイタニックの乗船者情報(後で実際に解析に使用します)では、様々なお客さん情報に対してそのお客さんが生き残ったか死んでしまったかのデータが入っています。
生死のラベルが付いていて、それを基にどんな客が生き残ったかのルールを作ることができるのです。
教師あり学習が最も一般的で様々な場面で使われています。
決定木
決定木はタイタニック乗船データに対しても例として用いられている一般的な手法です。
樹木構造で変数での分類規則を作っていきます。

非常に分かりやすくルールも可視化しやすいためビジネスの場面で用いられることが多いです。
そういう意味でいうと、データの解釈のために使われることが多く単純な予測精度を出したいなら他の手法を用いたほうが無難です。
PythonでもRでもライブラリを呼び出すことで簡単に実装が可能。
以下はPythonのコードです。
決定木に関してはPython・Rどちらでの実装も合わせて以下の記事にまとめています!

k近傍法
k近傍法は、未知データの周りに存在する学習データの数から未知データのラベルを判断する機械学習モデルです。

アルゴリズムはシンプルですが、ある程度精度の見込める手法です。
詳しくは以下の記事にまとめています!
後ほど紹介しますが、Rでの機械学習手法比較を行っています。

ランダムフォレスト
ランダムフォレストは、決定木とバギングを組み合わせた手法でそれなりの精度を簡単にたたき出してくれます。

それほど計算負荷もかからないので、ちょっとしたデータを解析するのにはもってこいです。
決定木と同様のirisデータをPythonを使って分類できちゃいます。
ランダムフォレストに関しては以下の記事に詳しくまとめていますので参考にしてみてください。

SVM(サポートベクターマシン)
SVMもランダムフォレスト同様の精度が期待できる優秀な手法です。
応用の幅が広く様々な分野で使われています。計算負荷は高めです。
SVMについて詳しくはこちら!

後ほどRでの実装比較を見ていきます
ニューラルネットワーク
ニューラルネットワークはディープラーニングの基となった手法です。
ニューラルネットワーク単体ではそれほど高い精度は見込めませんが、中間層を増やせば増やすほど学習が進み(ディープラーニングに近づき)精度が高くなります。
その分、計算負荷も上昇します。
ニューラルネットワークに関して詳しくはこちら!

ディープラーニングに関しては以下の記事を参考にしてみてください。

ナイーブベイズ
ナイーブベイズはベイズ統計学の概念を用いており、様々な分野へ応用されています。
ベイズ統計学を研究している人を巷ではベイジアンと呼ぶのですが、僕自身大学院時代はベイジアンでした。
ナイーブベイズが用いられる場面として最も有名なのはスパムメールの判別ですね。
スパムメールの判別では、文章に含まれる単語に対して迷惑メールである確率を算出しベイズ推定を使って迷惑メールであるか否かを推定します
以下の記事でナイーブベイズに関してまとめています!

XGboost
XGboostは、決定木と勾配ブースティングを組み合わせた手法で相当高い精度が見込めます。
Xgboostはランダムフォレストと似ているのですが、ランダムフォレストはアンサンブル学習にバギングを用いている一方Xgboostはブースティングを用いているんです。

勾配ブースティングの手法群は、いまだに現役のデータコンペ常連の手法なんですよー!
XGboostに関しては以下の記事をご覧ください!

LightGBM
Light GBMはXgboostのあと2016年にリリースされたXgboostを改良した手法です。
Xgboostを含む通常の決定木モデルは以下のように階層を合わせて学習していきます。
それをLevel-wiseと呼びます。
(引用元:Light GBM公式リファレンス)
一方Light GBMは以下のように葉ごとの学習を行います。これをleaf-wise法と呼びます。
(引用元:Light GBM公式リファレンス)
これにより、ムダな学習をしなくても済むためより効率的に学習を進めることができます。
計算負荷がXgboostと全然違うので、時間の限られたコンペではLightGBMが好んで使われます。
LightGBMに関しては以下の記事で詳しくまとめています。

Catboost
さらにLight GBMよりも後に発表されたのが、Catboost。
「Category Boosting」の略であり2017年にYandex社から発表された機械学習ライブラリです。
特徴は以下。
・カテゴリカル変数(質的変数)の扱い方が上手いよ
・決定木のツリー構造を最適にして過学習を防ぐよ
・計算負荷が低いよ
実際、他の勾配ブースティング手法との違いは微妙なところ。
後ほど精度比較していきますよー!
Catboostに関しては以下の記事でまとめています!

教師なし学習
教師あり学習では、正解データが存在しましたが、教師なし学習では正解データは存在しません。
現在存在するデータから何か特徴を導き出す時・セグメントを行う時などに使われます。
教師なし学習にはクラスター分析や主成分分析などが存在します。先ほど機械学習と統計学の違いをお伝えした通り、統計学は現在のデータの解釈に使われることが多いです。
そのため、教師なし学習のクラスター分析や主成分分析は統計学的アプローチの文脈で使われることが多いです。
階層的クラスター分析
階層クラスター分析では木構造のような図を作ってクラスター分けを行います。
ある類似度を表す指標をもとにサンプルを融合していき、最終的に一つのクラスターを作る手法です。
階層的クラスター分析に関しては以下の記事で詳しくまとめています!

k-means法
階層的クラスター分析は分かりやすく、結果が出た後に分類の様子からクラスタ数を決めることが可能です。
ただデータ量が多くなると計算に時間がかかるというデメリットがあります。
そこで登場するのが非階層的クラスター分析のk-means法。

どちらの手法も一長一短ですが、一般的にビジネスの場では膨大なデータを扱うことが多いため非階層的クラスター分析が良く用いられます。
先ほどから頻出のirisデータを階層的クラスター分析で分類してみましょう!
以下がコードです。
3つの花のタイプに分かれているので、そのラベルがk-means法で上手く分類できるかどうか見ていきます。
実際におこなってみた結果がこちら
1 | 2 | 3 | |
setosa | 0 | 50 | 0 |
versicolor | 48 | 0 | 2 |
virginica | 14 | 0 | 36 |
Verginicaは少し外してますが、それ以外は比較的当たってますね!
以下の記事でk-means法についてまとめています!

主成分分析
主成分分析は、1900年代前半にピアソンやホテリングにより導かれた手法であり長い歴史を持っています。
教師データ(正解データ)がいらない手法であり、手元にあるデータの次元を圧縮し構造化するのに優れています。
Pythonで主成分分析を実装していきましょう!
非常に簡単に実装することが可能です。
使用するデータは、統計科学研究所の「成績データ」。以下のURLからダウンロードできます。
https://statistics.co.jp/reference/statistical_data/statistical_data.htm
kokugo | shakai | sugaku | rika | ongaku | bijutu | taiiku | gika | eigo |
30 | 43 | 51 | 63 | 60 | 66 | 37 | 44 | 20 |
39 | 21 | 49 | 56 | 70 | 72 | 56 | 63 | 16 |
29 | 30 | 23 | 57 | 69 | 76 | 33 | 54 | 6 |
95 | 87 | 77 | 100 | 77 | 82 | 78 | 96 | 87 |
70 | 71 | 78 | 67 | 72 | 82 | 46 | 63 | 44 |
67 | 53 | 56 | 61 | 61 | 76 | 70 | 66 | 40 |
29 | 26 | 44 | 52 | 37 | 68 | 33 | 43 | 13 |
9科目の点数が166人分入ってます。
主成分分析自体は、scikit-learn内のライブラリを用います。
from sklearn.decomposition import PCA
実際に第1主成分と第2主成分を軸にデータをプロットしてみるとこんな感じ

寄与率を見てみると以下のようになっており、ほぼ第2主成分までで80%を超えていることが分かります。
array([0.66738119, 0.12202057, 0.05453805, 0.04521959, 0.03336222, 0.02460657, 0.02030967, 0.01902168, 0.01354047])
主成分分析については以下の記事でまとめています!

強化学習
強化学習は、昨今最も注目を集めている分野です。
教師あり学習と似ていますが、教師あり学習は全ての変数(特徴量)に対してフィードバックがありますが、強化学習は最終的な結果にのみフィードバックをします。
それを強化学習の世界では報酬と言いますが、報酬をたくさんもらえるように最適化すると最終的に精度の高いモデルが構築されるというイメージです。
まだまだビジネスの世界への適応例は少ない手法です。
強化学習については以下の記事にまとめています!

機械学習をRで実装してみよう!

機械学習に対する理解がだいぶ深まったと思いますので、ここで簡易的な解析をしてみましょう!
機械学習手法を使うだけなら非常に簡単に実装できちゃうんですよー!教師あり学習を実装してみましょう!
先ほども登場した有名なタイタニックのデータを用います。Kaggleの公式サイトからデータをダウンロードできます。
まず、データのクレンジングを行い、欠損値は削除、不要と考えられる項目は削除しました。
項目8つ
Survived:生死 pclass:客室のクラス sex:性別 age:年齢 sibsp:兄弟・配偶者の数 parch:親・子供の数 fare:乗船料金 embarked:乗船した港
サンプル数714
この時、生死を目的変数としそれ以外を説明変数とします。
サンプル数714のうちランダムに400個のデータを取り出し学習データとし、残りの314を予測データとします。
学習データで予測モデルを作り、予測データにあてはめ真値と予測値の判別率を精度として比較します。
シミュレーション回数は10回とし上記の手順を10回繰り返し、結果を平均したものを最終アウトプットとします。
XGboost、ランダムフォレスト、サポートベクターマシン、ナイーブベイズ、ニューラルネットワーク、k近傍法の6手法で比較します!
基本的に引数は全部デフォルトで!果たして結果はどうなるでしょうか!

意外とランダムフォレストとSVMが強い!
シミュレーション10回なのでばらつき大きめですが、おおまかな精度の指標になるでしょう。
今回はパラメータをいじらずデフォルト設定で行ったためグリッドサーチなどでチューニングを行えば、もっと良い精度が出るでしょう。
機械学習をPythonで実装してみよう!

続いて、Pythonで機械学習手法を実装していきましょう!
コンペでも人気の勾配ブースティング手法「Xgboost」「LightGBM」「Catboost」
使用するデータセットは画像識別のベンチマークによく使用されるMnistというデータです。
Mnistは以下のような特徴を持っています。
・0~9の手書き数字がまとめられたデータセット
・6万枚の訓練データ用(画像とラベル)
・1万枚のテストデータ用(画像とラベル)
・白「0」~黒「255」の256段階
・幅28×高さ28フィールド
ディープラーニングのパフォーマンスをカンタンに測るのによく利用されますね。
それぞれの手法のコードをざっと並べて見ていきましょう!
結果は以下のようになりました!
■Xgboost
精度:0.9764 処理時間:1410秒
■LightGBM
精度:0.972 処理時間:178秒
■Catboost
精度:0.9567 処理時間:260秒
精度はXgboostが最もよくLightGBMが最も処理が早いという結果になりましたー!
ちなみに2020年にリリースされた機械学習のライブラリ「PyCaret」を使えば多くの機械学習手法を簡単に比較することが出来るんです!
以下の記事で詳しく解説していますので是非チェックしてみてください!

機械学習を勉強する方法

非常に幅広く、様々な手法が混在する機械学習手法について見てきましたがこれらを学習するにはどのように進めていけばよいかロードマップについて見ていきましょう!
Step1:数学の勉強
Step2:機械学習理論の勉強
Step3:機械学習のPython実装
Stepに分けていますが、ある程度Pythonでのコーディングは理論を学びながら並行しておこなっていくことをオススメします!
数学の勉強
機械学習手法の理論に踏み込む上では少々数学が必要です。
なかなか初心者向けの書籍がないので最初はUdemyというオンライン学習プラットフォームで学習を進めることをオススメします!
Udemyは世界最大の教育プラットフォームです。
・世界最大のオンライン学習プラットフォーム
・日本事業ではベネッセがパートナーになっている
・15万種類ものコース
・約3億人のユーザー登録
※2020年3月時点

数学の勉強で大事なのは以下の3つ。
・微分積分
・線形代数
・確率統計
モデルの誤差を損失関数と言いますが、損失関数をなるーーべく小さくすると良いモデルになります。
その時に微分を使うんですよねー。
微分の学習には以下のUdemy講座をオススメします。

教育サービスを提供するキカガクの代表取締役の方が丁寧に機械学習のアルゴリズムについて教えてくれます。
まあ機械学習の基本・土台となる単回帰分析を数式から学んでいくもの。
ビックリしたんですが、パワポではなく紙に手書きで進んでいくんです!
続いては線形代数!
線形代数は大量のデータを扱う機械学習に必要な概念。
3つの中でどれが一番大事かと言われたら線形代数と答えるでしょう。
書籍を読み進める上で非常に大事です。
線形代数を学ぶのにおすすめなのは同じくキカガクのUdemy講座中級編!

本コースでは線形代数を学びながら重回帰分析まで展開していきます。
線形代数を学びながら微分も用いて定式化していきますよー!
実際に手計算で重回帰分析を行い、その後Pythonのsklearnを使って分析を行っていきます。
さらに線形代数を深く学びたい人はぜひ以下のUdemy講座をチェックしてみてください。

線形代数に特化した内容で初歩的な部分から応用まで幅広く網羅しています。
確率統計に関してはUdemy講座だと以下の講座がおすすめです。

データサイエンスの分野を幅広くおさえている講座ですが、その中でも確率統計に関して初歩的な部分をしっかりおさえています。
コミカルな動画と共に学べるので非常に分かりやすいです。
ビジネスサイドに立ってどのようにデータを扱えばよいかという議論のもとデータサイエンスについて学べるので分かりやすくスーッと頭に入ってくると思います。
ここまで、おおかた数学の土台は出来上がっていると思いますが、もしさらに深く数学について学びたい場合は以下の書籍をオススメします!
ちょっと難しいですが、深くエッセンスの詰まった書籍。
数学側に主眼を置いていますが、AI/機械学習手法と絡ませながら学ぶとより一層学びが深まる良書です。
機械学習の理論を勉強する
ある程度数学の土台が出来たあとは、機械学習手法の実践に挑戦してみましょう!
最初は難しいかもしれませんが、機械学習の本としては以下の「はじめてのパターン認識」が名著です。
かなり詳しく載っています。
「はじめての」と書いている割には、はじめて感がないのが特徴です笑
また、直接的に機械学習ではありませんが統計的モデリングについて理解しておくと非常に機械学習の理解も深まるので以下の書籍も一緒に読むことをオススメします!
(2021/01/24 16:35:30時点 Amazon調べ-詳細)
機械学習を勉強するためにオススメの本を以下にまとめていますのでこちらも参考にしてみてください!

機械学習のPython実装を勉強する
ここまで来たら、後は実装フェーズ。
理論と実装を完全に切り分けてしまうと途中で挫折してしまう可能性高いのでぜひ並行して進めましょう!
機械学習の実装はPython・Rどちらでもできますが、個人的にはPythonの方が圧倒的におすすめ!

Pythonはできることの幅が広く機械学習の先にも色々できることがあります。

例えば機械学習アルゴリズムを搭載したWebアプリケーションを作成することも可能なんです。
Pythonを勉強するためには本を読む・スクールに通う・オンラインサービスを使う、などがありますが圧倒的に書籍よりもスクールやオンライン学習をオススメします!
スクールでオススメなのはテックアカデミー!
現役エンジニアのパーソナルメンターがつくので分からないところも解消しやすく書籍などで進めるよりは圧倒的に進みが早いです。
価格は3か月で239,000円!

価格は少々かかりますが、その文お尻に火が付きます。
メンターのレベルは非常に高いので自分のやる気さえあれば教材の範囲を超えた内容をガツガツ学ぶことが可能!
僕自身3か月のコースを1か月で終わらせて、応用をガツガツ学んでました。
機械学習やAIを学べるスクールは他にもたくさんあります。
以下の記事でまとめていますのでこちらも合わせてチェックしてみてください!

また、Udemyでは以下の講座が簡単な機械学習手法をPythonで実装して実際にデータ解析コンペに提出していくのでオススメです!

簡単な単回帰分析から機械学習(決定木)を使って回帰と分類問題を解いていくコース!
課題定義や分析において気を付けるべきところについても学べるので実務においても役立つ内容です。
Pythonを最短で勉強する方法は以下の記事でまとめていますのでこちらも合わせてチェックしてみてください!

ここまでくれば、おおかた機械学習は問題なし!!
機械学習の種類と勉強法 まとめ
機械学習についてみてきましたー!
機械学習は、非常に簡単に実装できます。
ただその分、機械学習が実装できるだけでは意味がありません。
どのようなデータを機械に与えて、得られた結果をどのように解釈するか。それが最も大事な部分になります。
得られた結果をどのようにビジネスに落とし込むか・ビジネスインパクトを出すか。ここがデジタルマーケター・データサイエンティストの腕の見せ所ですね!
ここから先は、統計学的な視点を固めるか、Kaggleというコンペで機械学習の腕を磨くか、ディープラーニングを学ぶかなどがあります。
ぜひ好きな方向に進んでくださいねー!


