kakakakakku blog

Weekly Tech Blog: Keep on Learning!

入門者でも挫折せずに読める!「機械学習図鑑」で "17種類" のアルゴリズムを学ぶ

「機械学習図鑑」を読んだので簡単にまとめる.正確には今年5月頃に読んでいたけど,まだ書評記事を書いてなかった📕

まず前提として,本書を読んだときには僕は機械学習に詳しくなく入門者だった.機械学習に関連する書籍を何冊か買ってみたけど,そのときの知識では理解できないことも多く,最後まで読めずに挫折することが多かった.そこで本当に入門者でも読めそうな本を探していたところ「見て試してわかる機械学習アルゴリズムの仕組み 機械学習図鑑」の評判が良さそうで読むことにした.素晴らしかった👏

対象読者

本書の冒頭に「対象読者」が載っている.以下は一部を抜粋しているけど,まさに僕だった.本書を読んだことにより,今までうまく理解できなかった書籍やウェブサイトを読めるようになり,本書を読んだ効果を感じることができた.

  • 機械学習に興味があり、勉強し始めている。
  • 数式があまり得意ではなく、機械学習の専門書を読むのに苦労している。
  • ある程度プログラミングの経験があり、サンプルコードを実行することができる。

本書の良いところは多くある.オールカラーだし,図表が多く載っているし,scikit-learn のサンプルコードも解説されている.そして「17種類」ものアルゴリズムが紹介されているのも良かった.

目次

  • 第1章「機械学習の基礎」
    • 1.1 : 機械学習の概要
    • 1.2 : 機械学習に必要なステップ
  • 第2章「教師あり学習」
    • 01 : 線形回帰
    • 02 : 正則化
    • 03 : ロジスティック回帰
    • 04 : サポートベクトルマシン
    • 05 : サポートベクトルマシン(カーネル法)
    • 06 : ナイーブベイズ
    • 07 : ランダムフォレスト
    • 08 : ニューラルネットワーク
    • 09 : kNN
  • 第3章「教師なし学習」
    • 10 : PCA
    • 11 : LSA
    • 12 : NMF
    • 13 : LDA
    • 14 : k-means 法
    • 15 : 混合ガウス分布
    • 16 : LLE
    • 17 : t-SNE
  • 第4章「評価方法および各種データの扱い」
    • 4.1 : 評価方法
    • 4.2 : 文書データの変換処理
    • 4.3 : 画像データの変換処理
  • 第5章「環境構築」
    • 5.1 : Python3 のインストール
    • 5.2 : 仮想環境
    • 5.3 : パッケージインストール

本書は今年5月に合格した「Python 3 エンジニア認定データ分析試験」の準備をするのにも非常に役立った.

kakakakakku.hatenablog.com

第1章「機械学習の基礎」

第1章では「機械学習とは?」という内容から「教師あり学習」「教師なし学習」「強化学習」の具体例までわかりやすく紹介されている.特に書籍名に「図鑑」と書いてある通り,図表が多く載っている点が素晴らしく,入門者だと単純なことでも最初はうまく理解できず悩むため,本書は本当に読みやすく書かれていると思う.

第2章「教師あり学習」

第2章では「教師あり学習」として「9種類」のアルゴリズムが紹介されている.どのアルゴリズムも基本的な考え方が図表で解説されていて,実装例は scikit-learn のサンプルコードで解説されているため,挫折することなく読み進めることができた.またサンプルコードは Jupyter Notebook 形式でダウンロードできるので,気になるところは積極的に試すようにした.

www.shoeisha.co.jp

例えば,以下は「線形回帰」scikit-learnLinearRegression で実装するサンプルコードを参考に Matplotlib を使って可視化まで試してみた.サンプルコードを動かすことに加えて自分で試行錯誤をしてみるとより理解が深まると思う.

from sklearn.linear_model import LinearRegression
import matplotlib.pyplot as plt


X = [[10.0], [8.0], [13.0], [9.0], [11.0], [14.0], [6.0], [4.0], [12.0], [7.0], [5.0]]
y = [8.04, 6.95, 7.58, 8.81, 8.33, 9.96, 7.24, 4.26, 10.84, 4.82, 5.68]

model = LinearRegression()
model.fit(X, y) 

print(model.intercept_)
# 切片 : 3.0000909090909094

print(model.coef_)
# 傾き : 0.50009091

y_pred = model.predict([[0], [1]]) 
print(y_pred)
# x=0, x=1 に対する予測結果

y_pred_all = model.predict(X)
# X 全体に対する予測結果

plt.scatter(X, y)
plt.plot(X, y_pred_all, linewidth=0.5)
# グラフにプロット

f:id:kakku22:20211119100437p:plain

また線形回帰の解釈の難しさとして「アンスコムの例」の紹介もあったりして,関連トピックが載っている点も視野を広げる意味で良かった.

ja.wikipedia.org

第3章「教師なし学習」

第3章では「教師なし学習」として「8種類」のアルゴリズムが紹介されている.特に入門者として最初は「教師なし学習」の理解がしにくく感じたけど,実際に PCAt-SNEk-means などのサンプルコードを実際に試したりもして,基本的な考え方と scikit-learn での実装を理解できるようになった.

例えば,以下は「PCA」scikit-learn で実装するサンプルコードを参考に Matplotlib を使って「累積寄与度」の可視化まで試してみた.iris データセット(アヤメ)の特徴量4個を2個まで次元削減をした効果を確認できるようになった.

from sklearn.decomposition import PCA
from sklearn.datasets import load_iris
import matplotlib.ticker as ticker
import numpy as np


data = load_iris()

model = PCA(n_components=2)
model = model.fit(data.data)
# 次元を 4 → 2 に削減

print(model.transform(data.data)[0:5])
# 次元削減後のデータセットの先頭を表示
# [[-2.68412563  0.31939725]
#  [-2.71414169 -0.17700123]
#  [-2.88899057 -0.14494943]
#  [-2.74534286 -0.31829898]
#  [-2.72871654  0.32675451]]

fig, ax = plt.subplots()
ax.plot(np.cumsum(np.append(0, model.explained_variance_ratio_)))
ax.grid()
# 累積寄与率をグラフにプロット

f:id:kakku22:20211119101219p:plain

第4章「評価方法および各種データの扱い」

第4章では「評価」という重要なトピックで「評価手法」「ハイパーパラメーター」「過学習」など,知っておくべき内容がわかりやすくまとまっている.特に「教師あり学習」「分類」「回帰」で使う指標は以下のように整理されていてイメージしやすく,またそれぞれの指標の使い分けなども載っていた.

  • 分類問題
    • 混合行列
    • 正解率
    • 適合率
    • 再現率
    • F 値
    • AUC (Area Under the Curve)
  • 回帰問題
    • 平均二乗誤差
    • 決定係数

そして並行して読んでいる「仕事ではじめる機械学習 第2版」「3章 : 学習結果を評価するには」を読む前提としても役立った.

まとめ

「機械学習図鑑」を読んだ.入門者として機械学習を勉強するときには欠かせない一冊なのではないかと思う.当然ながら本書を読むだけで全てに精通できるわけではないけど,今までうまく理解できなかった書籍やウェブサイトを読めるようになったことは非常に大きな効果だったし,気付きもたくさんあった.そして,著者目線だと「本当に入門者でも挫折しないで読める書籍を書く技術」に驚いた.スゴイ!今後も何度も読み直すとは思うけど,素晴らしい一冊だった👏