PyCaret 分類(classify)教師なし

AutoMLのPyCaretを使って、分類(教師なし)を試みる。今回も下記書籍を参考にする。

!pip install numba==0.53 # 依存関係エラー対応
# https://stackoverflow.com/questions/70148065/numba-needs-numpy-1-20-or-less-for-shapley-import

!pip install pandas-profiling==3.1.0 # エラー対応 実行後にランタイム再起動

!pip install pycaret
from pycaret.utils import enable_colab
enable_colab()

今回も2022年8月現在引っかかるエラー対応をして、Colabにライブラリを読み込む。

データ読み込み

import pandas as pd
from sklearn.datasets import load_iris
iris = load_iris()
df_iris = pd.DataFrame(iris.data, columns = iris.feature_names)

アヤメを読み込んで、データフレームに落とし込む。

前処理

from pycaret.clustering import *
data_clust = setup(data = df_iris,
                   normalize = False,
                   session_id = 0,
                   silent = True)

今回はクラスタリングを試すので、クラスタリングをインポートする。

前処理も簡単。正規化なしで、ざっくり終わらせる。

models()

-----

	Name	Reference
ID		
kmeans	K-Means Clustering	sklearn.cluster._kmeans.KMeans
ap	Affinity Propagation	sklearn.cluster._affinity_propagation.Affinity...
meanshift	Mean Shift Clustering	sklearn.cluster._mean_shift.MeanShift
sc	Spectral Clustering	sklearn.cluster._spectral.SpectralClustering
hclust	Agglomerative Clustering	sklearn.cluster._agglomerative.AgglomerativeCl...
dbscan	Density-Based Spatial Clustering	sklearn.cluster._dbscan.DBSCAN
optics	OPTICS Clustering	sklearn.cluster._optics.OPTICS
birch	Birch Clustering	sklearn.cluster._birch.Birch
kmodes	K-Modes Clustering	kmodes.kmodes.KModes

利用可能なモデル一覧。kmeansとmeanshift以外分からないな…。

今回は定番のk-meansとする。

モデル作成

kmeans = create_model('kmeans', num_clusters = 7)
print(kmeans)

なんとなくクラスター数は7にしてみる。

可視化

plot_model(kmeans)

クラスターごとに色分けした2次元プロット。右側が若干ごちゃついているが、きれいに分けられているように見える。

PCAは主成分分析。多次元データを圧縮して、より区別が付きやすいデータに見せ方を変えてくれる。これ自体も教師なし学習。

ただ、元データの行列散布図も確認した上で使用する。

# エルボー図
plot_model(kmeans, plot = 'elbow')

k-meansでクラスタ数を指定する際に悩むのが、適切なクラスタ数を指定しているかどうか。

エルボー図はSSEの数値がクラスタ数でどう変化するのかをグラフ化して表す。SSEが小さいほど適切にクラスタリングできているはずなので、SSEがガクッと下がったところが適切なクラスタ数とみなすことができる。

この場合、4までガクッと落ちているので、おそらく4あたりが適切ではないかと考える。

# シルエット図を出力
plot_model(kmeans, plot = 'silhouette')

ちょっと理屈が分からないので、おいおい勉強する。

予測

最後は予測して、クラスタ番号を各データに振っていく。

ret = predict_model(kmeans, data = df_iris)
ret

-----

	sepal length (cm)	sepal width (cm)	petal length (cm)	petal width (cm)	Cluster
0	5.1	3.5	1.4	0.2	Cluster 1
1	4.9	3.0	1.4	0.2	Cluster 6
2	4.7	3.2	1.3	0.2	Cluster 6
3	4.6	3.1	1.5	0.2	Cluster 6
4	5.0	3.6	1.4	0.2	Cluster 1
...	...	...	...	...	...
145	6.7	3.0	5.2	2.3	Cluster 4
146	6.3	2.5	5.0	1.9	Cluster 3
147	6.5	3.0	5.2	2.0	Cluster 4
148	6.2	3.4	5.4	2.3	Cluster 4
149	5.9	3.0	5.1	1.8	Cluster 3
このサイトの主
投稿を作成しました 98

関連投稿

検索語を上に入力し、 Enter キーを押して検索します。キャンセルするには ESC を押してください。

トップに戻る