0
1

Delete article

Deleted articles cannot be recovered.

Draft of this article would be also deleted.

Are you sure you want to delete this article?

More than 1 year has passed since last update.

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

Posted at

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

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

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

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

  1. 機械学習入門 vol.1 Pythonの基礎1 記述とデータ型 -> 講座第3回に相当
  2. 機械学習入門 vol.2 Pythonの基礎2 条件分岐と処理 -> 講座第3回に相当
  3. 機械学習入門 vol.3 Pythonの基礎3 関数・クラス・モジュール -> 講座第3回に相当
  4. 機械学習入門 vol.4 表(Pandas)の基本操作 -> 講座第3回/第4回に相当
  5. 機械学習入門 vol.5 グラフ(Seaborn)の基本操作 -> 講座第3/4回に相当
  6. 機械学習入門 vol.6 回帰 - 線形回帰 -> 講座第4回に相当
  7. 機械学習入門 vol.7 回帰 - ランダムフォレストとパラメータチューニング -> 講座第4回に相当
  8. 機械学習入門 vol.8 回帰 - その他の回帰 (k近傍法,ラッソ回帰,リッジ回帰..etc) -> 講座第4回に相当
  9. 機械学習入門 vol.9 判別(分類) -> 講座第5回に相当
  10. 機械学習入門 vol.10 次元削減 -> 講座第6回に相当
  11. 機械学習入門 vol.11 クラスタリング -> 講座第6回に相当

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

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

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

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

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

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

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

# あやめデータセットのデータでデータフレーム作成
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

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

# グラフライブラリ読み込みとフォント設定
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

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

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

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

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

ついでにDBSCANとMeanShiftとAgglomerativeClusteringを。

from sklearn.cluster import DBSCAN
dbs = DBSCAN(eps=1)
predictions = dbs.fit_predict(iris.data)
predictions
from sklearn.cluster import MeanShift
ms = MeanShift()
predictions = ms.fit_predict(iris.data)
predictions
from sklearn.cluster import AgglomerativeClustering
ac = AgglomerativeClustering(n_clusters=3)
predictions = ac.fit_predict(iris.data)
predictions

実践ワークショップは別途行ったりしてますので、ご興味おありの方はホームページのお問い合わせフォームからお問い合わせください。

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

  1. 機械学習入門 vol.1 Pythonの基礎1 記述とデータ型 -> 講座第3回に相当
  2. 機械学習入門 vol.2 Pythonの基礎2 条件分岐と処理 -> 講座第3回に相当
  3. 機械学習入門 vol.3 Pythonの基礎3 関数・クラス・モジュール -> 講座第3回に相当
  4. 機械学習入門 vol.4 表(Pandas)の基本操作 -> 講座第3回/第4回に相当
  5. 機械学習入門 vol.5 グラフ(Seaborn)の基本操作 -> 講座第3/4回に相当
  6. 機械学習入門 vol.6 回帰 - 線形回帰 -> 講座第4回に相当
  7. 機械学習入門 vol.7 回帰 - ランダムフォレストとパラメータチューニング -> 講座第4回に相当
  8. 機械学習入門 vol.8 回帰 - その他の回帰 (k近傍法,ラッソ回帰,リッジ回帰..etc) -> 講座第4回に相当
  9. 機械学習入門 vol.9 判別(分類) -> 講座第5回に相当
  10. 機械学習入門 vol.10 次元削減 -> 講座第6回に相当
  11. 機械学習入門 vol.11 クラスタリング -> 講座第6回に相当

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

0
1
0

Register as a new user and use Qiita more conveniently

  1. You get articles that match your needs
  2. You can efficiently read back useful information
  3. You can use dark theme
What you can do with signing up
0
1

Delete article

Deleted articles cannot be recovered.

Draft of this article would be also deleted.

Are you sure you want to delete this article?