機械学習入門 vol.11 クラスタリング

本コンテンツは機械学習入門講座を各所でやっている内容の一部を、受講者の皆様の予習・復習のために公開しているものです。対象読者は、Pythonをやったことがほとんどない方やつまづいてしまっている方でも概ね実行できるようになるレベルで書いています。解説は講座でそれなりに詳しくしているため、コードにコメントする以上の説明はあまり記述していません。

各コードはJupyterシリーズやiPythonで記述しながら実行できるように記述しています。

AI/DX/機械学習/Pythonのアドバイザリー、社内研修、セミナー等承っております。
webサイトからお問い合わせください。
[BeeComb Grid株式会社](https://beecomb-grid.co.jp/)

# 機械学習入門シリーズ記事

1. [機械学習入門 vol.1 Pythonの基礎１ 記述とデータ型](https://qiita.com/mychaelstyle/items/500f67b01fda79c215d0) -> 講座第3回に相当
1. [機械学習入門 vol.2 Pythonの基礎2 条件分岐と処理](https://qiita.com/mychaelstyle/items/891dcad83e94f8edd3aa) -> 講座第3回に相当
1. [機械学習入門 vol.3 Pythonの基礎3 関数・クラス・モジュール](https://qiita.com/mychaelstyle/items/d5506f372219b162c8c8) -> 講座第3回に相当
1. [機械学習入門 vol.4 表（Pandas）の基本操作](https://qiita.com/mychaelstyle/items/96ea9e8c679f908205ab) -> 講座第3回/第4回に相当
1. [機械学習入門 vol.5 グラフ(Seaborn)の基本操作](https://qiita.com/mychaelstyle/items/5acf7fdb1f11ba5478d1) -> 講座第3/4回に相当
1. [機械学習入門 vol.6 回帰 - 線形回帰](https://qiita.com/mychaelstyle/items/a12882a75d348952b1b9) -> 講座第4回に相当
1. [機械学習入門 vol.7 回帰 - ランダムフォレストとパラメータチューニング](https://qiita.com/mychaelstyle/items/48238d70c7602ca14a0c) -> 講座第4回に相当
1. [機械学習入門 vol.8 回帰 - その他の回帰 (k近傍法,ラッソ回帰,リッジ回帰..etc)](https://qiita.com/mychaelstyle/items/fc51cf384b517fb405f8) -> 講座第4回に相当
1. [機械学習入門 vol.9 判別（分類）](https://qiita.com/mychaelstyle/items/34ca447a625c752dbfda) -> 講座第5回に相当
1. [機械学習入門 vol.10 次元削減](https://qiita.com/mychaelstyle/items/69aab0c098dfa1e19e7d) -> 講座第6回に相当
1. 機械学習入門 vol.11 クラスタリング -> 講座第6回に相当

# 機械学習入門 vol.11 クラスタリング

クラスタリングは距離や類似度など一定のルールをもとにデータをグルーピングすることで、データの規則性や未発見の分類の発見などデータ分析に利用できる、また精度をさほど求められないレコメンデーション等にも利用できるというお話をさせていただき、k平均法（K Means）を実践しました。

講座ではもともと分類可能なあやめデータセット（アイリスデータセット）をクラスタリングしてみることで、どのようにグルーピングされるかをみていただきました。


```python
# KMeansクラスのインポート
from sklearn.cluster import KMeans
# あやめデータセットを利用するためのdatasetsインポート
from sklearn import datasets
# pandasインポート
import pandas as pd
# あやめデータセットの読み込み
iris = datasets.load_iris()
iris
```

実際に３つのグループ（クラスター）に分けるには以下のようにn_clusters=3を引数にしてKMeansクラスをインスタンス化し、fit_predict(データ）で実行して結果を得られました。

```python
# 3クラスターに分けるKMeansインスタンスを作成
km = KMeans(n_clusters=3)
# クラスタリング実行して結果を取得
predictions = km.fit_predict(iris.data)
# 結果を表示
predictions
```

講座ではpandasの操作のパターンを色々お見せするためにjoinを使ってクラスタリング結果と一緒にデータフレームに入れて表示してみました。

```python
# あやめデータセットのデータでデータフレーム作成
iris_df = pd.DataFrame(iris.data, columns=iris.feature_names)
# 分類番号（あやめデータセットの正解ラベル）のデータフレーム作成
labels_df = pd.DataFrame(iris.target, columns=['分類番号'])
# クラスタリング結果のデータフレーム作成
prediction_df = pd.DataFrame(predictions,columns=['クラスター番号'])
# データと分類番号のデータセットを結合
results = iris_df.join(labels_df, how='left')
# さらにクラスタ番号のデータセットを結合
results = results.join(prediction_df, how='left')
# データフレームを表示
results
```

クラスタリング結果で系列分けしてペアプロットで表示してみました。

```python
# グラフライブラリ読み込みとフォント設定
import matplotlib as mpl
import seaborn as sb
mpl.rcParams['font.family'] = 'Hiragino Maru Gothic Pro'
sb.set(font=['Hiragino Maru Gothic Pro'])
# ペアプロット表示
sb.pairplot(results, hue='クラスター番号')
```

![image.png](https://qiita-image-store.s3.ap-northeast-1.amazonaws.com/0/28471/86601ca8-f85f-ef46-c7ea-ecd3b26368bc.png)

分類の方でも同じように表示してみると、距離ベースでクラスタリングしても似たようなグルーピングになっていることが見て取れます。

```python
sb.pairplot(results, hue='分類番号')
```

クラスターの中心とラベルを表示してみます。

```python
print('クラスタ中心: ', km.cluster_centers_)
print('クラスタラベル: ', km.labels_)
```

ついでにDBSCANとMeanShiftとAgglomerativeClusteringを。

```python
from sklearn.cluster import DBSCAN
dbs = DBSCAN(eps=1)
predictions = dbs.fit_predict(iris.data)
predictions
```

```python
from sklearn.cluster import MeanShift
ms = MeanShift()
predictions = ms.fit_predict(iris.data)
predictions
```


```python
from sklearn.cluster import AgglomerativeClustering
ac = AgglomerativeClustering(n_clusters=3)
predictions = ac.fit_predict(iris.data)
predictions
```

実践ワークショップは別途行ったりしてますので、ご興味おありの方は[ホームページ](https://beecomb-grid.co.jp/)のお問い合わせフォームからお問い合わせください。


# 機械学習入門シリーズ記事

1. [機械学習入門 vol.1 Pythonの基礎１ 記述とデータ型](https://qiita.com/mychaelstyle/items/500f67b01fda79c215d0) -> 講座第3回に相当
1. [機械学習入門 vol.2 Pythonの基礎2 条件分岐と処理](https://qiita.com/mychaelstyle/items/891dcad83e94f8edd3aa) -> 講座第3回に相当
1. [機械学習入門 vol.3 Pythonの基礎3 関数・クラス・モジュール](https://qiita.com/mychaelstyle/items/d5506f372219b162c8c8) -> 講座第3回に相当
1. [機械学習入門 vol.4 表（Pandas）の基本操作](https://qiita.com/mychaelstyle/items/96ea9e8c679f908205ab) -> 講座第3回/第4回に相当
1. [機械学習入門 vol.5 グラフ(Seaborn)の基本操作](https://qiita.com/mychaelstyle/items/5acf7fdb1f11ba5478d1) -> 講座第3/4回に相当
1. [機械学習入門 vol.6 回帰 - 線形回帰](https://qiita.com/mychaelstyle/items/a12882a75d348952b1b9) -> 講座第4回に相当
1. [機械学習入門 vol.7 回帰 - ランダムフォレストとパラメータチューニング](https://qiita.com/mychaelstyle/items/48238d70c7602ca14a0c) -> 講座第4回に相当
1. [機械学習入門 vol.8 回帰 - その他の回帰 (k近傍法,ラッソ回帰,リッジ回帰..etc)](https://qiita.com/mychaelstyle/items/fc51cf384b517fb405f8) -> 講座第4回に相当
1. [機械学習入門 vol.9 判別（分類）](https://qiita.com/mychaelstyle/items/34ca447a625c752dbfda) -> 講座第5回に相当
1. [機械学習入門 vol.10 次元削減](https://qiita.com/mychaelstyle/items/69aab0c098dfa1e19e7d) -> 講座第6回に相当
1. 機械学習入門 vol.11 クラスタリング -> 講座第6回に相当

AI/DX/機械学習/Pythonのアドバイザリー、社内研修、セミナー等承っております。
webサイトからお問い合わせください。
[BeeComb Grid株式会社](https://beecomb-grid.co.jp/)