PHONE APPLI Engineer blog

エンジニアブログ

階層型クラスター分析を用いて、irisデータの分類をしてみた

はじめまして。株式会社 PHONE APPLI リサーチデベロップメント 森本と申します。

この記事では統計分析初学者の方に向けて、自分が勉強した分析手法を紹介していこうと思います。
今回は階層型クラスター分析を用いて、iris の特徴量からデータを分類します。

はじめに


まず分析に用いるデータや手法の説明から始めていきます。

・iris データ

iris データはアヤメという花の種類と特徴に関するデータで、
詳細な内容については以下の通りです。

種類: setosa , versicolor , virginica の3種類
特徴量:
・Sepal Lengt: がく片の長さ
・Sepal Width: がく片の幅
・Petal length: 花びらの長さ
・Petal Width: 花びらの幅

図1. iris データセット

・階層型クラスター分析

階層型クラスター分析は ”類似度” を用いてデータをまとめてクラスターにしていく手法の一つであり、
類似度の計算方法によりさらに手法が分かれます。
(例: ウォード法, 最短距離法, 群平均法…など)

データをまとめる中でデンドログラム(樹形図) のような階層が生まれていくことが特徴です。

様々な手法の中でも今回使用するウォード法についての説明を記述します。

1. 各要素の ”距離” を計算

距離の取り方も様々存在しますが、今回はユークリッド距離での計算をします。
n次元空間のユークリッド距離については以下の式となります。


2. 類似度を用いて各要素を結合

ウォード法の類似度計算方法については、
以下の式のようにクラスター内の平方和が最小になるように計算していきます。

d(X,Y): クラスター X , Y の距離(類似度)
L(X∪Y): クラスター X と Y を結合した後の重心と各要素の距離(ユークリッド) の二乗和
L(X): クラスター X の重心と各要素の距離(ユークリッド) の二乗和
ウォード法は計算量に関しては多くなってしまいますが、分類の感度は非常に高いです。

3. デンドログラム作成

2.が全て完了するとデンドログラムの形で表され可視化することができます。

図2. デンドログラム(ウォード法)

4. いくつのクラスターに分けるか考察

下図にあるようにy軸(類似度) を基準に赤線を引き、幾つのクラスターに分けるかを検討します。
この赤線をどこに引いて、幾つのクラスターに分けるかは自分で決める必要があります。
つまりこの分析手法は主観的なものであり何かの根拠にするのには適しません。

活用の目的としては、分類することにより新たな知見を得るということが挙げられます。 図3. 3つのクラスタに分類したデンドログラム

実装


ここからは実際に Python で実装した結果を記載していきます。

import pandas as pd
from sklearn.datasets import load_iris
from scipy.cluster.hierarchy import linkage, dendrogram,fcluster
ライブラリをインポート
iris = load_iris()
df = pd.DataFrame(data=iris.data, columns=iris.feature_names)
iris データを展開し、データフレームとして df に格納 (図1. 参照)

iris_war = linkage(df, method='ward', metric='euclidean')
iris_clu = fcluster(iris_war, t = 3, criterion = 'maxclust')

scipy の linkage , fcluster を用いてユークリッド距離, ウォード法のクラスタリングをする (クラスター数=3)

図4. 分類結果( iris_clu , 1 → setosa , 2 → virginica , 3 → versicolor)

図4. 分類結果と元々の分類 (setosa , versocolor , virginica) を集計しまとめると
結果は図5. のようになりました。


図5. 結果

setosa は完璧に分類でき、一部の virginica が versicolor として分類されたという結果が得られました。

分類するという目的は達成できましたが、
何故似ているのかの背景や分類結果の精度向上についてなどまだまだ考える余地はありそうです。

余談


今回使ったデータセットのアヤメについて調べてみました。

virginica はフロリダ州テキサス州, versicolor はミネソタ州バージニア州あたりに分布しているのに対し、
setosa はアラスカに分布しているということで生息圏がサイズに関わっている可能性があると思いました。

このようにクラスタリングを一つのきっかけとして様々な想像が掻き立てられるというのも
階層型クラスタ分析の一つの魅力であると感じております。

参考までに、自分が本記事をまとめるにあたって非常に有用だった URL を記載させていただきます。

www.albert2005.co.jp

analysis-navi.com

さいごに


今回は iris データセットを用いて階層型クラスター分析を実装してみました。
自分の学習のアウトプットという形ではありますが、
アヤメの花言葉でもあるように、読んでいただいた誰か一人にでも
このブログが”良い便り, メッセージ”になれば幸いでございます。


PHONE APPLIについて

phoneappli.net
phoneappli.net