Pythonではじめる機械学習
――scikit-learnで学ぶ特徴量エンジニアリングと機械学習の基礎

[cover photo]
オライリー・ジャパンで書籍を購入:
定価3,740円

Ebook Storeで電子版を購入:
価格2,992円

Pythonの機械学習用ライブラリの定番、scikit-learnのリリースマネージャを務めるなど開発に深く関わる著者が、scikit-learnを使った機械学習の方法を、ステップバイステップで解説します。ニューラルネットを学ぶ前に習得しておきたい機械学習の基礎をおさえるとともに、優れた機械学習システムを実装し精度の高い予測モデルを構築する上で重要となる「特徴量エンジニアリング」と「モデルの評価と改善」について多くのページを割くなど、従来の機械学習の解説書にはない特長を備えています。

関連書籍

Pythonからはじめる数学入門
Python機械学習クックブック
Pythonではじめる教師なし学習
Pythonではじめるデータラングリング
Pythonデータサイエンスハンドブック
Python文法詳解
PyTorchとfastaiではじめるディープラーニング
scikit-learn、Keras、TensorFlowによる実践機械学習 第2版
動かして学ぶAI・機械学習の基礎
機械学習デザインパターン
機械学習による実用アプリケーション構築
機械学習のための特徴量エンジニアリング
実践 Python 3
戦略的データサイエンス入門
データサイエンス講義

目次
まえがき

1章 はじめに
    1.1 なぜ機械学習なのか?
        1.1.1 機械学習問題へのアプローチ械学習で解決可能な問題
        1.1.2 タスクを知り、データを知る
    1.2 なぜ Pythonなのか?
    1.3 scikit-learn
        1.3.1 scikit-learnのインストール
    1.4 必要なライブラリとツール
        1.4.1 Jupyter Notebook
        1.4.2 NumPy
        1.4.3 SciPy
        1.4.4 matplotlib
        1.4.5 pandas
        1.4.6 mglearn
    1.5 Python 2 vs. Python 3
    1.6 本書で用いているバージョン
    1.7 最初のアプリケーション:アイリスのクラス分類
        1.7.1 データを読む
        1.7.2 成功度合いの測定:訓練データとテストデータ
        1.7.3 最初にすべきこと:データをよく観察する
        1.7.4 最初のモデル: k-最近傍法
        1.7.5 予測を行う
        1.7.6 モデルの評価
    1.8 まとめと今後の展望

2章 教師あり学習
    2.1 クラス分類と回帰
    2.2 汎化、過剰適合、適合不足
        2.2.1 モデルの複雑さとデータセットの大きさ
    2.3 教師あり機械学習アルゴリズム
        2.3.1 サンプルデータセット
        2.3.2 k-最近傍法
        2.3.3 線形モデル
        2.3.4 ナイーブベイズクラス分類器
        2.3.5 決定木
        2.3.6 決定木のアンサンブル法
        2.3.7 カーネル法を用いたサポートベクタマシン
        2.3.8 ニューラルネットワーク(ディープラーニング)
    2.4 クラス分類器の不確実性推定
        2.4.1 決定関数( Decision Function)
        2.4.2 確率の予測
        2.4.3 多クラス分類の不確実性
    2.5 まとめと展望

3章 教師なし学習と前処理
    3.1 教師なし学習の種類
    3.2 教師なし学習の難しさ
    3.3 前処理とスケール変換
        3.3.1 さまざまな前処理
        3.3.2 データ変換の適用
        3.3.3 訓練データとテストデータを同じように変換する
        3.3.4 教師あり学習における前処理の効果
    3.4 次元削減、特徴量抽出、多様体学習
        3.4.1 主成分分析( PCA)
        3.4.2 非負値行列因子分解( NMF)
        3.4.3 t-SNEを用いた多様体学習
    3.5 クラスタリング
        3.5.1 k-meansクラスタリング
        3.5.2 凝集型クラスタリング
        3.5.3 DBSCAN
        3.5.4 クラスタリングアルゴリズムの比較と評価
        3.5.5 クラスタリング手法のまとめ
    3.6 まとめと展望

