2.3 教師あり機械学習アルゴリズム

2.3.1 サンプルデータセット

  • 人工的な単純なデータセットと、実世界の割と複雑なデータセットを使う。

2.3.1.1 人工的な単純なデータセット

単純なデータセットはmglearnで生成する。

  • forge: mglearn.datasets.make_forge()で生成する2クラス分類向けデータ。
    • 2つの特徴量と1つの2値目的変数をもつ。
X, y = mglearn.datasets.make_forge()
mglearn.discrete_scatter(X[:, 0], X[:, 1], y)
plt.legend(["Class 0", "Class 1"], loc = 4) # 凡例
plt.xlabel("第1特徴量")
plt.ylabel("第2特徴量")

  • wave: mglearn.datasets.make_waveで生成する回帰向けデータ。
    • 1つの特徴量と1つの目的変数を持つ。
X, y = mglearn.datasets.make_wave(n_samples = 40)
plt.plot(X, y, 'o')
plt.xlabel("特徴量")
plt.ylabel("目的変数")

2.3.1.2 実データ

実データはscikit-learnに入ってるものを使う。第1章でも説明したBunchクラスになっている。

  • cancer: ウィスコンシン乳癌データセット
    • 目的変数は良性(benign)と悪性(malignant)の2値。
    • 特徴量は30。
    • データポイントは569点。
from sklearn.datasets import load_breast_cancer
cancer = load_breast_cancer()
print(cancer.keys())
 ## dict_keys(['target', 'data', 'DESCR', 'target_names', 'feature_names'])
print(cancer.data.shape)
 ## (569, 30)
print(cancer.target_names)
 ## ['malignant' 'benign']
print(np.bincount(cancer.target))
 ## [212 357]
  • boston_housing: 1970年代のボストン近郊の住宅価格。
    • 住宅価格の中央値が目的変数。
    • 特徴量は13。
    • データポイントは506点。
from sklearn.datasets import load_boston
boston = load_boston()
print(boston.data.shape)
 ## (506, 13)
print(boston.feature_names)
 ## ['CRIM' 'ZN' 'INDUS' 'CHAS' 'NOX' 'RM' 'AGE' 'DIS' 'RAD' 'TAX' 'PTRATIO'
 ##  'B' 'LSTAT']
  • 特徴量同士の積を求めたりして、新しい特徴量を導出することを特徴量エンジニアリングと呼ぶ。
  • boston_housingに対し、重複ありで2つの特徴量の積を求め、データセットの拡張を試みる。
    • 作業が面倒なので既に拡張したものがmglearn.datasets.load_extended_boston()で読み込めます。
X, y = mglearn.datasets.load_extended_boston()
print(X.shape)
 ## (506, 104)