rによるクラスター分析

43
によるクラスター分析 入門 ~階層的クラスター編~ 1 ※いろいろなサイト・本を 自分なりにまとめてみました。

Upload: hiro47

Post on 25-Jun-2015

4.451 views

Category:

Data & Analytics


0 download

TRANSCRIPT

Page 1: Rによるクラスター分析

によるクラスター分析 入門 ~階層的クラスター編~

1

※いろいろなサイト・本を  自分なりにまとめてみました。

Page 2: Rによるクラスター分析

みなさん 2

Page 3: Rによるクラスター分析

突然ですが 3

Page 4: Rによるクラスター分析

この選手

4

知ってますか

Page 5: Rによるクラスター分析

打ってよし!投げてよし!

大 谷

翔 平

5

Page 6: Rによるクラスター分析

投手でも野手でもある大谷選手をほかの選手と比較したら誰と似ているのだろう・・・

Question

6

Page 7: Rによるクラスター分析

投手でも野手でもある大谷選手をほかの選手と比較したら誰と似ているのだろう・・・

Question

クラスター分析で見てみよう…

7

Page 8: Rによるクラスター分析

What’s cluster analysis ? データのパターンが似ている個体を 同じグループにまとめるための手法

8

Page 9: Rによるクラスター分析

Clustering process ① データから距離(類似度)を求める   (ユークリッド距離・最大距離・マンハッタン距離・キャンベラ距離・

  バイナリ距離・ミンコウスキー距離)

② 分析の方法を決める   (最近隣法・最遠隣法・群平均法・重心法・メディアン法・ウォード法)

③ ②の方法のコーフェン行列を求める

④ コーフェン行列に基づいて樹形図を作成する

⑤ 結果について検討する 9

Page 10: Rによるクラスター分析

Clustering process ① データから距離(類似度)を求める   (ユークリッド距離・最大距離・マンハッタン距離・キャンベラ距離・

  バイナリ距離・ミンコウスキー距離)

② 分析の方法を決める   (最近隣法・最遠隣法・群平均法・重心法・メディアン法・ウォード法)

③ ②の方法のコーフェン行列を求める

④ コーフェン行列に基づいて樹形図を作成する

⑤ 結果について検討する 10

Page 11: Rによるクラスター分析

About data. 使用するデータ 規定投球回の1/3以上を投げているパ・リーグの投手のデータ : 57行16列

規定打席数の1/3以上打席に立っているパ・リーグの野手のデータ : 76行15列

11

Page 12: Rによるクラスター分析

ユークリッド 最大距離 マンハッタン

キャン ベラ バイナリ ミンコウ

スキー

About distance.

12

↑ のデータを R で test という名前でインポート(rownamesに名前、データフレームに防御率~自責点)

> dist(test, method=“euclidean”) # ユークリッド距離        田中 将大 金子 千尋 金子 千尋 74.41021 大谷 翔平 595.70664  657.63110

> test[1,] - test[2,] # 田中 将大と金子 千尋を比較 防御率 試合数 勝利 敗北 セーブ ホールド 勝率 対戦打者数 投球回 被安打 被本塁打 フォアボール デッドボール 奪三振 失点 自責点 -0.74 -1 9 -8 1 0 0.348 -59 -11.1 2 -4 -26 0 -17 -20 -20> sqrt(sum((test[1,] - test[2,])^2))[1] 74.41021

※普通、標準化して距離を求めますが、ここでは割愛

Page 13: Rによるクラスター分析

ユークリッド 最大距離 マンハッタン

キャン ベラ バイナリ ミンコウ

スキー

About distance.

13

↑ のデータを R で test という名前でインポート(rownamesに名前、データフレームに防御率~自責点)

> dist(test, method=“maximum”) # 最大距離 田中 将大 金子 千尋 金子 千尋 59 大谷 翔平 548 607