4章 データの表現と特徴量エンジニアリング
    4.1 カテゴリ変数
        4.1.1 ワンホットエンコーディング(ダミー変数)
        4.1.2 数値でエンコードされているカテゴリ
    4.2 ビニング、離散化、線形モデル、決定木
    4.3 交互作用と多項式
    4.4 単変量非線形変換
    4.5 自動特徴量選択
        4.5.1 単変量統計
        4.5.2 モデルベース特徴量選択
        4.5.3 反復特徴量選択
    4.6 専門家知識の利用
    4.7 まとめと展望

5章 モデルの評価と改良
    5.1 交差検証
        5.1.1 scikit-learnでの交差検証
        5.1.2 交差検証の利点
        5.1.3 層化 k分割交差検証と他の戦略
    5.2 グリッドサーチ
        5.2.1 単純なグリッドサーチ
        5.2.2 パラメータの過剰適合の危険性と検証セット
        5.2.3 交差検証を用いたグリッドサーチ
    5.3 評価基準とスコア
        5.3.1 最終的な目標を見失わないこと
        5.3.2 2クラス分類における基準
        5.3.3 多クラス分類の基準
        5.3.4 回帰の基準
        5.3.5 評価基準を用いたモデル選択
    5.4 まとめと展望

6章 アルゴリズムチェーンとパイプライン
    6.1 前処理を行う際のパラメータ選択
    6.2 パイプラインの構築
    6.3 パイプラインを用いたグリッドサーチ
    6.4 汎用パイプラインインターフェイス
        6.4.1 make_pipelineによる簡便なパイプライン生成
        6.4.2 ステップ属性へのアクセス
        6.4.3 GridSearchCV内のパイプラインの属性へのアクセス
    6.5 前処理ステップとモデルパラメータに対するグリッドサーチ
    6.6 グリッドサーチによるモデルの選択
    6.7 まとめと展望

7章 テキストデータの処理
    7.1 文字列として表現されているデータのタイプ
    7.2 例題アプリケーション:映画レビューのセンチメント分析
    7.3 Bag of Wordsによるテキスト表現
        7.3.1 トイデータセットに対する BoW
        7.3.2 映画レビューの BoW
    7.4 ストップワード
    7.5 tf.idfを用いたデータのスケール変換
    7.6 モデル係数の調査
    7.7 1単語よりも大きい単位の Bag-of-Words (n-グラム )
    7.8 より進んだトークン分割、語幹処理、見出し語化
    7.9 トピックモデリングと文書クラスタリング
        7.9.1 LDA(Latent Dirichlet Allocation)
    7.10 まとめと展望

8章 おわりに
    8.1 機械学習問題へのアプローチ
        8.1.1 人間をループに組み込む
    8.2 プロトタイプから運用システムへ
    8.3 運用システムのテスト
    8.4 独自 Estimatorの構築
    8.5 ここからどこへ行くのか
        8.5.1 理論
        8.5.2 他の機械学習フレームワークとパッケージ
        8.5.3 ランキング、推薦システム、その他の学習
        8.5.4 確率モデル、推論、確率プログラミング
        8.5.5 ニューラルネットワーク
        8.5.6 大規模データセットへのスケール
        8.5.7 名誉を得る
    8.6 結論

索引

ここで紹介する正誤表には、書籍発行後に気づいた誤植や更新された情報を掲載しています。以下のリストに記載の年月は、正誤表を作成し、増刷書籍を印刷した月です。お手持ちの書籍では、すでに修正が施されている場合がありますので、書籍最終ページの奥付でお手持ちの書籍の刷版、刷り年月日をご確認の上、ご利用ください。

Pythonではじめる機械学習 第1刷正誤表

2017年7月12日更新

p9、下から5行目
【誤】X = np.linspace(-10, 10, 100)
【正】x = np.linspace(-10, 10, 100)

p10、下から7行目
【誤】
import pandas as pd
【正】
import pandas as pd
from IPython import display

p17、下から13行目
【誤】これらの数値の意味は、配列iris[‘target_names’]で与えられる。
【正】これらの数値の意味は、配列iris_dataset[‘target_names’]で与えられる。

