このブログでは、K-meansクラスタリングとは何か、および米国のさまざまな州で収集された犯罪データにK-meansクラスタリングを実装する方法を理解します。データには、1973年に米国の50州のそれぞれで10万人の居住者あたりの暴行、殺人、強姦などの犯罪が含まれています。データの分析に加えて、次のことも学びます。
- クラスターの最適な数を見つける。
- 歪みを最小限に抑える
- エルボーカーブの作成と分析。
- k-meansアルゴリズムのメカニズムを理解する。
分析から始めましょう。データは次のようになります。
このデータセットをダウンロードするには、画像をクリックしてください
このデータセットが必要ですか?上の画像をクリックしてダウンロードしてください。
まず、分析用のデータを準備しましょう。そのためには、データに存在する可能性のあるNA値をすべて削除し、データを行列に変換する必要があります。
> Crime0 Crime str(crime)num [1:50、1:4] 13.2 10 8.1 8.8 9 7.9 3.3 5.9 15.4 17.4 ... --attr(*、 'dimnames')= 2のリスト.. $:chr [1 :50] 'アラバマ' 'アラスカ' 'アリゾナ' 'アーカンソー' ... .. $:chr [1:4] '殺人' '暴行' 'アーバンポップ' 'レイプ'
クラスターの数を5とします。Kmeans()関数は、入力データと、データがクラスター化されるクラスターの数を取得します。構文は次のとおりです。kmeans(data、k)ここで、kはクラスター中心の数です。
> cl class(cl)[1] 'kmeans'
クラスタリングの分析:
> str(cl)9 $クラスターのリスト:名前付きint [1:50] 5 3 3 5 3 5 4 5 3 5 ... ..- attr(*、 'names')= chr [1:50] 'アラバマ ''アラバ ''アリゾナ ''アーカンソー '... $センター:num [1:5、1:4] 2.95 6.11 12.14 5.59 11.3 ... ..- attr(*、' dimnames ')= 2のリスト.. .. $:chr [1:5] '1''2''3''4' ... .. .. $:chr [1:4] '殺人' '暴行' 'UrbanPop' 'レイプ'$ totss:num 355808 $ withinss:num [1:5] 4548 2286 16272 1480 3653 $ tot.withinss:num 28240 $ betweenss:num 327568 $ size:int [1:5] 10 9 14 10 7 $ iter:int 3 $ ifault:int 0-attr(*、 'class')= chr'kmeans '
str()関数は、withins、betweensなどのさまざまなパラメーターを含むkmeansの構造を提供し、kmeansのパフォーマンスを分析して分析します。
betweenss:二乗和の間、つまりクラスター内の類似性
withinss:正方形の合計内、つまりクラスター間の類似性
totwithinss:すべてのクラスターのすべての内部の合計、つまりクラスター内の類似性の合計
優れたクラスタリングは、最初に選択されたクラスター「k」の数に応じて、insidesの値が低くなり、betweensの値が高くなります。 「k」の最適値を見つける方法を見てみましょう。
「k」の最適値を見つける
「k」の最適値は、歪みが最小のクラスターの収束セットを提供する値です。歪みが大きいほど、形成されるクラスターは悪化します。
javachar配列のデフォルト値
ねじれ:
歪みは、各クラスターの「範囲内」で計算できます。特定のクラスターの「範囲内」の値が小さいほど、人口密度が高くなるため、歪みが最小限に抑えられます。
kmeans.wss.k<- function(crime, k){ km = kmeans(crime, k) return (km$tot.withinss) }
この関数は、データとkの値を取得し、その「km $ totwithinss」を返します。 「km $ totwithinss」は、クラスター内の平方和の合計です。つまり、作成された5つのクラスターすべての内を含みます。合計(内)
。 「km $ totwithinss」の値が高いほど、歪みが大きくなります。
k = 5の場合、insidessは24417.02です。
> kmeans.wss.k(crime、5)[1] 24417.02
kの値を5から10に増やして、違いを観察してみましょう。
> kmeans.wss.k(crime、10)[1] 11083.04
Kの値が大きくなると、歪みが小さくなることがわかります。
「km $ totwithinss」のさまざまな値を取り出してグラフにプロットし、歪みとkの値の関係を見つけることができます。次の関数は私たちのためにそれを行います:
> kmeans.dis maxk = 10> dis = kmeans.dis(crime、maxk)> plot(1:maxk、dis、type = 'b'、xlab = 'クラスター数'、+ ylab = '歪み'、+ col = '青')
タダ!!!したがって、私たちは有名なエルボーカーブを持っています。
エルボーカーブ:
これは、kの各値について、「k」、クラスターの数、および「totwithinss」(または歪み)の間のプロットです。クラスターの数が少なくなると、歪みは徐々に減少しますが、kの値を増やし続けると、歪み値の減少率は一定になります。
それを超えると歪み率が一定になるkのこの値が最適値です。ここでk = 4です。
アニメーションを適用して、Rがクラスター化された結果をどのように提供したかを理解しましょう。
>ライブラリ(アニメーション)> cl<- kmeans.ani(crime, 4)
Kmeansクラスタリングアルゴリズム:
k-meansクラスタリングが機能するアルゴリズムを理解しましょう。
ステップ1。 k = 4の場合、4つのランダムな点を選択し、それらを作成するクラスターのクラスター中心と見なします。
ステップ2。空間からランダムなデータポイントを取得し、4つのクラスターの中心すべてからの距離を調べます。データポイントが緑色のクラスター中心に最も近い場合、データポイントは緑色になり、同様にすべてのポイントが4つのクラスターに分類されます。
ステップ3。次に、すべての緑色の点の重心を計算し、その点をそのクラスターのクラスター中心として割り当てます。
同様に、4つの色付き(クラスター化)ポイントすべての重心を計算し、新しい重心をクラスターの中心として割り当てます。
ステップ4。ステップ2とステップ3は、クラスターの中心がある点に収束して移動しなくなった場合を除いて、繰り返し実行されます。
したがって、収束したクラスターの中心に到達します。
データが4つのクラスターに分割されていることがわかります。クラスターセンターは次のとおりです。
> cl $ centers Murder Assault UrbanPop Rape Texas 4.740741 104.8519 62.96296 16.10 Louisiana 10.907143 219.9286 71.71429 25.95 South Carolina 13.375000 284.5000 46.25000 25.05 New Mexico 11.040000 298.0000 77.60000 32.68
「ニューメキシコ」をクラスターセンターとするクラスター4は、犯罪率が非常に高く、人口も最も多いです。
Cluster-3とCluster-2がフォローアップします。
各州には、犯罪ランキングを予測できるクラスターに応じてクラスターが割り当てられます。出力は次のようになります。
質問がありますか?コメント欄にご記入ください。折り返しご連絡いたします。
関連記事: