サーチ…


前書き

statsパッケージはhclust関数を提供し、階層的クラスタリングを実行します。

備考

hclust以外にも、他の方法もあります。「 クラスタリングのCRANパッケージの表示」を参照してください。

例1 - hclustの基本的な使い方、デンドログラムの表示、プロットクラスタ

クラスタライブラリにはruspiniデータが含まれています。これはクラスタ分析を説明するための標準データセットです。

    library(cluster)                ## to get the ruspini data
    plot(ruspini, asp=1, pch=20)    ## take a look at the data

Ruspiniデータ

hclustは元のデータではなく、距離行列を求めます。デフォルトのパラメータを使用してツリーを計算して表示します。ハングパラメータは、ベースラインに沿ってツリーのすべての葉を並べます。

    ruspini_hc_defaults <- hclust(dist(ruspini))
    dend <- as.dendrogram(ruspini_hc_defaults)
    if(!require(dendextend)) install.packages("dendextend"); library(dendextend)
    dend <- color_branches(dend, k = 4) 
    plot(dend)

ここに画像の説明を入力

ツリーをカットして4つのクラスターを与え、クラスターごとに点を塗りつぶすデータを置き換えます。 kは所望のクラスタ数である。

    rhc_def_4 = cutree(ruspini_hc_defaults,k=4)
    plot(ruspini, pch=20, asp=1, col=rhc_def_4)

Ruspiniデータ - 最初のクラスタリング

このクラスタリングはちょっと奇妙です。データを先にスケーリングすることで、より良いクラスタリングを得ることができます。

    scaled_ruspini_hc_defaults = hclust(dist(scale(ruspini)))
    srhc_def_4 = cutree(scaled_ruspini_hc_defaults,4)
    plot(ruspini, pch=20, asp=1, col=srhc_def_4)

スケーリングされたRuspiniデータ - クラスタ化

クラスタを比較するためのデフォルトの相違度の尺度は「完全」です。 methodパラメータで別のメジャーを指定できます。

    ruspini_hc_single = hclust(dist(ruspini), method="single")

例2 - hclustと外れ値

階層的クラスタリングでは、外れ値は1点クラスターとして表示されることがよくあります。

異常値の影響を説明するために、3つのガウス分布を生成します。

    set.seed(656)
    x = c(rnorm(150, 0, 1), rnorm(150,9,1), rnorm(150,4.5,1))
    y = c(rnorm(150, 0, 1), rnorm(150,0,1), rnorm(150,5,1))
    XYdf = data.frame(x,y)
    plot(XYdf, pch=20)

テストデータ

クラスタ構造を構築し、3つのクラスタに分割します。

    XY_sing = hclust(dist(XYdf), method="single")
    XYs3 = cutree(XY_sing,k=3)
    table(XYs3)
    XYs3
      1   2   3 
    448   1   1 

hclustは2つの異常値を見つけ出し、すべてを他の大きなクラスターに入れました。 「本当の」クラスターを得るには、kを高く設定する必要があります。

    XYs6 = cutree(XY_sing,k=6)
    table(XYs6)
    XYs6
      1   2   3   4   5   6 
    148 150   1 149   1   1 
    plot(XYdf, pch=20, col=XYs6)

テストデータはクラスタ化されています -  3外れ値と3大クラスター

このStackOverflowポストには、クラスタの数を選択する方法についてのガイダンスがありますが、階層的クラスタリングではこの動作に注意してください。



Modified text is an extract of the original Stack Overflow Documentation
ライセンスを受けた CC BY-SA 3.0
所属していない Stack Overflow