k-meansでクラスタリング シンプル版

scikit-learnでk-meansを調べていると、いくつか便利な関数が用意されているのに気付いたのでシンプルに実行できる形をまとめておく。

まずは読み込み

import pandas as pd
from sklearn.cluster import KMeans
from sklearn.preprocessing import StandardScaler
 
# データセットを読み込み
df = pd.read_csv("http://pythondatascience.plavox.info/wp-content/uploads/2016/05/Wholesale_customers_data.csv")

# 前処理。対象とすべき数値のみにする
del(df['Channel'])
del(df['Region'])
df.head(10)

# ほんとはここで欠損値・外れ値などに対する前処理を行っておく

----------------

	Fresh	Milk	Grocery	Frozen	Detergents_Paper	Delicassen
0	12669	9656	7561	214	2674	1338
1	7057	9810	9568	1762	3293	1776
2	6353	8808	7684	2405	3516	7844
3	13265	1196	4221	6404	507	1788
4	22615	5410	7198	3915	1777	5185
5	9413	8259	5126	666	1795	1451
6	12126	3199	6975	480	3140	545
7	7579	4956	9426	1669	3321	2566
8	5963	3648	6192	425	1716	750
9	6006	11093	18881	1159	7425	2098
  1. fit()メソッド:与えられた数値の平均や偏差などを記録する(変換はしない)
  2. transform()メソッド:fitで作成した計算式を元に実際に変換する

fit_transform()メソッドは上二つを連続で行う

*インスタンスはクラス(データの処理をまとめたルール)を実体化させる

scaler = StandardScaler() # インスタンス作成
df_scaler = scaler.fit_transform(df) # 正規化
df_scaler

--------------

array([[ 0.05293319,  0.52356777, -0.04111489, -0.58936716, -0.04356873,
        -0.06633906],
       [-0.39130197,  0.54445767,  0.17031835, -0.27013618,  0.08640684,
         0.08915105],
       [-0.44702926,  0.40853771, -0.0281571 , -0.13753572,  0.13323164,
         2.24329255],
       ...,
       [ 0.20032554,  1.31467078,  2.34838631, -0.54337975,  2.51121768,
         0.12145607],
       [-0.13538389, -0.51753572, -0.60251388, -0.41944059, -0.56977032,
         0.21304614],
       [-0.72930698, -0.5559243 , -0.57322717, -0.62009417, -0.50488752,
        -0.52286938]])

あとは同じ。

kmeans = KMeans(n_clusters=4, random_state=0)
clusters = kmeans.fit(df_scaler)

df["cluster"] = clusters.labels_ # labelを付与
df.head(15)

-----------------

	Fresh	Milk	Grocery	Frozen	Detergents_Paper	Delicassen	cluster
0	12669	9656	7561	214	2674	1338	0
1	7057	9810	9568	1762	3293	1776	2
2	6353	8808	7684	2405	3516	7844	2
3	13265	1196	4221	6404	507	1788	0
4	22615	5410	7198	3915	1777	5185	0
5	9413	8259	5126	666	1795	1451	0
6	12126	3199	6975	480	3140	545	0
7	7579	4956	9426	1669	3321	2566	0
8	5963	3648	6192	425	1716	750	0
9	6006	11093	18881	1159	7425	2098	2
10	3366	5403	12974	4400	5977	1744	2
11	13146	1124	4523	1420	549	497	0
12	31714	12319	11757	287	3881	2931	2
13	21217	6208	14982	3095	6707	602	2
14	24653	9465	12091	294	5058	2168	2
このサイトの主
投稿を作成しました 98

関連投稿

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

トップに戻る