4
0

Delete article

Deleted articles cannot be recovered.

Draft of this article would be also deleted.

Are you sure you want to delete this article?

More than 5 years have passed since last update.

[R] データセットirisのクラスター分析 - methodによる正答率の違いを網羅的に

Last updated at Posted at 2019-11-17

Rをインストールできたら、実験データやマーケティングデータの解析に良く使うデータ解析にクラスター分析があります。

クラスター分析とは

 クラスター分析とは、異なるものが混ざりあっている集団の中から互いに似たものを集めて集落(クラスター)を作り、対象を分類するという方法の総称です。
 クラスター分析は、あらかじめ分類の基準が決まっておらず、分類のための外的基準や評価が与えられていない「教師無しの分類法」です。
 クラスター分析には、大きく分けると階層クラスター分析、非階層クラスター分析の2種類の方法があります。どちらの解析でもいくつかのメソッドがあり、どれを選ぶのが良いか悩ましいところですが、結局デフォルトの設定や、quiitaの記事などで採用されているメソッドで試してみたりしています。
 この報告では、データセットirisで階層的クラスター分析の各メソッドによるクラスター分析結果と実際の分類のspeciesと照合して正答率を比較してみました。
まず、クラスター分析をしてみたい方は最後の参照の記事をご覧ください。

データセットirisについて

データセットirisはRやPythonなどで機械学習のトレーニングで扱われる最も有名なデータかもしれません。
3種類の花、各50サンプルずつで計150サンプル、がく片と花びらの幅と長さに関する4つの特徴量からなるデータです。

##環境
Windows10
R 3.6.1

データセットirisの内容の確認

iris
str(iris)  

image.png
サンプル数が150
5つの変数、Sepal.Length、Sepal.Width、Petal.Length、Petal.Width、Speciesがあります。Speciesはアヤメの分類ですので、クラスター分析ではこれを除いた、4つの変数で分析を行い、Speciesの値と比較します。

irisの階層的クラスター分析のメソッドによる違いのスクリプト作成について

階層的クラスター分析するには、まずデータからサンプル間の距離行列を計算します。
この距離行列の関数distには、methodとして"euclidean", "maximum", "manhattan", "canberra", "binary", "minkowski" の6種から選べます。
距離行列からクラスター分析を行う関数hclustにはmethodが"ward.D", "ward.D2", "single", "complete", "average" (= UPGMA), "mcquitty" (= WPGMA), "median" (= WPGMC) , "centroid" (= UPGMC) の8種から選べます。
関数distのmethodとhclustのmethodの組み合わせは 6 x 8 =48種類あることになります。これらをfor文による繰り返しで網羅的に実際の分類値に対する正答率を計算しました。

スクリプト

hclust
# 関数distとhclustのメソッドのベクトル作成
methods.dist <- c("euclidean", "maximum", "manhattan", "canberra", "binary","minkowski")
num.methods.dist <- length(methods.dist)

methods.hclust <- c("ward.D", "ward.D2","single", "complete", "average", "mcquitty", "median", "centroid") 
num.methods.hclust <- length(methods.hclust)

df.iris <- iris[ , 1:4]  #lengthとwidthを代入
answer <- iris[,5]    #speciesを代入
ratio <- rep(0, num.methods.hclust)  #正答率の値を代入するベクトルratio

#最初のdistのmethodでのクラスター分析結果
correct.answer.rate <- rep(0, num.methods.hclust)
dist.iris <- dist(df.iris, method = methods.dist[1]) 
for (i in 1:num.methods.hclust){
  #階層的クラスター分析
  hc.iris <- hclust(dist.iris, method = methods.hclust[i]) 
  result <- cutree(tree=hc.iris, k=3)
  table <- table(answer, result)
  correct.answer.rate[i] <- (table[1,1] + table[2,2] + table[3,3])/150
}

#distのmethodの2番目以降でのクラスター分析結果を追加
#df.ratio.add <- data.frame(methods.hclust, ratio)
correct.answer.rate.add <- rep(0, num.methods.hclust)

for (j in 2:num.methods.dist){
  #サンプル間の距離行列を算出してdist.irisに代入
  dist.iris <- dist(df.iris, method = methods.dist[j])  
  for (i in 1:num.methods.hclust){
    #階層的クラスター分析
    hc.iris <- hclust(dist.iris, method = methods.hclust[i]) 
    result <- cutree(tree=hc.iris, k=3)
    table <- table(answer, result)
    correct.answer.rate.add[i] <- (table[1,1] + table[2,2] + table[3,3])/150
  }
  correct.answer.rate <- cbind(correct.answer.rate,    correct.answer.rate.add)
}

correct.ratio <- round(correct.answer.rate, 2) #小数点2桁以下で四捨五入
colnames(correct.ratio) <- methods.dist  #列名を代入
rownames(correct.ratio) <- methods.hclust #行名を代入
write.csv(correct.ratio, "階層的クラスター分析正答率.csv") 
formattable::formattable(correct.ratio) #表形式で表示

実行結果

image.png

デフォルトのeuclidianとward.Dあるいはaverageの組み合わせでの正答率は91%でしたが、canberraとwar.d2あるいはcompleteでの組み合わせの正答率が96%と最高になりました。
なぜ、このような結果になるのか確認したいですが、難しそうですね。各データの分散の状態とirisの実際の分類方法が関係しているのではないかと推測しています。

binaryは多分データ形式が違うのでしょうね。どのようなデータに使うのかわかりましたら、またどこかで掲載します。

距離の種類

 専門ではないので、説明はネットの引用です。

euclidean Distance

お馴染みの通常のユークリッド空間での距離。

maximum distance

Chebyshev distance、チェス盤距離とも呼ばれている。
wikipedia によれば

幾何学における距離概念のひとつ。各座標の差(の絶対値)の最大値を2点間の距離とする。

manhattan distance

wikipedia によれば

幾何学における距離概念のひとつ。各座標の差(の絶対値)の総和を2点間の距離とする。

canberra distance

キャンベラ距離を使う によれば、

キャンベラ距離は原点周りの重み付きのマンハッタン距離となっている. 原点付近で違いに敏感な距離

binary distance

ネットで良い説明が見つからず
RのdistのDocumentationからそのまま記しておきます。
(aka asymmetric binary): The vectors are regarded as binary bits, so non-zero elements are ‘on’ and zero elements are ‘off’. The distance is the proportion of bits in which only one is on amongst those in which at least one is on.

minkowski distance

引数p=1でマンハッタン距離、p=2でユークリッド距離です。デフォルトではp=2のようで、ユークリッド距離と同じになります。

関数hclustのメソッドについては参照をご覧ください。

##参照
R言語でクラスタリングしてみた
https://qiita.com/Haruka-Ogawa/items/fcda36cc9060ba851225
Rとクラスター分析(1)
https://www1.doshisha.ac.jp/~mjin/R/Chap_28/28.html

4
0
2

Register as a new user and use Qiita more conveniently

  1. You get articles that match your needs
  2. You can efficiently read back useful information
  3. You can use dark theme
What you can do with signing up
4
0

Delete article

Deleted articles cannot be recovered.

Draft of this article would be also deleted.

Are you sure you want to delete this article?