SlideShare une entreprise Scribd logo
1  sur  55
Télécharger pour lire hors ligne
「距離とクラスタリング」
九州大学 大学院システム情報科学研究院
情報知能工学部門
データサイエンス実践特別講座
備瀬竜馬, Diego Thomas, 末廣大貴
データ(ベクトル)間の距離、類似度
2
データ解析における「距離」とは?
●データ解析における「距離」
●要するにデータ間の類似度 (似てない具合)
●距離が小さい2データは「似ている」
●単位がある場合もない場合も
3
𝒙𝒙
𝒚𝒚
𝒛𝒛
距離がわかると何に使えるか?
実は超便利!
●データ間の「類似度」を定量的に比較できる
●「xとyは全然違う/結構似ている」 「xとyは28ぐらい違う」
●「xにとっては,yよりもzのほうが似ている」
●データ集合のグルーピングができる
●似たものとどおしでグループを作る
●データの異常度が測れる
●他に似たデータがたくさんあれば正常,
一つもなければ異常
[Goldstein, Uchida, PLoSONE, 2016]
ユークリッド距離 (1)
●地図上の2点 𝒙𝒙 =
𝑥𝑥1
𝑥𝑥2
, 𝒚𝒚 =
𝑦𝑦1
𝑦𝑦2
𝑥𝑥1
𝑥𝑥2
𝑦𝑦2
𝑦𝑦1
𝒙𝒙
𝒚𝒚
この間の距離は?
𝑥𝑥 − 𝑦𝑦 と記載
ユークリッド距離 (2)
●2次元の場合
●3次元の場合
𝒙𝒙と𝒚𝒚の距離の二乗
𝑥𝑥1
𝑥𝑥2
𝑦𝑦1
𝑦𝑦2
要素の差の二乗
要素の差の二乗
𝑥𝑥1
𝑥𝑥2
𝑥𝑥3
𝑦𝑦1
𝑦𝑦2
𝑦𝑦3
𝒙𝒙と𝒚𝒚の距離の二乗
要素の差の二乗
要素の差の二乗
要素の差の二乗
𝒙𝒙 𝒚𝒚
𝒙𝒙 𝒚𝒚
ユークリッド距離 (3)
●𝐷𝐷次元の場合
𝑥𝑥1
⋮
𝑥𝑥𝐷𝐷
𝑦𝑦1
⋮
𝑦𝑦𝐷𝐷
𝒙𝒙と𝒚𝒚の距離の二乗
要素の差の二乗
要素の差の二乗
𝒙𝒙 𝒚𝒚
⋮
というわけで,何次元ベクトルでも距離は計算可能
もちろん1次元ベクトル(数値)間の距離も計算可能
𝑥𝑥1 − 𝑦𝑦1
2
マンハッタン距離
L1距離
(マンハッタン距離)
ユークリッド距離
8
マンハッタン?
●斜めには行けない街
●平安京距離
●平城京距離
●札幌距離
でもいいかも
●「市街地距離」と
呼ばれることも
9
Google map
どのコースも同じ
マンハッタン距離!
マンハッタン距離:プログラミング (7)
10
●N次元の場合 𝒙𝒙 =
𝑥𝑥1
⋮
𝑥𝑥𝑁𝑁
, 𝒚𝒚 =
𝑦𝑦1
⋮
𝑦𝑦3
np.linalg.norm(x-y, ord=1) で計算できる
※ ユークリッド距離が「L2」ノルム、
マンハッタン距離が「L1」ノルムとも呼ばれるため
𝒙𝒙と𝒚𝒚の距離= 𝑥𝑥1 − 𝑦𝑦1 + ⋯ + 𝑥𝑥𝑁𝑁 − 𝑦𝑦𝑁𝑁
各要素の差の絶対値の和
ユークリッド距離で測る類似度
11
65536次元
ベクトル 𝒙𝒙
65536次元
ベクトル 𝒚𝒚
256 × 256 256 × 256
16957.99
人の目には 𝒛𝒛 より 𝒚𝒚 の方が 𝒙𝒙 に類似しているが、
ユークリッド距離だと、 𝒛𝒛 の方が 𝒙𝒙 からの距離が近い
256 × 256
65536次元
ベクトル 𝒛𝒛
画像間距離
𝒙𝒙 − 𝒚𝒚
画像間距離
𝒙𝒙 − 𝒚𝒚
12249.03 <
他の類似度
12
𝒙𝒙
𝒚𝒚
イメージ図
𝒛𝒛
<
16957.99
12249.03
輝度の強さが違うだけで、
ベクトルの方向は一緒
角度で類似度を測る
内積
●内積は角度を考慮した類似度
13
𝒙𝒙 � 𝒚𝒚 = 𝒙𝒙 𝒚𝒚 cos 𝜃𝜃
𝒚𝒚
𝒙𝒙
長さ= 𝒙𝒙
長さ= 𝒚𝒚
𝜃𝜃
cos 𝜃𝜃 =
𝒙𝒙 � 𝒚𝒚
𝒙𝒙 𝒚𝒚
各成分2乗して足して
ルートとったやつ
内積
●一定の大きさのベクトル𝒚𝒚を回転させながら𝒙𝒙と内積を
取ると...
14
𝒙𝒙
𝒚𝒚
𝒙𝒙 � 𝒚𝒚 = 𝟎𝟎
𝒙𝒙 � 𝒚𝒚 →最大
𝒙𝒙 � 𝒚𝒚 →最小 𝒙𝒙と𝒚𝒚が
同一方向なら大きい
逆方向なら小さい
𝒙𝒙と𝒚𝒚の
類似度に
使えそう!
正規化相関(コサイン類似度)
15
cos 𝜃𝜃 =
𝒙𝒙 � 𝒚𝒚
𝒙𝒙 𝒚𝒚
正規化相関
import numpy as np
#xとyの定義
x = np.array([60,180])
y = np.array([60,150])
#コサイン類似度
D = np.dot(x,y); # 内積
xd = np.linalg.norm(x); #||x||
yd = np.linalg.norm(y); #||y||
C = D/(xd*yd); # コサイン類似度
print(C) # 表示
正規化相関で測る類似度
16
65536次元
ベクトル 𝒙𝒙
65536次元
ベクトル 𝒚𝒚
256 × 256 256 × 256
1.0
256 × 256
65536次元
ベクトル 𝒛𝒛
画像間距離
コサイン類似度
画像間
コサイン類似度
0.932 <
まとめ:
numpy を使えば簡単
●ユークリッド距離
●マンハッタン距離
●内積
●コサイン
17
練習1:2つのデータ間の各類似度:
ユークリッド距離、マンハッタン距離、内積、コサイン類似度
を求めよう
18
𝒙𝒙 =
3
5
, 𝒚𝒚 =
6
1
のとき 各類似度は?
𝒙𝒙 =
3
5
2
, 𝒚𝒚 =
6
1
2
のとき 各類似度は?
距離を使ったちょっと高度な可視化(1)
●csvファイル” height_weight.csv”を読み込み、
「横軸:身長、縦軸:体重」としてプロットして、分布の形
状を確かめたい。ある点Aを別の色で表示してみたい。
色 マーカー
の形
マーカー
のサイズ
こうすればpandasで読み込んだ
データが一発でnumpy のデータセット
(複数のベクトル)にできます
可視化結果
距離を使ったちょっと高度な可視化(2)
●A=(180,75)からの各点へのユークリッド距離をそれぞれ
算出し、最も距離が遠い順に並び替えて、距離に応じて色
を変えて表示
小さい順に並べたときの
インデックスを返す関数
逆から並べる
例:np.argsort([2,1,3])=[1,0,2]
距離を使ったちょっと高度な可視化(2)
●距離に応じて色を変えて表示
# visualize
import matplotlib.cm as cm
count = 0
# 距離の近い順にプロット
for i in sinds:
row = vlist[i]
# 並び順に応じて色を決定
c = cm.hot(count/len(vlist))
# 決定した色を指定してプロット
plt.scatter(row[2],row[3],color=c)
count += 1
# 点Aの可視化
plt.scatter(A[0], A[1], c=‘green’,
marker=‘+’, s=60) 遠いほど赤い
K-Means
データのクラスタリング(分類)
データ集合をグルーピングする
●我々は「距離」や「類似度」を手に入れた
●結果,「与えられたデータ集合」を「それぞれ似たデータ
からなる幾つかのグループに分ける」ことが可能に!
24
クラスタリング(clustering)=
データの集合をいくつかの部分集合に分割する(グルーピング)
●各部分集合=「クラスタ」と呼ばれる
25
各クラスタから代表的なデータを選ぶと...
26
これらの代表データを見
るだけで,データ集合
全体の概略が見える
どういう分割がよいのか?
●𝑁𝑁個のデータを𝐾𝐾個に分割する方法はおよそ𝐾𝐾𝑁𝑁
通り
●100個のデータを10分割→およそ10100通り
●近くにあるデータが,なるべく同じ部分集合になるように
27
代表的なクラスタリング法:
K-means法(0)初期代表パターン
28
例えばランダム
に与える
代表的なクラスタリング法:
K-means法(1)学習パターン分割
29
代表パターンの
ファンクラブ
(支持者集合)
代表的なクラスタリング法:
K-means法(2)代表パターン更新
30
この中の学習
パターンの
平均に移動
代表的なクラスタリング法:
K-means法(1)学習パターン分割
31
代表的なクラスタリング法:
K-means法(2)代表パターン更新
32
以後,代表パターンが
動かなくなるまで反復
K-means:プログラミング
●ステップ0:
●データ入力
●クラスタ数 K の決定
33
K-means:プログラミング
●ステップ1:
●初期代表点の決定(ランダム)
34
K-means:プログラミング
●ステップ1:
●代表点の支持者決定
⇒最も近い代表点を支持する
距離を活用!
●ある点Xに着目
•各代表点までの距離を算出
35
A C
B
D
X
#XとAの距離の計算
Ad = numpy.linalg.norm(X-A)
K-means:プログラミング
●ステップ1:
●ある点Xに着目
●距離が最も近い代表点を決定
36
A C
B
D
X
K-means:プログラミング
●ステップ1:
●全ての点で代表点を決定
37
A
C
B
D
X
K-means:プログラミング
●ステップ2:代表点を更新
●各クラスタの支持者群の平均値を
代表点とする。
38
A
C
B
D
X
K-means:プログラミング
39
アルゴリズム
ステップ0
繰り返し
•代表点の選択
•代表点の更新
•終了チェック
0.01
K-meansクラスタリング
40
K-meansクラスタリング
41
K-meansクラスタリング
42
K-meansクラスタリング
43
K-meansクラスタリング
44
K-meansクラスタリング
45
K-meansクラスタリング
46
ライブラリを使った K-Means クラスタリング
クラスタの中心たち
各データがどのクラスタか
(クラスタ0~クラスタ3)
可視化も簡単
演習
演習1
●csvファイル” height_weight.csv”を読み込み、
A=(180,75)からの各点への正規化相間(類似度)を
それぞれ算出し、類似度の小さい順に並び替えて表示
●ヒント)1行目は項目名なので、無視
●距離の長さで色を変えてプロットせよ
●ヒント)import matplotlib.cm as cm
cm.hot
演習2
●クラスタリングの対象となるcsvデータ“data.csv”を
読み込み
●K=2, 3, 4 でそれぞれ K-means クラスタリングせよ
●余裕がある人は自分で K-means を実装せよ
51
アイリスデータ(1)
52
3クラス
Iris-setosa
Iris-versicolor
Iris-virginica
指標
sepal length
sepal width
petal length
petal width
https://archive.ics.uci.edu/ml/machine-learning-databases/iris/iris.data
アイリスデータ(2)
53
Sepal length
Sepal
width
・ Iris-setosa
・ Iris-versicolor
・ Iris-virginica
アイリスデータ(3)
54
Sepal length
Sepal
width
・ setosa
・ versicolor
・ virginica
Petal length
petal
width
Sepal length
Petal
length
Sepal width
petal
width
演習3
●“iris.csv”を読み込み、以下の2つの指標だけで、
K=3でクラスタリング可能か可視化せよ
●指標1
●sepal length
●sepal width
●指標2
●sepal width
●petal width
55
実際のクラスと
見比べてみよう
・自分で K-means を実装
・ライブラリの K-means
どっちもやってみましょう

