logo

K 平均法クラスタリング アルゴリズム

K 平均法クラスタリングは、機械学習またはデータ サイエンスにおけるクラスタリングの問題を解決するために使用される教師なし学習アルゴリズムです。このトピックでは、K 平均法クラスタリング アルゴリズムとは何か、そのアルゴリズムがどのように機能するか、および K 平均法クラスタリングの Python 実装について学びます。

K 平均法アルゴリズムとは何ですか?

K-Means クラスタリングは、 教師なし学習アルゴリズム 、ラベルのないデータセットを異なるクラスターにグループ化します。ここで、K は、プロセスで作成する必要がある事前定義クラスターの数を定義します。たとえば、K=2 の場合はクラスターが 2 つ、K=3 の場合はクラスターが 3 つになります。

これは、各データセットが類似のプロパティを持つ 1 つのグループのみに属するように、ラベルのないデータセットを k 個の異なるクラスターに分割する反復アルゴリズムです。

これにより、データをさまざまなグループにクラスター化し、トレーニングを必要とせずに、ラベルのないデータセット内のグループのカテゴリを単独で発見する便利な方法が可能になります。

これは重心ベースのアルゴリズムであり、各クラスターが重心に関連付けられます。このアルゴリズムの主な目的は、データ ポイントとそれに対応するクラスター間の距離の合計を最小化することです。

このアルゴリズムは、ラベルのないデータセットを入力として受け取り、データセットを k 個のクラスターに分割し、最適なクラスターが見つからなくなるまでこのプロセスを繰り返します。このアルゴリズムでは、k の値を事前に決定する必要があります。

K 平均法 クラスタリング アルゴリズムは主に 2 つのタスクを実行します。

ラテックスの偏微分
  • 反復プロセスによって、K 個の中心点または重心の最適な値を決定します。
  • 各データ ポイントをその最も近い k 中心に割り当てます。特定の k 中心に近いデータ ポイントはクラスターを作成します。

したがって、各クラスターにはいくつかの共通点を持つデータポイントがあり、他のクラスターからは離れています。

以下の図は、K 平均法クラスタリング アルゴリズムの仕組みを説明しています。

K 平均法クラスタリング アルゴリズム

K 平均法アルゴリズムはどのように機能しますか?

K-Means アルゴリズムの仕組みを以下の手順で説明します。

ステップ1: 数字 K を選択してクラスターの数を決定します。

ステップ2: ランダムな K 点または重心を選択します。 (入力データセット以外のものでも構いません)。

ステップ-3: 各データ ポイントを最も近い重心に割り当てます。これにより、事前定義された K クラスターが形成されます。

ステップ-4: 分散を計算し、各クラスターの新しい重心を配置します。

ステップ-5: 3 番目の手順を繰り返します。これは、各データポイントを各クラスターの新しい最も近い重心に再割り当てすることを意味します。

ステップ-6: 再割り当てが発生した場合は、ステップ 4 に進み、それ以外の場合は FINISH に進みます。

ステップ-7 : モデルの準備ができました。

視覚的なプロットを考慮して上記の手順を理解しましょう。

2 つの変数 M1 と M2 があるとします。これら 2 つの変数の X-Y 軸散布図を以下に示します。

K 平均法クラスタリング アルゴリズム
  • データセットを識別し、それらを異なるクラスターに配置するために、クラスターの数を k (つまり K=2) とします。つまり、ここではこれらのデータセットを 2 つの異なるクラスターにグループ化しようとします。
  • クラスターを形成するには、いくつかのランダムな k 点または重心を選択する必要があります。これらのポイントは、データセットのポイントまたはその他のポイントのいずれかになります。したがって、ここでは、データセットの一部ではない以下の 2 つの点を k 点として選択します。以下の画像を考えてみましょう。
    K 平均法クラスタリング アルゴリズム
  • ここで、散布図の各データ ポイントを最も近い K ポイントまたは重心に割り当てます。 2 点間の距離を計算するために学習した数学を適用して計算します。したがって、両方の重心の間に中央値を描きます。以下の画像を考えてみましょう。
    K 平均法クラスタリング アルゴリズム