p141、下から3行目
【誤】
# 最初の2つの主成分に対してデータポイントを変換
print("Original shape: {}".format(str(X_scaled.shape)))
print("Reduced shape: {}".format(str(X_pca.shape)))
【正】
# 最初の2つの主成分に対してデータポイントを変換
X_pca = pca.transform(X_scaled)
print("Original shape: {}".format(str(X_scaled.shape)))
print("Reduced shape: {}".format(str(X_pca.shape)))

ここで紹介する正誤表には、書籍発行後に気づいた誤植や更新された情報を掲載しています。以下のリストに記載の年月は、正誤表を作成し、増刷書籍を印刷した月です。お手持ちの書籍では、すでに修正が施されている場合がありますので、書籍最終ページの奥付でお手持ちの書籍の刷版、刷り年月日をご確認の上、ご利用ください。

Pythonではじめる機械学習 第2刷正誤表

2017年12月6日更新

p49、In[28]の直前
【誤】
前述したように、このデータセットには導出された105の特徴量を持つ506のサンプルがある。
【正】
前述したように、このデータセットには導出された104の特徴量を持つ506のサンプルがある。

p54、Out[35]の下
【誤】
さらに、105の特徴量のうちのわずか4つしか使っていない。
【正】
さらに、104の特徴量のうちのわずか4つしか使っていない。

p54、In[36]の5行目(行頭のnを削除)
【誤】
nprint("Test set score: {:.2f}".format(lasso001.score(X_test, y_test)))
【正】
print("Test set score: {:.2f}".format(lasso001.score(X_test, y_test)))

p54、最後
【誤】 105の特徴量のうち、わずか33しか使っていない。
【正】 104の特徴量のうち、わずか33しか使っていない。

p76、6行目
【誤】
ルートから右の枝をたどると、worst radius <= 16.795によって作られるノードには、
【正】
ルートから右の枝をたどると、worst radius > 16.795によって作られるノードには、

p76、10行目
【誤】
ルートから左に行った場合、つまりworst radius > 16.795の場合になるのは、
【正】
ルートから左に行った場合、つまりworst radius <= 16.795の場合になるのは、

p139、12行目
【誤】
このデータセットには特徴量が30もあるので、30×14=420の散布図ができてしまうのだ。
【正】
このデータセットには特徴量が30もあるので、30×29 / 2=435の散布図ができてしまうのだ。

p204、囲みの最後
【誤】
表3-1X_trainy_trainは訓練データと訓練ラベル、X_testy_testはテストデータとテストラベルである。
【正】
表3-1X_trainy_trainは訓練データと訓練ラベル、X_testはテストデータである。

p280、下から7行目
【誤】
ダミークラス分類器のf-値は0.13だが、(ロジスティック回帰では0.89)、「9以外」を陽性とすると、0.90対0.99となってしまい、双方ともかなり良いように見えてしまう。
【正】
ダミークラス分類器のf-値は0.10だが、(ロジスティック回帰では0.89)、「9以外」を陽性とすると、0.91対0.99となってしまい、双方ともかなり良いように見えてしまう。

p283、注意
【誤】
スレッショルドを設定する場合には、テストセットを使わないように注意しよう。
【正】
ここでは話を簡単にするためにテストセットの結果を用いてスレッショルドを設定したが、実際にはテストセットを使ってはいけない。

p331、数式の下4行目
【誤】 ユークリッド距離になるようにスケール変換を行う。
【正】 ユークリッドになるようにスケール変換を行う*2
*2 これは各文書の個々の特徴量を、その文書のすべての特徴量の自乗和の平方根で割ることを意味する。

p331、Out[23]の直下
【誤】
この結果からわかるように、ワード頻度だけを用いるのに比べて
【正】
この場合にはtf-idf変換を行っても性能は向上しなかった。

p355、最終行
【誤】
和書未刊
【正】
邦題『バンディットアルゴリズムによる最適化手法』オライリー・ジャパン、電子書籍のみ

ここで紹介する正誤表には、書籍発行後に気づいた誤植や更新された情報を掲載しています。以下のリストに記載の年月は、正誤表を作成し、増刷書籍を印刷した月です。お手持ちの書籍では、すでに修正が施されている場合がありますので、書籍最終ページの奥付でお手持ちの書籍の刷版、刷り年月日をご確認の上、ご利用ください。


