犯罪データセットへのK-meansクラスタリングの実装



米国の犯罪データセットでのKmeansクラスタリングの実装

このブログでは、K-meansクラスタリングとは何か、および米国のさまざまな州で収集された犯罪データにK-meansクラスタリングを実装する方法を理解します。データには、1973年に米国の50州のそれぞれで10万人の居住者あたりの暴行、殺人、強姦などの犯罪が含まれています。データの分析に加えて、次のことも学びます。

    • クラスターの最適な数を見つける。
    • 歪みを最小限に抑える
    • エルボーカーブの作成と分析。
  • k-meansアルゴリズムのメカニズムを理解する。

分析から始めましょう。データは次のようになります。





dataset

このデータセットをダウンロードするには、画像をクリックしてください

このデータセットが必要ですか?上の画像をクリックしてダウンロードしてください。



まず、分析用のデータを準備しましょう。そのためには、データに存在する可能性のある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がフォローアップします。

各州には、犯罪ランキングを予測できるクラスターに応じてクラスターが割り当てられます。出力は次のようになります。

質問がありますか?コメント欄にご記入ください。折り返しご連絡いたします。

関連記事: