blog

系統的クラスタリング:階層的クラスタリングである。

1/まえがき 機械学習では、データをクラスタリングすることがよくあります。例えば、kmeansクラスタリング、kmeans++クラスタリングクラスタリングなどです。...

Dec 28, 2020 · 5 min. read
シェア
1/ 
 機械学習では、データはしばしばkmeansクラスタリングのようなクラスタリングによって分析される。,kmeans++ 
 クラスタリング:モノをグループ化し、人をグループ化する。,
 単刀直入に言えば、似たようなサンプルポイント/データポイントを分類して、データの集まりをカテゴリーに分けるのである。
 
 この記事では、系統的クラスタリング手法と、pythonを使って系統的クラスタ分析を行う方法を紹介する。
 
2/系統的クラスタリング入門
 系統的クラスタリングは、階層的クラスタリングとしても知られ、クラスタ分析の最も一般的な手法である。
 基本的な手順は以下の通りである:
 <1>データセットにはn個のデータ点がある。まず、これらのn個のデータ点をn個のクラスと考える。,
 <2>そして、最もよく似た2つのクラスが新しいクラスにマージされ、n-1個のクラスができる。,
 <3>次に、そこから最も近い2つのクラスが識別され、マージされる。,
 <4>このプロセスを続けると、最終的にすべてのデータポイントが1つのカテゴリーに分類される。,
 <5>上記のプロセスは、クラスタリング図と呼ばれる図にプロットされ、その図からいくつのカテゴリーに分類されるかが決定される。一般的なプロセスを図1に示す。
 

 ここで、データ点を分類するためには、それぞれのデータ点の類似性を判断する必要があるが、ではどのようにして類似性を判断するのだろうか。通常用いられる方法は、データ点間の距離を計算し、その距離に基づいて2つのデータ点が類似しているかどうかを判定する方法である。距離に基づいてデータ点を分類するには、最短距離、最長距離、重心、クラス平均、ワードなどいくつかの方法がある。以下にこれらの方法を簡単に紹介する。
 
3/類似性を決定するいくつかの方法
 <1> 最短距離法:
 最短距離法は、図2に示すように、2つのクラスから最短距離を持つ2つのサンプル点を見つける方法である。点3と点7は、クラスG1とクラスG2において最短距離を持つ2点である。計算式を図4に示す。

 <2> 最大距離法
 最長距離法は、図3に示すように、2つのクラスから最長距離を持つ2つのサンプル点を見つける方法である。点 1 と点 6 は、クラス G1 とクラス G2 で最も距離の長い 2 点である。計算式を図4に示す。

 <3> 重心
 物理的な観点からは、クラスがその重心によって表現される方が理にかなっており、それはクラスサンプルの平均であり、クラス間の距離も重心間の距離である。サンプル間のユークリッド距離が使用される場合、あるステップでクラスG1とG2がG3にマージされ、それぞれがn1、n2、n3のサンプルを持つとしよう。=n1+n2,それぞれの重心をX1、X2、X3とすると、X3は次のようになる。=1/n3(n1X1+n2X2).重心法の公式 図4.
 <4> 偏差の二乗和
 自乗偏差和法は、ウォードの方法としても知られているが、その考え方は分散分析に由来するもので、クラスが正しく分割されていれば、同じクラスのサンプルの自乗偏差和は小さくなるはずであり、クラス間の自乗偏差和よりもクラスの自乗偏差和の方が大きくなるはずだというものである。計算式を図4に示す。
 