■P.49 In[28]の直前(p36では特徴量が104となっている)
【誤】前述したように、このデータセットには導出された105の特徴量を持つ506のサンプルがある。
【正】前述したように、このデータセットには導出された104の特徴量を持つ506のサンプルがある。

■P.54 Out[35]の下
【誤】さらに、105の特徴量のうちのわずか4つしか使っていない。
【正】さらに、104の特徴量のうちのわずか4つしか使っていない。

■P.54 In[36]の5行目(行頭のnを削除)
【誤】nprint("Test set score: {:.2f}".format(lasso001.score(X_test, y_test)))
【正】print("Test set score: {:.2f}".format(lasso001.score(X_test, y_test)))

■P.54 最後
【誤】105の特徴量のうち、わずか33しか使っていない。
【正】104の特徴量のうち、わずか33しか使っていない。

■P.76 6行目
【誤】ルートから右の枝をたどると、worst radius <= 16.795によって作られるノードには、
【正】ルートから右の枝をたどると、worst radius > 16.795によって作られるノードには、

■P.76 10行目
【誤】ルートから左に行った場合、つまりworst radius > 16.795の場合になるのは、
【正】ルートから左に行った場合、つまりworst radius <= 16.795の場合になるのは、

■P.139 12行目
【誤】このデータセットには特徴量が30もあるので、30×14=420の散布図ができてしまうのだ。
【正】このデータセットには特徴量が30もあるので、30×29 / 2=435の散布図ができてしまうのだ。

■P.204 囲みの最後
【誤】表3-1のX_trainとy_trainは訓練データと訓練ラベル、X_testとy_testはテストデータとテストラベルである。
【正】表3-1のX_trainとy_trainは訓練データと訓練ラベル、X_testはテストデータである。

■P.280 下から7行目
【誤】ダミークラス分類器のf-値は0.13だが、(ロジスティック回帰では0.89)、「9以外」を陽性とすると、0.90対0.99となってしまい、双方ともかなり良いように見えてしまう。
【正】ダミークラス分類器のf-値は0.10だが、(ロジスティック回帰では0.89)、「9以外」を陽性とすると、0.91対0.99となってしまい、双方ともかなり良いように見えてしまう。

■P.283 サソリアイコン
【誤】スレッショルドを設定する場合には、テストセットを使わないように注意しよう。
【正】ここでは話を簡単にするためにテストセットの結果を用いてスレッショルドを設定したが、実際にはテストセットを使ってはいけない。
※p284ページずれ

■P.331 数式修正
【誤】tfidf (w, d) = tf log (N + 1 / Nw + 1) + 1
【正】tfidf (w, d) = tf (log (N + 1 / Nw + 1) + 1)

■P.331 数式の下4行目
【誤】ユークリッド距離
【正】ユークリッド長

■P.331 「スケール変換を行う。」に脚注追加
*2 これは各文書の個々の特徴量を、その文書のすべての特徴量の自乗和の平方根で割ることを意味する。

■P.331 Out[23]の直下
【誤】この結果からわかるように、ワード頻度だけを用いるのに比べて
【正】この場合にはtf-idf変換を行っても性能は向上しなかった。

ここで紹介する正誤表には、書籍発行後に気づいた誤植や更新された情報を掲載しています。以下のリストに記載の年月は、正誤表を作成し、増刷書籍を印刷した月です。お手持ちの書籍では、すでに修正が施されている場合がありますので、書籍最終ページの奥付でお手持ちの書籍の刷版、刷り年月日をご確認の上、ご利用ください。


■P.v、下から3行目
【誤】http://statweb.stanford.edu/~tibs/ElemStatLearn/
【正】http://web.stanford.edu/~hastie/ElemStatLearn/

■P.69、下から11行目
【誤】追加されたされたかの
【正】追加されたの

■P.71、上から4行目
【誤】75データポイント
【正】50データポイント

■P.71、図2-23
● Class 1 クラス0
▲ Class 0 クラス1
を入れる。

■P.71、下から5行目
【誤】75点とクラス1に属する75点を示す。
【正】50点とクラス1に属する50点を示す。