Contenu connexe

Tendances

相関と因果について考える:統計的因果推論、その(不)可能性の中心
相関と因果について考える:統計的因果推論、その(不)可能性の中心相関と因果について考える:統計的因果推論、その(不)可能性の中心
相関と因果について考える:統計的因果推論、その(不)可能性の中心
takehikoihayashi
 
ベイズ統計入門
ベイズ統計入門ベイズ統計入門
ベイズ統計入門
Miyoshi Yuya
 

Tendances (20)

1 データとデータ分析
1 データとデータ分析1 データとデータ分析
1 データとデータ分析
 
データサイエンス概論第一=4-1 相関・頻度・ヒストグラム
データサイエンス概論第一=4-1 相関・頻度・ヒストグラムデータサイエンス概論第一=4-1 相関・頻度・ヒストグラム
データサイエンス概論第一=4-1 相関・頻度・ヒストグラム
 
データサイエンス概論第一=3-1 線形代数に基づくデータ解析の基礎
データサイエンス概論第一=3-1 線形代数に基づくデータ解析の基礎データサイエンス概論第一=3-1 線形代数に基づくデータ解析の基礎
データサイエンス概論第一=3-1 線形代数に基づくデータ解析の基礎
 
相関と因果について考える:統計的因果推論、その(不)可能性の中心
相関と因果について考える:統計的因果推論、その(不)可能性の中心相関と因果について考える:統計的因果推論、その(不)可能性の中心
相関と因果について考える:統計的因果推論、その(不)可能性の中心
 