4/例:pythonによる系統的クラスター分析
 # 様々なライブラリをインポートする
 import numpy as np
 from matplotlib import pyplot as plt
 from scipy.cluster.hierarchy import dendrogram, linkage
 
 # 次のステップはデータセットの生成である。今回使用したデータセットはランダムに生成されたもので、データ数は合計15点と少なく、7点のデータと8点のデータの2つのデータ・クラスターに分かれている。データ点数をこれほど少なく設定した理由は、データの分布が見やすく、後で絵を描くときに絵の分類がわかりやすいからである。
 # 実験を繰り返しやすくするために、ここでランダムな状態を設定する。このランダム状態は、2つの変数 a と b を生成するために使用される。これは、前述のデータ・クラスターであり、a は7データ・ポイント、b は8データ・ポイントである。[10, 10],bの平均ベクトルである。[-10, -10],2つの共分散行列は次の通りである。[[1, 3], [3, 11]]共分散行列は正定値行列または半正定値行列である。ここで重要なことは、共分散行列は正定値または半正定値であるということである。次に、a と b をつなぎ合わせて変数データを得る。
 state = np.random.RandomState(99) #ランダム状態を設定する
 a = state.multivariate_normal([10, 10], [[1, 3], [3, 11]], size=7) #多変量正規変数を生成する
 b = state.multivariate_normal([-10, -10], [[1, 3], [3, 11]], size=8)
 data = np.concatenate((a, b)) #データをスプライスする。
 
 # 次のステップは、データ点の分布をプロットすることである。コードは以下の通りである。
 ここでコードは比較的単純であり、繰り返さないが、主に斧を言う.set_aspect('equal')このコードの行は、matplotlibのデフォルトのX軸とY軸の比率が異なるため、つまり、線分の同じ単位の長さは、長さの表示では、同じではありませんので、同じに2つの比率を設定するには、絵がより調整され、正確に見えるようにする。描画された絵は図5に示されており、そこから2つのデータ・クラスターがはっきりと見ることができ、上のものはおそらく座標点に集中している。[10, 10]に集中している。[-10, -10]近くでは、これはセットアップと同じである。図から明らかなように、データセットはおそらく2つのカテゴリーに分けられる、つまり、上のデータ・クラスターは1つのカテゴリーに分けられ、下のデータ・クラスターはもう1つのカテゴリーに分けられるが、それを解明するにはまだもう少しアルゴリズムが必要だ。
 fig, ax = plt.subplots(figsize=(8,8)) #イメージサイズを設定する
 ax.set_aspect('equal') #2つの軸の比率が等しくなるように設定する
 plt.scatter(data[:,0], data[:,1])
 plt.ylim([-30,30]) #Y軸の値域を設定する
 plt.xlim([-30,30])
 plt.show()
 

 #データ処理、データ処理とは、この1行のコードだけであり、非常にシンプルである。
 z = linkage(data, "average") #平均アルゴリズム、すなわちクラス平均を使用する。
 

 #  
 fig, ax = plt.subplots(figsize=(8,8))
 dendrogram(z, leaf_font_size=14) # 
 plt.title("Hierachial Clustering Dendrogram")
 plt.xlabel("Cluster label")
 plt.ylabel("Distance")
 plt.axhline(y=10) #分類線を引く
 plt.show()
 

4/  
 <1>グラフからわかるように、15ポイントは2つのカテゴリーに分けられる。,
 つまり、ドット0からドット6までの7つのドットを表している。,
 奥の赤い線で結ばれた点は、2番目のカテゴリー、つまり7点目から14点目までの8点を表している。
 この分割が非常に正しく、当時の設定と同じであることがわかるだろう。
 
 <2>系統的クラスタリング法は比較的単純なアルゴリズムを持ち、非常に実用的であるため、今日最も広く使われているクラスタリング法である。,
 しかし、この方法は非常に大量のデータを扱う場合には不十分であるため、他のアルゴリズムと組み合わせて使用するのが最善である。,
 同時に、ユーザーは自分の状況に応じて適切な距離計算方法を選択する必要がある。
 本論文では、主にクラス平均を用いてクラスタリング操作を行うが、これはこのデータセットが非常に単純であるため、他の距離計算法を用いても得られる結果はこれと同じになるからである。
 データ量が比較的多い場合、距離計算の方法によって最終的な結果が異なることがあるため、ユーザーはそれぞれの状況に応じて選択する必要がある。
Read next

Spring AOPポイントカット実行ルール

任意のパブリックメソッドの実行: 実行)任意の "set" で始まるメソッドの実行: 実行)任意のインターフェースのメソッド: 実行

Dec 28, 2020 · 1 min read