Categories
前処理

k-means

k-meansは、データ分析や機械学習で広く使われるクラスタリング手法です。このアルゴリズムの目的は、与えられたデータセットをK個のグループ(クラスタ)に分類することです。各データポイントは、最も近い中心点(セントロイド)を持つクラスタに割り当てられます。

k-meansの基本的な手順は以下の通りです:

  1. クラスタ数Kを決定する
  2. K個のセントロイドをランダムに初期化する
  3. 各データポイントを最も近いセントロイドに割り当てる
  4. 各クラスタの新しいセントロイドを計算する
  5. セントロイドが収束するまで3と4を繰り返す

Pythonを使ってk-meansを実装する例を見てみましょう:

import numpy as np
import matplotlib.pyplot as plt
from sklearn.cluster import KMeans

# サンプルデータの生成
np.random.seed(42)
X = np.random.randn(300, 2)

# KMeansモデルの作成と学習
kmeans = KMeans(n_clusters=3, random_state=42)
kmeans.fit(X)

# 結果の可視化
plt.figure(figsize=(10, 7))
plt.scatter(X[:, 0], X[:, 1], c=kmeans.labels_, cmap='viridis')
plt.scatter(kmeans.cluster_centers_[:, 0], kmeans.cluster_centers_[:, 1], 
            marker='x', s=200, linewidths=3, color='r', label='Centroids')
plt.title('K-means Clustering')
plt.legend()
plt.show()

このコードでは、まず300個の2次元データポイントをランダムに生成します。次に、scikit-learnライブラリのKMeansクラスを使用して、3つのクラスタにデータを分類します。最後に、結果をプロットして、各データポイントとクラスタの中心点を視覚化します。

k-meansアルゴリズムの特徴:

  • 単純性: 実装が簡単で、大規模なデータセットにも適用可能です。
  • 速度: 比較的高速に動作し、大量のデータを処理できます。
  • 解釈のしやすさ: 結果が直感的に理解しやすいです。

ただし、いくつかの制限もあります:

  • クラスタ数Kを事前に指定する必要があります。
  • 初期セントロイドの選択によって結果が変わる可能性があります。
  • 非球形のクラスタや密度の異なるクラスタの検出が苦手です。

k-meansは、顧客セグメンテーション、画像圧縮、異常検出など、様々な分野で活用されています。データの特性や目的に応じて、他のクラスタリング手法と比較検討することが重要です。