TECH I.S.

機械学習 - K-means(K平均法)


K-means(K平均法)

K-means(K平均法) は、データ ポイントをクラスタリングするための教師なし学習方法です。このアルゴリズムは、各クラスターの分散を最小化することにより、データ ポイントを K 個のクラスターに繰り返し分割します。

ここでは、エルボー法を使用して K の最適な値を推定し、K 平均法クラスタリングを使用してデータ ポイントをクラスターにグループ化する方法を示します。


それはどのように機能しますか?

まず、各データポイントがK個のクラスターの1つにランダムに割り当てられます。次に、各クラスターの重心(機能的には中心)を計算し、各データポイントを最も近い重心を持つクラスターに再割り当てします。各データポイントのクラスター割り当てが変更されなくなるまで、このプロセスを繰り返します。

K-meansクラスタリングでは、データをグループ化するクラスターの数であるKを選択する必要があります。エルボ法を使用すると、慣性(距離ベースのメトリック)をグラフ化し、直線的に減少し始めるポイントを視覚化できます。このポイントは「エブロー」と呼ばれ、データに基づくKの最適な値の適切な推定値です。

いくつかのデータ ポイントを視覚化することから始めます。

import matplotlib.pyplot as plt x = [4, 5, 10, 4, 3, 11, 14 , 6, 10, 12] y = [21, 19, 24, 17, 16, 25, 24, 22, 21, 21] plt.scatter(x, y) plt.show()

結果


実行例 »


広告



次に、エルボ法を使用して、さまざまなKの値に対する慣性を視覚化します。

from sklearn.cluster import KMeans data = list(zip(x, y)) inertias = [] for i in range(1,11):     kmeans = KMeans(n_clusters=i)     kmeans.fit(data)     inertias.append(kmeans.inertia_) plt.plot(range(1,11), inertias, marker='o') plt.title('Elbow method') plt.xlabel('Number of clusters') plt.ylabel('Inertia') plt.show()

結果


実行例 »

エルボ法は、2がKの適切な値であることを示しているため、再トレーニングして結果を視覚化します。

kmeans = KMeans(n_clusters=2) kmeans.fit(data) plt.scatter(x, y, c=kmeans.labels_) plt.show()

結果


実行例 »

例の説明

必要なモジュールをインポートします。

import matplotlib.pyplot as pltfrom sklearn.cluster import KMeans

Matplotlib モジュールについては、
Matplotlibチュートリアル」を参照して下さい。

scikit-learnは、機械学習用の一般的なライブラリです。

データセット内の 2 つの変数に似た配列を作成します。ここでは 2 つの変数しか使用していませんが、このメソッドは任意の数の変数で機能することに注意してください。

x = [4, 5, 10, 4, 3, 11, 14 , 6, 10, 12]y = [21, 19, 24, 17, 16, 25, 24, 22, 21, 21]

データを一連のポイントに変換します。

data = list(zip(x, y))print(data)

結果:

[(4, 21), (5, 19), (10, 24), (4, 17), (3, 16), (11, 25), (14, 24), (6, 22), (10, 21), (12, 21)]

Kの最適な値を見つけるには、可能な値の範囲についてデータ全体でK平均を実行する必要があります。データ ポイントは10個しかないため、クラスターの最大数は10です。したがって、range(1,11)内の各値Kについて、K平均法モデルをトレーニングし、そのクラスター数でインターシャをプロットします。

inertias = []for i in range(1,11):    kmeans = KMeans(n_clusters=i)    kmeans.fit(data)    inertias.append(kmeans.inertia_) plt.plot(range(1,11), inertias, marker='o')plt.title('Elbow method')plt.xlabel('Number of clusters')plt.ylabel('Inertia')plt.show()

結果:

上のグラフの「エルボー」(内部がより直線的になる場所)がK=2にあることがわかります。次に、K-meansアルゴリズムをもう一度当てはめ、データに割り当てられたさまざまなクラスターをプロットできます。

kmeans = KMeans(n_clusters=2)kmeans.fit(data)plt.scatter(x, y, c=kmeans.labels_)plt.show()

結果:


プログラミング学習を加速させる

プログラミングをプロの講師に教えてもらいませんか。

テックアイエスのプログラミングスクールは初心者も大歓迎です。年齢制限もありません。転職・副業に強く、挫折させない手厚いサポートで稼ぐ力を身につけましょう!

スクールの詳細