上の画像から、線の左側の点は K1 または青色の重心に近く、線の右側の点は黄色の重心に近いことが明らかです。明確に視覚化するために、青と黄色に色を付けてみましょう。

K 平均法クラスタリング アルゴリズム
  • 最も近いクラスターを見つける必要があるため、選択してプロセスを繰り返します。 新しい重心 。新しい重心を選択するには、これらの重心の重心を計算し、以下のように新しい重心を見つけます。
    K 平均法クラスタリング アルゴリズム
  • 次に、各データポイントを新しい重心に再割り当てします。このために、正中線を見つける同じプロセスを繰り返します。中央値は以下の画像のようになります。
    K 平均法クラスタリング アルゴリズム

上の画像から、1 つの黄色の点が線の左側にあり、2 つの青い点が線の右側にあることがわかります。したがって、これら 3 つの点が新しい重心に割り当てられます。

K 平均法クラスタリング アルゴリズム

再割り当てが行われたので、再びステップ 4 に進み、新しい重心または K 点を見つけます。

  • 重心の重心を見つけてこのプロセスを繰り返すと、新しい重心は次の図のようになります。
    K 平均法クラスタリング アルゴリズム
  • 新しい重心を取得したので、再度中央線を描画し、データ ポイントを再割り当てします。したがって、画像は次のようになります。
    K 平均法クラスタリング アルゴリズム
  • 上の画像でわかります。線の両側に異なるデータ ポイントはありません。これは、モデルが形成されていることを意味します。以下の画像を考えてみましょう。
    K 平均法クラスタリング アルゴリズム

モデルの準備ができたので、想定された重心を削除できます。最終的な 2 つのクラスターは次の図のようになります。

K 平均法クラスタリング アルゴリズム

K 平均法クラスタリングで「K 個のクラスター」の値を選択するにはどうすればよいですか?

K 平均法クラスタリング アルゴリズムのパフォーマンスは、それが形成する非常に効率的なクラスターに依存します。ただし、最適なクラスター数を選択するのは大きな作業です。最適なクラスター数を見つける方法はいくつかありますが、ここではクラスター数または K の値を見つける最も適切な方法について説明します。その方法は次のとおりです。

エルボ法

エルボー法は、最適なクラスター数を見つける最も一般的な方法の 1 つです。この方法では、WCSS 値の概念が使用されます。 WCSS を意味する クラスター二乗和内 、クラスター内の変動の合計を定義します。 WCSS の値 (3 クラスターの場合) を計算する式は次のとおりです。

WCSS= ∑P私はクラスター1にいます距離(PC1)2+∑P私はクラスター2にいます距離(PC2)2+∑P私はCLuster3にいます距離(PC3)2

上記の WCSS の式では、

P私はクラスター1にいます距離(PC1)2: これは、クラスター内の各データ ポイントとその重心の間の距離の 2 乗の合計であり、他の 2 つの項についても同じです。

Javaオブジェクトの配列

データ点と重心の間の距離を測定するには、ユークリッド距離やマンハッタン距離などの任意の方法を使用できます。

クラスターの最適な値を見つけるために、エルボ法では以下の手順に従います。

  • さまざまな K 値 (1 ~ 10 の範囲) に対して、指定されたデータセットに対して K 平均法クラスタリングを実行します。
  • K の値ごとに、WCSS 値を計算します。
  • 計算された WCSS 値とクラスター数 K の間の曲線をプロットします。
  • 鋭い曲がりの点またはプロットの点が腕のように見える場合、その点が K の最適値とみなされます。

グラフが大きく曲がって肘のように見えることからエルボ法と呼ばれています。エルボ法のグラフは以下の画像のようになります。

K 平均法クラスタリング アルゴリズム

注: 指定されたデータ ポイントに等しいクラスターの数を選択できます。データ ポイントと同じ数のクラスターを選択すると、WCSS の値はゼロになり、それがプロットの終点になります。

K 平均法クラスタリング アルゴリズムの Python 実装

上のセクションでは、K 平均法アルゴリズムについて説明しました。次に、それを使用してどのように実装できるかを見てみましょう。 パイソン

実装する前に、ここでどのような種類の問題を解決するのかを理解しましょう。したがって、次のデータセットがあります。 モール_顧客 、これはモールを訪れ、そこで買い物をした顧客のデータです。