距離とクラスタリング
距離とクラスタリング距離とクラスタリング
距離とクラスタリング
 
質的変数の相関・因子分析
質的変数の相関・因子分析質的変数の相関・因子分析
質的変数の相関・因子分析
 
MICの解説
MICの解説MICの解説
MICの解説
 
データサイエンス概論第一=3-3 回帰分析
データサイエンス概論第一=3-3 回帰分析データサイエンス概論第一=3-3 回帰分析
データサイエンス概論第一=3-3 回帰分析
 
PRML2.4 指数型分布族
PRML2.4 指数型分布族PRML2.4 指数型分布族
PRML2.4 指数型分布族
 
データサイエンス概論第一 6 異常検出
データサイエンス概論第一 6 異常検出データサイエンス概論第一 6 異常検出
データサイエンス概論第一 6 異常検出
 
マルコフ連鎖モンテカルロ法 (2/3はベイズ推定の話)
マルコフ連鎖モンテカルロ法 (2/3はベイズ推定の話)マルコフ連鎖モンテカルロ法 (2/3はベイズ推定の話)
マルコフ連鎖モンテカルロ法 (2/3はベイズ推定の話)
 
ベイズ統計入門
ベイズ統計入門ベイズ統計入門
ベイズ統計入門
 
5 クラスタリングと異常検出
5 クラスタリングと異常検出5 クラスタリングと異常検出
5 クラスタリングと異常検出
 