■P.297、上から1-3行目(マイナス2行)
【誤】
print("Test set AUC: {:.3f}".format(
roc_auc_score(y_test, grid.decision_function(X_test))))
print("Test set accuracy: {:.3f}".format(grid.score(X_test, y_test)))
【正】
print("Test set AUC: {:.3f}".format(grid.score(X_test, y_test)))

■P.297、上から9行目(マイナス1行)
【誤】
Test set accuracy: 1.000 テストセットの精度
【正】
※1行トル

■P.366、「statsmodelパッケージ 358」と「T」の間に次の1行入れる
SVM(サポートベクタマシン) 57, 90, 95-102, 254-255

ここで紹介する正誤表には、書籍発行後に気づいた誤植や更新された情報を掲載しています。以下のリストに記載の年月は、正誤表を作成し、増刷書籍を印刷した月です。お手持ちの書籍では、すでに修正が施されている場合がありますので、書籍最終ページの奥付でお手持ちの書籍の刷版、刷り年月日をご確認の上、ご利用ください。


※2018年7月更新。

■P.6 下から7行目
【誤】ディストリビューションPython(x,y)
【正】ディストリビューション。Python(x,y)

■P.10 下から11-12行目
【誤】『Pythonによるデータサイエンス入門』
【正】『Pythonによるデータ分析入門』

■P.48 上から2行目
【誤】学習する方法と、とモデル
【正】学習する方法とモデル

■P.113 脚注2行目
【誤】ということ意味する。
【正】ということを意味する。

■P.113 脚注3行目
【誤】犯していることがわかるこれは、
【正】犯していることがわかる。これは、

■P.144 上から7行目
【誤】PCAをのもう1つ
【正】PCAのもう1つ

■P.186 下から7行目
【誤】含める。(図3-39を参照)。
【正】含める(図3-39を参照)。

ここで紹介する正誤表には、書籍発行後に気づいた誤植や更新された情報を掲載しています。以下のリストに記載の年月は、正誤表を作成し、増刷書籍を印刷した月です。お手持ちの書籍では、すでに修正が施されている場合がありますので、書籍最終ページの奥付でお手持ちの書籍の刷版、刷り年月日をご確認の上、ご利用ください。


※2019年5月更新。

■P.viii 2行目
【誤】IPythonノートブック
【正】Jupyter Notebook

■P.10 In[6]:の1-2行目
【誤】
import pandas as pd
from IPython import display
【正】
import pandas as pd

■P.13 Out[8]:差し替え
【誤】
Python version: 3.5.2 |Anaconda 4.1.1 (64-bit)| (default, Jul 2 2016, 17:53:06)
[GCC 4.4.7 20120313 (Red Hat 4.4.7-1)]
pandas version: 0.18.1
matplotlib version: 1.5.1
NumPy version: 1.11.1
SciPy version: 0.17.1
IPython version: 5.1.0
scikit-learn version: 0.18
【正】
Python version: 3.6.1 |Continuum Analytics, Inc.| (default, May 11 2017, 13:04:09)
[GCC 4.2.1 Compatible Apple LLVM 6.0 (clang-600.0.57)]
pandas version: 0.24.2
matplotlib version: 3.0.3
NumPy version: 1.16.3
SciPy version: 1.2.1
IPython version: 6.5.0
scikit-learn version: 0.20.3

■P.13 サソリの1行目
【誤】0.18
【正】0.20

■P.29 5行目
【誤】つけない
【正】付けない

■P.29 表2-1下の1行目
【誤】45歳
【正】45才

■P.29 下から4行目
【誤】考えついた
【正】考え付いた

■P.30 2行目
【誤】50歳
【正】50才

■P.31 7行目
【誤】45歳
【正】45才

■P.40 1行目
【誤】全く
【正】まったく

■P.54 17行目
【誤】度合
【正】度合い

■P.57 2行目
【誤】図る
【正】測る

■P.61 サソリの最終行
【誤】つば
【正】ツバ

■P.72 下から7行目
【誤】行っていることなる。
【正】行っていることになる。

■P.73 下から10行目
【誤】重視すぎて
【正】重視しすぎて