指定されたデータセットでは、 Customer_Id、性別、年齢、年収 ($)、および支出スコア (これは、顧客がモールで費やした金額の計算値であり、値が大きいほど、より多く費やしたことになります)。このデータセットからいくつかのパターンを計算する必要があります。これは教師なし手法であるため、正確に何を計算すればよいかわかりません。

実装のために従うべき手順は次のとおりです。

    データの前処理 エルボー法を使用して最適なクラスター数を見つける トレーニング データセットでの K 平均法アルゴリズムのトレーニング クラスターの視覚化

ステップ-1: データの前処理ステップ

最初のステップは、回帰と分類の以前のトピックで行ったように、データの前処理です。ただし、クラスタリング問題に関しては、他のモデルとは異なります。それについて話し合いましょう:

Javaで文字列をintに変換する
    ライブラリのインポート
    前のトピックで行ったように、まず、データの前処理の一部であるモデルのライブラリをインポートします。コードを以下に示します。
 # importing libraries import numpy as nm import matplotlib.pyplot as mtp import pandas as pd 

上記のコードでは、 しこり 数学計算を実行するためにインポートしました。 マットプロットライブラリ はグラフをプロットするためのもので、 パンダ データセットを管理するためのものです。

    データセットのインポート:
    次に、使用する必要があるデータセットをインポートします。ここでは、Mall_Customer_data.csv データセットを使用しています。以下のコードを使用してインポートできます。
 # Importing the dataset dataset = pd.read_csv('Mall_Customers_data.csv') 

上記のコード行を実行すると、Spyder IDE でデータセットを取得します。データセットは以下の画像のようになります。

K 平均法クラスタリング アルゴリズム

上記のデータセットから、その中にいくつかのパターンを見つける必要があります。

    独立変数の抽出

ここでは、データ前処理ステップに従属変数は必要ありません。これはクラスタリングの問題であり、何を決定すればよいかわかりません。したがって、機能のマトリックス用のコード行を追加するだけです。

 x = dataset.iloc[:, [3, 4]].values 

ご覧のとおり、3 つだけを抽出しています。rdそして4番目特徴。これは、モデルを視覚化するために 2D プロットが必要であり、customer_id などの一部の機能は必要ないためです。

ステップ 2: エルボー法を使用して最適なクラスター数を見つける

2 番目のステップでは、クラスタリング問題に最適なクラスタ数を見つけようとします。したがって、上で説明したように、ここではこの目的のためにエルボー法を使用します。

ご存知のとおり、エルボー メソッドは WCSS の概念を使用して、Y 軸に WCSS 値をプロットし、X 軸にクラスター数をプロットすることによってプロットを描画します。したがって、1 から 10 までのさまざまな k 値に対する WCSS の値を計算します。以下はそのコードです。

 #finding optimal number of clusters using the elbow method from sklearn.cluster import KMeans wcss_list= [] #Initializing the list for the values of WCSS #Using for loop for iterations from 1 to 10. for i in range(1, 11): kmeans = KMeans(n_clusters=i, init='k-means++', random_state= 42) kmeans.fit(x) wcss_list.append(kmeans.inertia_) mtp.plot(range(1, 11), wcss_list) mtp.title('The Elobw Method Graph') mtp.xlabel('Number of clusters(k)') mtp.ylabel('wcss_list') mtp.show() 

上記のコードでわかるように、次のように使用しました。 KMeans スクラーンのクラス。クラスターライブラリを使用してクラスターを形成します。

次に作成したのは、 wcss_list 変数を使用して空のリストを初期化します。これは、1 から 10 までのさまざまな k 値に対して計算された wcss の値を含めるために使用されます。

その後、1 から 10 の範囲の異なる k 値で反復するための for ループを初期化しました。 Python の for ループではアウトバウンド制限が除外されるため、10 を含むには 11 とみなされます。番目価値。

コードの残りの部分は、前のトピックで行ったものと似ています。特徴のマトリックスにモデルを当てはめてから、クラスター数と WCSS の間のグラフをプロットしました。

出力: 上記のコードを実行すると、以下の出力が得られます。

