教師なし学習

Pythonで学ぶ教師なし学習

Benjamin Wilson

Director of Research at lateral.io

教師なし学習

  • 教師なし学習はデータ内のパターンを見つける
  • 例:購入履歴から顧客を分類(クラスタリング)する
  • 購買パターンを使ったデータの圧縮(次元削減)
Pythonで学ぶ教師なし学習

教師あり学習と教師なし学習

  • 教師あり学習は、予測タスクのためにパターンを見つける
  • 例:腫瘍を、良性/悪性(ラベル)に分類する
  • 教師なし学習はデータ内のパターンを見つける
  • ただし、特定の予測タスクに縛られない
Pythonで学ぶ教師なし学習

アヤメに関するデータセット

  • アヤメに関するさまざまな測定値を格納
  • 3種のアヤメ:
    • setosa
    • versicolor
    • virginica
  • 花弁の長さ、花弁の幅、がく片の長さ、がく片の幅(データセットの特徴量)

アヤメ

1 https://scikit-learn.org/stable/modules/generated/sklearn.datasets.load_iris.html
Pythonで学ぶ教師なし学習

配列・特徴量・サンプル

  • NumPyの二次元配列
  • 列に測定項目(=特徴量)
  • 行に個々のアヤメの測定値(=サンプル)が入る
Pythonで学ぶ教師なし学習

アヤメのデータは4次元

  • アヤメのサンプルが4次元空間の点となる
  • 次元 = 特徴量の数
  • 次元が高すぎて可視化できない
  • しかし、教師なし学習でデータの構造や傾向を把握できる
Pythonで学ぶ教師なし学習

K平均法(k-means)クラスタリング

  • クラスターをサンプルの中から見つけ出す
  • クラスター数の指定が必須
  • sklearn(scikit-learn)で実装
Pythonで学ぶ教師なし学習
print(samples)
[[ 5.   3.3  1.4  0.2]
 [ 5.   3.5  1.3  0.3]
 ...
 [ 7.2  3.2  6.   1.8]]
from sklearn.cluster import KMeans

model = KMeans(n_clusters=3)
model.fit(samples)
KMeans(n_clusters=3)
labels = model.predict(samples)

print(labels)
[0 0 1 1 0 1 2 1 0 1 ...]
Pythonで学ぶ教師なし学習

新しいサンプルのクラスタラベル

  • 新しいサンプルは既存のクラスタに割り当て可能
  • 各クラスターに含まれるサンプルの平均値(セントロイド)を記憶する
  • 新しいサンプル一つ一つに最も近いセントロイドを見つける
Pythonで学ぶ教師なし学習

新しいサンプルのクラスタラベル

print(new_samples)
[[ 5.7  4.4  1.5  0.4]
 [ 6.5  3.   5.5  1.8]
 [ 5.8  2.7  5.1  1.9]]
new_labels = model.predict(new_samples)

print(new_labels)
[0 2 1]
Pythonで学ぶ教師なし学習

散布図

  • がく片の長さと花弁の長さの散布図
  • 各ポイントがサンプル1つを表す
  • クラスターラベルごとに色分けしている
  • PyPlot(matplotlib.pyplot

散布図

Pythonで学ぶ教師なし学習

散布図

import matplotlib.pyplot as plt

xs = samples[:,0] ys = samples[:,2]
plt.scatter(xs, ys, c=labels)
plt.show()
Pythonで学ぶ教師なし学習

練習しましょう!

Pythonで学ぶ教師なし学習

Preparing Video For Download...