> test[1,] - test[2,] # 田中 将大と金子 千尋を比較 防御率 試合数 勝利 敗北 セーブ ホールド 勝率 対戦打者数 投球回 被安打 被本塁打 フォアボール デッドボール 奪三振 失点 自責点 -0.74 -1 9 -8 1 0 0.348 -59 -11.1 2 -4 -26 0 -17 -20 -20> max(abs(test[1,] - test[2,])) # 最大距離の算出方法[1] 59

※普通、標準化して距離を求めますが、ここでは割愛

Page 14: Rによるクラスター分析

ユークリッド 最大距離 マンハッタン

キャン ベラ バイナリ ミンコウ

スキー

About distance.

14

↑ のデータを R で test という名前でインポート(rownamesに名前、データフレームに防御率~自責点)

> dist(test, method=“manhattan”) # マンハッタン距離 田中 将大 金子 千尋 金子 千尋 179.188 大谷 翔平 1000.760 1152.468

> test[1,] - test[2,] # 田中 将大と金子 千尋を比較 防御率 試合数 勝利 敗北 セーブ ホールド 勝率 対戦打者数 投球回 被安打 被本塁打 フォアボール デッドボール 奪三振 失点 自責点 -0.74 -1 9 -8 1 0 0.348 -59 -11.1 2 -4 -26 0 -17 -20 -20> sum(abs(test[1,] - test[2,])) # マンハッタン距離の算出方法[1] 179.188

※普通、標準化して距離を求めますが、ここでは割愛

Page 15: Rによるクラスター分析

ユークリッド 最大距離 マンハッタン

キャン ベラ バイナリ ミンコウ

スキー

About distance.

15

↑ のデータを R で test という名前でインポート(rownamesに名前、データフレームに防御率~自責点) > dist(test, method=“canberra”) # キャンベラ距離 田中 将大 金子 千尋 金子 千尋 4.059966 大谷 翔平 6.387633 7.476160

> test[1,] - test[2,] # 田中 将大と金子 千尋を比較 防御率 試合数 勝利 敗北 セーブ ホールド 勝率 対戦打者数 投球回 被安打 被本塁打 フォアボール デッドボール 奪三振 失点 自責点 -0.74 -1 9 -8 1 0 0.348 -59 -11.1 2 -4 -26 0 -17 -20 -20> sum(abs(test[1,] - test[2,]) / (abs(test[1,]) + abs(test[2,])))[1] NaN # 分母に0があるため(ホールド)計算できない(dist()では、それ以外の値の平均を代入する)> A <- abs(test[1,-6] - test[2,-6]) / (abs(test[1,-6]) + abs(test[2,-6]))> sum(A) + mean(as.matrix(A))[1] 4.059966

※普通、標準化して距離を求めますが、ここでは割愛

Page 16: Rによるクラスター分析

ユークリッド 最大距離 マンハッタン

キャン ベラ バイナリ ミンコウ

スキー

About distance.

16

↑ のデータを R で test という名前でインポート(rownamesに名前、データフレームに防御率~自責点)

> dist(test, method=“binary”) # バイナリ距離 2進法による異なるビットの割合 一般にデータが 0,1 のときに用いるので省略

※普通、標準化して距離を求めますが、ここでは割愛

Page 17: Rによるクラスター分析

ユークリッド 最大距離 マンハッタン

キャン ベラ バイナリ ミンコウ

スキー

About distance.

17

↑ のデータを R で test という名前でインポート(rownamesに名前、データフレームに防御率~自責点)

> dist(test, method=“minkowski”,p = 3) # ミンコウスキー距離 田中 将大 金子 千尋 金子 千尋 62.70502 大谷 翔平 556.07350 615.24519

> test[1,] - test[2,] # 田中 将大と金子 千尋を比較 防御率 試合数 勝利 敗北 セーブ ホールド 勝率 対戦打者数 投球回 被安打 被本塁打 フォアボール デッドボール 奪三振 失点 自責点 -0.74 -1 9 -8 1 0 0.348 -59 -11.1 2 -4 -26 0 -17 -20 -20> sum(abs(test[1,] - test[2,])^3)^(1/3)[1] 62.70502

※普通、標準化して距離を求めますが、ここでは割愛