■P.86 下から10行目
【誤】補なって
【正】補って

■P.105 1行目
【誤】図2-39
【正】図2-45

■P.113 図2-54
【誤】重み行列の例
【正】重み行列の列

■P.129 下から8行目
【誤】平均値の
【正】平均値と

■P.147 下から8行目
【誤】代わって
【正】変わって

■P.153 6行目
【誤】原点(0, 0)
【正】原点(0, 0)

■P.185 下から3行目
【誤】取扱
【正】取り扱い

■P.190 12行目
【誤】興味のあるものになっているかは、
【正】ユーザにとって興味深いものになっていることを確認するには、

■P.203 12行目
【誤】納めれば
【正】収めれば

■P.206 表4-1の注釈
【誤】hours-per-week occupation:週あたりの労働時間
【正】hours-per-week:週あたりの労働時間、occupation:職業

■P.208 In[1]:の1行目
【誤】
import pandas as pd
【正】
import pandas as pd
import os

■P.208 表4-3の注釈
【誤】hours-per-week occupation:週あたりの労働時間
【正】hours-per-week:週あたりの労働時間、occupation:職業

■P.210 In[5]:の1行目
【誤】features = data_dummies.ix[:, 'age':'occupation_ Transport-moving']
【正】features = data_dummies.loc[:, 'age':'occupation_ Transport-moving']

■P.223 下から1-2行目
【誤】
X_train, X_test, y_train, y_test = train_test_split
    (boston.data, boston.target, random_state=0)
【正】
X_train, X_test, y_train, y_test = train_test_split(
    boston.data, boston.target, random_state=0)

■P.238 In[51]:
【誤】
# ターゲット値(レンタル数)を抽出
y = citibike.values
# 時刻を"%s"でPOSIX時刻に変換
X = citibike.index.astype("int64").reshape(-1, 1) // 10**9
【正】
# ターゲット値(レンタル数)を抽出
y = citibike.values
# 10**9 で割ってPOSIX時刻に変換
X = citibike.index.astype("int64").to_numpy().reshape(-1, 1) // 10**9

■P.239 下から2行目
【誤】X_hour = citibike.index.hour.reshape(-1, 1)
【正】X_hour = citibike.index.hour.to_numpy().reshape(-1, 1)

■P.240 In[55]:の1-2行目
【誤】
X_hour_week = np.hstack([citibike.index.dayofweek.reshape(-1, 1),
                         citibike.index.hour.reshape(-1, 1)])
【正】
X_hour_week = np.hstack([citibike.index.dayofweek.to_numpy().reshape(-1, 1),
                         citibike.index.hour.to_numpy().reshape(-1, 1)])

■P.248 7行目
【誤】はいって
【正】入って

■P.254 In[16]:
【誤】mglearn.plots.plot_label_kfold()
【正】mglearn.plots.plot_group_kfold()

■P.254 図5-4
【誤】LabelKFold
【正】GroupKFold

■P.268 3行目
【誤】手続
【正】手続き

■P.281 In[51]:の2-3行目
【誤】
X, y = make_blobs(n_samples=(400, 50), centers=2, cluster_std=[7.0, 2],
                  random_state=22)
【正】
X, y = make_blobs(n_samples=(400, 50), cluster_std=[7.0, 2], random_state=22)

■P.283 下から2行目
【誤】すべての
【正】すべてを

■P.284 In[57]:の2-3行目
【誤】
X, y = make_blobs(n_samples=(4000, 500), centers=2, cluster_std=[7.0, 2],
                  random_state=22)
【正】
X, y = make_blobs(n_samples=(4000, 500), cluster_std=[7.0, 2], random_state=22)

■P.284 In[57]:の最終行
【誤】
plt.ylabel("Recall")
【正】
plt.ylabel("Recall")
plt.legend(loc="best")

■P.287 下から3行目
【誤】領域のなので
【正】領域なので

■P.287 脚注
【誤】大体
【正】だいたい

■P.289 4行目
【誤】わすれない
【正】忘れない

■P.292 4か所
【誤】他クラス
【正】多クラス

■P.294 下から10行目
【誤】他クラス
【正】多クラス