K 平均法クラスタリング アルゴリズム

上のプロットから、エルボ点が次の位置にあることがわかります。 5. したがって、ここでのクラスターの数は 5 になります。

K 平均法クラスタリング アルゴリズム

ステップ 3: トレーニング データセットで K 平均法アルゴリズムをトレーニングする

クラスターの数がわかったので、データセット上でモデルをトレーニングできるようになります。

モデルをトレーニングするには、上のセクションで使用したのと同じ 2 行のコードを使用しますが、形成する必要があるクラスターが 5 つあることがわかっているため、ここでは i を使用する代わりに 5 を使用します。コードを以下に示します。

命題論理
 #training the K-means model on a dataset kmeans = KMeans(n_clusters=5, init='k-means++', random_state= 42) y_predict= kmeans.fit_predict(x) 

1行目は上記と同じでKMeansクラスのオブジェクトを作成しています。

コードの 2 行目で、従属変数を作成しました。 y_predict モデルをトレーニングします。

上記のコード行を実行すると、y_predict 変数が取得されます。以下で確認できます 変数エクスプローラー Spyder IDE のオプション。これで、y_predict の値を元のデータセットと比較できるようになりました。以下の画像を考えてみましょう。

K 平均法クラスタリング アルゴリズム

上の画像から、CustomerID 1 がクラスターに属していることがわかります。

3 (インデックスは 0 から始まるため、2 は 3 とみなされます)、2 はクラスター 4 に属し、以下同様です。

ステップ 4: クラスターの視覚化

最後のステップは、クラスターを視覚化することです。モデルには 5 つのクラスターがあるため、各クラスターを 1 つずつ視覚化します。

クラスターを視覚化するには、matplotlib の mtp.scatter() 関数を使用した散布図を使用します。

 #visulaizing the clusters mtp.scatter(x[y_predict == 0, 0], x[y_predict == 0, 1], s = 100, c = 'blue', label = 'Cluster 1') #for first cluster mtp.scatter(x[y_predict == 1, 0], x[y_predict == 1, 1], s = 100, c = 'green', label = 'Cluster 2') #for second cluster mtp.scatter(x[y_predict== 2, 0], x[y_predict == 2, 1], s = 100, c = 'red', label = 'Cluster 3') #for third cluster mtp.scatter(x[y_predict == 3, 0], x[y_predict == 3, 1], s = 100, c = 'cyan', label = 'Cluster 4') #for fourth cluster mtp.scatter(x[y_predict == 4, 0], x[y_predict == 4, 1], s = 100, c = 'magenta', label = 'Cluster 5') #for fifth cluster mtp.scatter(kmeans.cluster_centers_[:, 0], kmeans.cluster_centers_[:, 1], s = 300, c = 'yellow', label = 'Centroid') mtp.title('Clusters of customers') mtp.xlabel('Annual Income (k$)') mtp.ylabel('Spending Score (1-100)') mtp.legend() mtp.show() 

上記のコード行では、1 から 5 の範囲の各クラスターのコードを記述しました。 mtp.scatter の最初の座標、つまり、行列を表示するための x 値を含む x[y_predict == 0, 0]特徴値であり、y_predict の範囲は 0 から 1 です。

出力:

K 平均法クラスタリング アルゴリズム

出力イメージには、5 つの異なるクラスターが異なる色で明確に表示されています。クラスターは、データセットの 2 つのパラメーター間で形成されます。顧客の年収と支出。要件や選択に応じて色やラベルを変更できます。上記のパターンから、以下に示すいくつかの点も観察できます。

    クラスター1は、顧客の平均給与と平均支出を示しているため、これらの顧客を次のように分類できます。
  • クラスター 2 は、顧客の収入は高いが支出が低いことを示しているため、次のように分類できます。 注意深い
  • クラスター 3 は、収入が低く、支出も少ないことを示しているため、賢明であると分類できます。
  • Cluster4 は、低所得で支出が非常に高い顧客を示しているため、次のように分類できます。 不注意
  • Cluster5 には、高収入と高額支出の顧客が表示されるため、これらの顧客はターゲットとして分類でき、これらの顧客はモール所有者にとって最も収益性の高い顧客になる可能性があります。