Page 18: Rによるクラスター分析

Clustering process ① データから距離(類似度)を求める   (ユークリッド距離・最大距離・マンハッタン距離・キャンベラ距離・

  バイナリ距離・ミンコウスキー距離)

② 分析の方法を決める   (最近隣法・最遠隣法・群平均法・重心法・メディアン法・ウォード法)

③ ②の方法のコーフェン行列を求める

④ コーフェン行列に基づいて樹形図を作成する

⑤ 結果について検討する 18

Page 19: Rによるクラスター分析

About clustering.

19

Page 20: Rによるクラスター分析

About clustering.

きっと文章で聞いた方がわかりやすいです 20

Page 21: Rによるクラスター分析

最近隣法 最遠隣法

群平均法 重心法 メディ

アン法 ウォード法

21

About clustering. ※距離はユークリッド距離を使用

Rのコードsingle <- hclust(di, method=“single”) # diはdist(パ・リーグ全体の投手plot(single,hang=-1,main="最近隣法") ,methods=“euclidean”)

最近隣法は、2つのクラスターのそれぞれの中から1個ずつ個体を選んで個体間の距離を求め、それらの中で、最も近い個体間の距離をこの2つのクラスター間の距離とする方法。

Page 22: Rによるクラスター分析

最近隣法 最遠隣法

群平均法 重心法 メディ

アン法 ウォード法

22

About clustering. ※距離はユークリッド距離を使用

Rのコードcomplete <- hclust(di, method=“complete”) # diはdist(パ・リーグ全体の投手plot(complete,hang=-1,main=“最遠隣法”) ,methods=“euclidean”)

最遠隣法は、2つのクラスターのそれぞれの中から1個ずつ個体を選んで個体間の距離を求め、それらの中で、最も遠い個体間の距離をこの2つのクラスター間の距離とする方法。

Page 23: Rによるクラスター分析

最近隣法 最遠隣法

群平均法 重心法 メディ

アン法 ウォード法

23

About clustering. ※距離はユークリッド距離を使用

Rのコードaverage <- hclust(di, method=“average”) # diはdist(パ・リーグ全体の投手plot(average,hang=-1,main=“群平均法") ,methods=“euclidean”)

最近隣法と最遠隣法を折衷した方法で、2つのクラスターのそれぞれの中から1個ずつ個体を選んで個体間の距離を求め、それらの距離の平均値を2つのクラスター間の距離とする。

Page 24: Rによるクラスター分析

最近隣法 最遠隣法

群平均法 重心法 メディ

アン法 ウォード法

24

About clustering. ※距離はユークリッド距離を使用

Rのコードcentroid <- hclust(di, method=“centroid”) # diはdist(パ・リーグ全体の投手plot(centroid,hang=-1,main=“重心法”) ,methods=“euclidean”)

重心法は、クラスターのそれぞれの重心を求め、その重心間の距離をクラスターの間の距離とする。重心を求める際には、個体数を重みとして用いる。

Page 25: Rによるクラスター分析

最近隣法 最遠隣法

群平均法 重心法 メディ

アン法 ウォード法

25

About clustering. ※距離はユークリッド距離を使用

Rのコードmedian <- hclust(di, method=“median”) # diはdist(パ・リーグ全体の投手plot(median,hang=-1,main=“メディアン法") ,methods=“euclidean”)

メディアン法は、重心法の変形で、2つのクラスターの重心の間の重み付きの距離を求めるとき、重みを等しくして求めた距離の値を、2つのクラスター間の距離とする。

Page 26: Rによるクラスター分析

最近隣法 最遠隣法

群平均法 重心法 メディ

アン法 ウォード法

26

About clustering. ※距離はユークリッド距離を使用

Rのコードward <- hclust(di, method=“ward”) # diはdist(パ・リーグ全体の投手plot(ward,hang=-1,main=“ウォード法") ,methods=“euclidean”)

ウォード法は、2つのクラスターを融合した際に、生じる分散の変化が最小になるようにクラスターを形成していく方法である。(一般にはこの方法が一番感度が良いとされている。)

