2019年7月27日sihoutteって何て読むのか...と思うけども”シルエット”だそう。ポートレート写真を背景白、顔を黒に減色した例の”シルエット”。データ達を複数のクラスタに分割したとして、各々のデータがそのクラスタに存在することの収まりの良さを表すことができる。本来(相対的に)他のクラスタに属しているべきデータ達の割合が分かったり、クラスタ境界で(相対的に)どちらのクラスタに属しても良さそうなデータ達の割合が分かったりする。sklearnは教師なしクラスタリングまでで、それをグラフ化しないといけないのだけど、matplotlibに対応するのがなく、”線を書く”みたいなコマンドを並べて作っていかないといけない様子。yellowbrickというパッケージを使うとそれもやってくれる。models!sklearnとmatplotloibだけで出力するバージョンと、yellowbrickで出力するバージョンの両方を試してみた(前者はクラスタのラベルを出力できずsihoutteグラフとの対応関係が理解できずに中途半端で終了)。全データ達は\(x_i\)。データ\(x_i\)がクラスタ\(A\)に属し、最近傍にクラスタ\(B\)があるという状況。\(A\)のクラスタ中心は\(x_A\)、\(B\)のクラスタ中心は\(x_B\)。“最近傍のクラスタ中心との距離の平均”から”自分のクラスタ中心との距離の平均”を引いた値。1行に全ての変数が出てくるように書いてみる。\bigr\}}\end{eqnarray}データが\(n\)個あるので、sihoutte係数も\(n\)個できる。自分が属しているクラスタ\(A\)よりも、隣のクラスタ\(B\)の方が居心地が良いと分子はマイナスになる。今属しているクラスタでも隣のクラスタでも、どちらもさほど居心地が変わらないとゼロ近辺になる。大きければ迷いなく今のクラスタで良いことを表せる。乱数で作った偽データに6-meansをかけた図。alpha=0.5,s=600,c="pink",linewidth=2,edgecolors="red")sklearnとmatplotlibだけでsihoutte係数のグラフを出してみる。“線を書く”みたいなコマンドを並べて規格通りの図を作るのか...。coefficient')plt.show()全体的に茶色のクラスタのsilhouette係数が低め。残念ながら、どのクラスタと対応するのか出力できず何の考察も出来ず...。SilhouetteVisualizer(model)sv.fit(clusters[:,:2])sv.poof()出てきた図。自作したものと全然合っていないように見える..自作したものとラベルが合っていないだけだと信じたい。コメントをキャンセルコメントを投稿するにはログインしてください。(お試し実行なし)階層型クラスタリングについてわかりやすい解説を聞いたので頭の中にあるものを書き出してみます。自力でデータを作って試してみたいと思い、NumPyを使った生成法を調べてみた。一口に乱数といっても、正規分布に従う標本の生成のこと。前回適当に作ったデータを使って階層型クラスタリングを試してみる。サンプルデータへの適用例k-means法を実行する際に妥当なkを決めたいという欲求があります。クラスタ集合の凝集度を定量化することでkと凝集度の関係を得られます。