■P.297 13行目
【誤】r2(R2スコア)mean_squared_error
【正】r2(R2スコア)、mean_squared_error

■P.298 脚注
【誤】『戦略的データサイエンス』
【正】『戦略的データサイエンス入門』

■P.308 2行目
【誤】変換機
【正】変換器

■P.318 9行目
【誤】だれか
【正】誰か

■P.327 下から12行目
【誤】しかけ
【正】仕掛け

■P.328 2行目
【誤】現われた
【正】現れた

■P.331 5行目
【誤】L2正則化
【正】L2正規化

■P.331 脚注
【誤】自乗和
【正】二乗和

■P.341 下から9行目
【誤】doc_spacy = en_nlp(document, entity=False, parse=False)
【正】doc_spacy = en_nlp(document)

■P.342 下から18行目
【誤】cv = StratifiedShuffleSplit(n_iter=5, test_size=0.99,
【正】cv = StratifiedShuffleSplit(n_splits=5, test_size=0.99,

■P.348 9-10行目
【誤】
# このトピックを最も重要としている5つの文書を表示
    # 最初の2文を表示
【正】
# このトピックを最も重要としている5つの文書を表示
for i in music[:10]:
    # 最初の2文を表示

■P.353 7行目
【誤】ためし
【正】試し

■P.357 下から12行目
【誤】前書き
【正】まえがき

■P.359 10行目
【誤】大体
【正】だいたい

ここで紹介する正誤表には、書籍発行後に気づいた誤植や更新された情報を掲載しています。以下のリストに記載の年月は、正誤表を作成し、増刷書籍を印刷した月です。お手持ちの書籍では、すでに修正が施されている場合がありますので、書籍最終ページの奥付でお手持ちの書籍の刷版、刷り年月日をご確認の上、ご利用ください。

p60、In[44]:


【誤】
plt.plot(logreg.coef_.T, 'o', label="C=1")
plt.plot(logreg100.coef_.T, '^', label="C=100")
plt.plot(logreg001.coef_.T, 'v', label="C=0.001")
plt.xticks(range(cancer.data.shape[1]), cancer.feature_names, rotation=90)
plt.hlines(0, 0, cancer.data.shape[1])

【正】
plt.plot(logreg.coef_.T, 'o', label="C=1")
plt.plot(logreg100.coef_.T, '^', label="C=100")
plt.plot(logreg001.coef_.T, 'v', label="C=0.01")
plt.xticks(range(cancer.data.shape[1]), cancer.feature_names, rotation=90)
plt.hlines(0, 0, cancer.data.shape[1])

p61、サソリのコラム5行目


【誤】

は係数は負だが、C=0.001に対しては正になっている。


【正】

は係数は負だが、C=0.01に対しては正になっている。


p61、図2-17、右上の凡例


【誤】
C=1
C=100
C=0.001

【正】
C=1
C=100
C=0.01

p120、In[112]:、6行目


【誤】
for ax in axes:
    # 訓練データポイントとテストデータポイントをプロット
    # plot training and test points
    mglearn.discrete_scatter(X_test[:, 0], X_test[:, 1], y_test,
                             markers='^', ax=ax)

【正】
for ax in axes:
    # 訓練データポイントとテストデータポイントをプロット
    mglearn.discrete_scatter(X_test[:, 0], X_test[:, 1], y_test,
                             markers='^', ax=ax)

p163、9行目


【誤】
plt.xlabel("t-SNE feature 0")
plt.xlabel("t-SNE feature 1")

【正】
plt.xlabel("t-SNE feature 0")
plt.ylabel("t-SNE feature 1")

p179、図3-34すぐ下の段落


【誤】

予測される通り、クラスタは完全に再現されている。scikit-learnの凝集型クラスタリング実装では、クラスタ数を指定しなければならないが、凝集型クラスタリングメソッドは正しいクラスタ数を選択する手助けをしてくれる。次は、これについて議論する。


【正】

予測した通り、クラスタが完全に再現されている。scikit-learnの凝集型クラスタリング実装では、あらかじめクラスタ数を指定しなければならないが、凝集型クラスタリングメソッドの結果を用いると、適切なクラスタ数の選択が容易になる。次節でこれについて説明する。


p179、最後の段落


【誤】

凝集型クラスタリングを行うと、いわゆる階層型クラスタリング(hierarchical clustering)が行われる。このクラスタリングは同じ手続きを繰り返すことで行われる。すべての点は、1点しか含まれていないクラスタから最後のクラスタのいずれかへ向かっていく。繰り返しの各ステップ終了時のクラスタ数はそれぞれ異なる。すべての可能なクラスタリングを合わせて表示すると役に立つ場合がある。図3-35は、図3-33で示したすべてのクラスタリングを重ねて表示したものである。これを見ると、それぞれのクラスタがより小さいクラスタに分割されていることがわかる。


【正】

凝集型クラスタリングを行うと、いわゆる階層型クラスタリング(hierarchical clustering)が得られる。凝集型クラスタリングは同じ手続きを繰り返すことで行われる。すべての点は、その1点のみで構成されるクラスタからはじまり、最終的に得られるクラスタのいずれかに向けて徐々に凝集していく。この繰り返しのステップごとにクラスタの数が減っていく。この過程で得られるすべてのクラスタを重ねて表示するとわかりやすい。図3-35は、図3-33で示したすべてのクラスタを重ねて表示したものである。これを見ると、それぞれのクラスタがより小さいクラスタに分割されていることがわかる。


p182、17行目


【誤】

DNSCANは、クラスタはデータ中で高密度領域を構成していて


【正】

DBSCANは、クラスタはデータ中で高密度領域を構成していて


p199、下から4行目


【誤】

k-meansで行ったように、10クラスタを可視化してみよう(図3-46)。


【正】

k-meansで行ったのと同様に、凝集型クラスタリングで得た10クラスタを可視化してみよう(図3-46)。


p213、表4-6、脚注


【誤】

age:年齢、hours-per-week:週あたりの労働時間、workclass:雇用形態、Federal-gov:国家公務員、Local-gov:地方公務員、occupation:職業、Teck-support:技術支援、Transport-moving:輸送、income:収入


【正】

Integer Feature:整数特徴量、Categorical Feature:カテゴリ特徴量


p217、図4-2、凡例の訳


【誤】
ビン分割した決定木
ビン分割した線形回帰

【正】
ビン分割した線形回帰
ビン分割した決定木

p224、12行目


【誤】
Out[28]:

【正】
Out[27]:

p300、最終行


【誤】

交差検証の過程では分割されたデータの一部が訓練データとなり、


【正】

交差検証の過程では分割されたデータの一部が訓練用分割となり、


p301、1行目


【誤】

テストデータになる。テストデータとなった部分は、訓練データとなった部分を用いて訓練されたモデルの新しいデータに対する性能を評価するために用いられる。しかし、実は既に、スケール変換する際に、テストデータとなった部分に含まれている情報を使ってしまっている。交差検証で用いるテストデータとして使う部分は、訓練データセットの一部であり、データの正しいスケールを決めるために、訓練データセット全体の情報を使っているからだ。


【正】

検証用分割になる。検証用分割となった部分は、訓練用分割となった部分を用いて訓練されたモデルの新しいデータに対する性能を評価するために用いられる。しかし、実は既に、スケール変換する際に、検証用分割となった部分に含まれている情報を使ってしまっている。交差検証で用いる検証用分割として使う部分は、訓練データセットの一部であり、データの正しいスケールを決めるために、訓練データセット全体の情報を使っているからだ。


p301、最後の段落


【誤】

つまり、モデル構築過程において、テストデータはまったく新しいデータでなければならないのに、この場合には交差検証のテストデータがその要件を満たしていない。テストデータになるべき部分の情報がモデル構築過程にリークしてしまっている。


【正】

つまり、モデル構築過程において、検証データはまったく新しいデータでなければならないのに、この場合には交差検証の検証データがその要件を満たしていない。検証データになるべき部分の情報がモデル構築過程にリークしてしまっている。

Feedback

皆さんのご意見をお聞かせください。ご購入いただいた書籍やオライリー・ジャパンへのご感想やご意見、ご提案などをお聞かせください。より良い書籍づくりやサービス改良のための参考にさせていただきます。
[feedbackページへ]