Page 27: Rによるクラスター分析

Clustering process ① データから距離(類似度)を求める   (ユークリッド距離・最大距離・マンハッタン距離・キャンベラ距離・

  バイナリ距離・ミンコウスキー距離)

② 分析の方法を決める   (最近隣法・最遠隣法・群平均法・重心法・メディアン法・ウォード法)

③ ②の方法のコーフェン行列を求める

④ コーフェン行列に基づいて樹形図を作成する

⑤ 結果について検討する 27

Page 28: Rによるクラスター分析

•  どの方法が良いかは一概には言えないので、他のデータ解析方法も用いて、多角的にデータを眺め、総合的に判断することが必要である。

•  一般的に計算方法からしてもウォード法が汎用性があると考えられている。

28

Page 29: Rによるクラスター分析

ということで

29

Page 30: Rによるクラスター分析

本題に戻ります

30

Page 31: Rによるクラスター分析

~Pitcher編~(ユークリッド距離)

31

Page 32: Rによるクラスター分析

~Pitcher編~(マンハッタン距離)

32

Page 33: Rによるクラスター分析

~Pitcher編~(キャンベラ距離)

33

Page 34: Rによるクラスター分析

   防御率  試合数  勝利  敗北  セーブ ホールド 勝率 対戦打者数 戸村 3.33  12  4   2    0 0   0.667 284 大谷 4.23  13   3   0    0 0   1.000 274

   投球回 被安打 被本塁打 フォアボール デッドボール 奪三振 失点 自責点 戸村 67.2 63 4 28 3   22 27 25 大谷 61.2 57 4 33 8 46 30 29

比 較

34

Page 35: Rによるクラスター分析

   防御率  試合数  勝利  敗北  セーブ ホールド 勝率 対戦打者数 戸村 3.33  12  4   2    0 0   0.667 284 大谷 4.23  13   3   0    0 0   1.000 274

   投球回 被安打 被本塁打 フォアボール デッドボール 奪三振 失点 自責点 戸村 67.2 63 4 28 3   22 27 25 大谷 61.2 57 4 33 8 46 30 29

比 較

35

似てると言えば似てる

Page 36: Rによるクラスター分析

~Batter編~(ユークリッド距離)

36

Page 37: Rによるクラスター分析

~Batter編~(マンハッタン距離)

37

Page 38: Rによるクラスター分析

~Batter編~(キャンベラ距離)

38

Page 39: Rによるクラスター分析

打率 試合数 打席数 打数 安打 HR 打点 盗塁 四球 死球 三振 サブロー 0.245 73 216 184 45 5 24 0 27 0 42 大谷 0.238 77 204 189 45 3 20 4 12 1 64 犠打 併殺打 長打率 出塁率 サブロー 1 6 0.375 0.335 大谷 0 3 0.376 0.284

比 較

39

Page 40: Rによるクラスター分析

打率 試合数 打席数 打数 安打 HR 打点 盗塁 四球 死球 三振 サブロー 0.245 73 216 184 45 5 24 0 27 0 42 大谷 0.238 77 204 189 45 3 20 4 12 1 64 犠打 併殺打 長打率 出塁率 サブロー 1 6 0.375 0.335 大谷 0 3 0.376 0.284

比 較

40

似てると言えば似てる

Page 41: Rによるクラスター分析

まとめ ・クラスター分析単体では、計算過程から   もわかる通り、うまく活用しにくい。

(しかし、数字・グラフで嘘をつきたい人に とってはとても有用な手法)

・私的には非階層クラスタリングの方がグ  ラフから読み取りづらいが精度よくクラ  スタ分けできると思っている。

41

Page 42: Rによるクラスター分析

参考文献 プロ野球データFreak: http://baseball-data.com/ マクロミル: http://www.macromill.com/landing/words/b003.html Rによるデータサイエンス:

R逆引きハンドブック:

42

Page 43: Rによるクラスター分析

43

Let’s enjoy clustering!!