クラスタリングを用いた前処理の方法の一例として、異常値の検出と除去のサンプルコード

2024年6月17日

クラスタリングを用いた前処理の方法の一例として、異常値の検出と除去のサンプルコードを示します。この例では、Scikit-learnライブラリを使用して、K-meansクラスタリングを実行し、クラスタリングによって特定された異常値を除去します。

python
import numpy as np
from sklearn.cluster import KMeans
from sklearn.datasets import make_blobs

# サンプルデータ生成
X, _ = make_blobs(n_samples=1000, centers=3, random_state=42)

# K-meansクラスタリング
kmeans = KMeans(n_clusters=3, random_state=42)
kmeans.fit(X)

# 各データポイントの所属するクラスタを取得
labels = kmeans.labels_

# クラスタリング結果の可視化
import matplotlib.pyplot as plt

plt.scatter(X[:, 0], X[:, 1], c=labels, cmap='viridis')
plt.title('K-means Clustering')
plt.xlabel('Feature 1')
plt.ylabel('Feature 2')
plt.colorbar()
plt.show()

# クラスタリングによって異常値を除去
def remove_outliers(X, labels):
    X_filtered = []
    for i in range(len(labels)):
        if labels[i] != -1:  # 異常値でない場合
            X_filtered.append(X[i])
    return np.array(X_filtered)

X_filtered = remove_outliers(X, labels)

# 異常値を除去した後のデータの可視化
plt.scatter(X_filtered[:, 0], X_filtered[:, 1], c=labels[labels!=-1], cmap='viridis')
plt.title('Filtered Data after Removing Outliers')
plt.xlabel('Feature 1')
plt.ylabel('Feature 2')
plt.colorbar()
plt.show()

このコードでは、まずmake_blobs関数を使用してサンプルデータを生成し、その後K-meansクラスタリングを実行します。次に、クラスタリング結果を可視化し、異常値を除去した後のデータを再度可視化しています。異常値は、クラスタラベルが-1のデータポイントとして扱われます。

未分類

Posted by ぼっち