メインコンテンツまでスキップ

SciPyを使用してクラスタリングと分類を行う方法

SciPyを使用してクラスタリングと分類を行う方法について、ステップバイステップのチュートリアルをご紹介します。

クラスタリングと分類の概要

クラスタリングと分類は、機械学習でよく使用される2つの技術であり、類似したデータポイントをグループ分けし、予測を行うために使用されます。クラスタリングは、データポイントの類似性に基づいてデータセットをグループやクラスタに分割することを目的とし、分類はデータポイントの特徴に基づいてラベルやカテゴリを割り当てることを目的とします。

ステップ1:必要なライブラリのインポート

SciPyを使用してクラスタリングと分類を行うには、必要なライブラリをインポートする必要があります。主なライブラリはnumpyscipy、およびsklearnです。

import numpy as np
from scipy.cluster import hierarchy
from scipy.spatial import distance
from sklearn.cluster import KMeans
from sklearn.datasets import make_blobs
from sklearn.model_selection import train_test_split
from sklearn.neighbors import KNeighborsClassifier

ステップ2:データの生成

クラスタリングと分類をデモンストレーションするために、sklearn.datasetsmake_blobs関数を使用してサンプルデータセットを生成しましょう。この関数は、指定された数のクラスタを生成し、それぞれのクラスタに指定された数のデータポイントを持つデータセットを作成します。

# サンプルデータの生成
X, y = make_blobs(n_samples=100, centers=3, random_state=0)

ステップ3:凝集型階層クラスタリング

凝集型階層クラスタリングは、似たクラスタを再帰的にマージしていき、停止基準が満たされるまで続ける人気のあるクラスタリング手法です。凝集型階層クラスタリングを行うためには、scipy.cluster.hierarchylinkageおよびdendrogram関数を使用します。

# ペアワイズ距離行列の計算
dist_matrix = distance.pdist(X)

# 階層的クラスタリングの実行
linkage_matrix = hierarchy.linkage(dist_matrix, method='complete')

# デンドログラムのプロット
dendrogram = hierarchy.dendrogram(linkage_matrix)

ステップ4:K-Meansクラスタリング

K-Meansクラスタリングは、データを指定された数のクラスタに分割する別の人気のあるクラスタリングアルゴリズムです。K-Meansクラスタリングを行うためには、sklearn.clusterKMeansクラスを使用します。

# K-Meansクラスタリングの実行
kmeans = KMeans(n_clusters=3, random_state=0)
labels = kmeans.fit_predict(X)

# クラスタのプロット
plt.scatter(X[:, 0], X[:, 1], c=labels)

ステップ5:K-最近傍法によるデータ分類

K-最近傍法(KNN)は、データポイントに最も近い近傍の多数決に基づいてラベルを割り当てる単純な分類アルゴリズムです。KNN分類を行うためには、sklearn.neighborsKNeighborsClassifierクラスを使用します。

# データをトレーニングセットとテストセットに分割する
X_train, X_test, y_train, y_test = train_test_split(X, y, test_size=0.2, random_state=0)

# KNN分類の実行
knn = KNeighborsClassifier(n_neighbors=3)
knn.fit(X_train, y_train)

# テストセットでの予測を行う
y_pred = knn.predict(X_test)

結論

このチュートリアルでは、SciPyを使用してクラスタリングと分類を行う方法について学びました。凝集型階層クラスタリング、K-Meansクラスタリング、およびK-最近傍法分類について取り上げました。これらの技術は、さまざまな機械学習アプリケーションで広く使用され、さまざまなデータセットに適用することができます。