合成変量とアンサンブル:回帰森と加法モデルの要点
合成変量とアンサンブル:回帰森と加法モデルの要点合成変量とアンサンブル:回帰森と加法モデルの要点
合成変量とアンサンブル:回帰森と加法モデルの要点
 
3 平均・分散・相関
3 平均・分散・相関3 平均・分散・相関
3 平均・分散・相関
 
2 データのベクトル表現と集合
2 データのベクトル表現と集合2 データのベクトル表現と集合
2 データのベクトル表現と集合
 
データサイエンス概論第一=1-2 データのベクトル表現と集合
データサイエンス概論第一=1-2 データのベクトル表現と集合データサイエンス概論第一=1-2 データのベクトル表現と集合
データサイエンス概論第一=1-2 データのベクトル表現と集合
 
機械学習による生存予測
機械学習による生存予測機械学習による生存予測
機械学習による生存予測
 
ナレッジグラフとオントロジー
ナレッジグラフとオントロジーナレッジグラフとオントロジー
ナレッジグラフとオントロジー
 
一般化線形モデル (GLM) & 一般化加法モデル(GAM)
一般化線形モデル (GLM) & 一般化加法モデル(GAM) 一般化線形モデル (GLM) & 一般化加法モデル(GAM)
一般化線形モデル (GLM) & 一般化加法モデル(GAM)
 

Similaire à 九大_DS実践_距離とクラスタリング

Similaire à 九大_DS実践_距離とクラスタリング (6)

DS Exercise Course 4
DS Exercise Course 4DS Exercise Course 4
DS Exercise Course 4
 
データサイエンス概論第一=1-1 データとは
データサイエンス概論第一=1-1 データとはデータサイエンス概論第一=1-1 データとは
データサイエンス概論第一=1-1 データとは
 
データサイエンス概論第一=1-3 平均と分散
データサイエンス概論第一=1-3 平均と分散データサイエンス概論第一=1-3 平均と分散
データサイエンス概論第一=1-3 平均と分散
 
データサイエンス概論第一=0 まえがき
データサイエンス概論第一=0 まえがきデータサイエンス概論第一=0 まえがき
データサイエンス概論第一=0 まえがき
 
ICDE2014 Session 22 Similarity Joins
ICDE2014 Session 22 Similarity JoinsICDE2014 Session 22 Similarity Joins
ICDE2014 Session 22 Similarity Joins
 
全部Excelでやろうとして後悔するデータ分析
全部Excelでやろうとして後悔するデータ分析全部Excelでやろうとして後悔するデータ分析
全部Excelでやろうとして後悔するデータ分析
 

Plus de RyomaBise1 (6)

九大_DS実践_画像処理応用
九大_DS実践_画像処理応用九大_DS実践_画像処理応用
九大_DS実践_画像処理応用
 
九大_DS実践_画像処理基礎
九大_DS実践_画像処理基礎九大_DS実践_画像処理基礎
九大_DS実践_画像処理基礎
 
九大_DS実践_主成分分析
九大_DS実践_主成分分析九大_DS実践_主成分分析
九大_DS実践_主成分分析
 
九大_DS実践_統計分析
九大_DS実践_統計分析九大_DS実践_統計分析
九大_DS実践_統計分析
 
九大_DS実践_Python基礎その2
九大_DS実践_Python基礎その2九大_DS実践_Python基礎その2
九大_DS実践_Python基礎その2
 
九大_DS実践_Python基礎その1
九大_DS実践_Python基礎その1九大_DS実践_Python基礎その1
九大_DS実践_Python基礎その1
 

九大_DS実践_距離とクラスタリング