週末副業記

土日は副業エンジニアのブログです。副業に関することを投稿します。

Python初心者が機械学習【K平均法】


f:id:ml_begin:20180520173515j:plain
非階層型クラスタリングの一つである「K平均法(K-means)」について書いていきます。

 

K平均法とは

与えられたクラスタ(cluster:集団,群)数 = K個

に分類し、クラスタの平均値をもとに分類することから、

K平均法(Kmeans)と呼ばれています。

どのようなデータを対象に行うか

scikit-learn(http://scikit-learn.org/stable/index.html)には、対象のデータへの使用に適した機械学習アルゴリズムを示すマップが公開されています。
f:id:ml_begin:20180520161644p:plain
引用元:http://scikit-learn.org/stable/tutorial/machine_learning_map/

今回は、

>50sample:Yes
predicting a category:Yes
labeld data:Yes
num of category known:Yes
<10K samples:No

というデータが対象のため、K平均法を使用します。(MiniBatchでもよい)
f:id:ml_begin:20180520163539p:plain

実践

contents_a(0あるいは1)の値を、contents_b、contents_cから分類していきます。

データ作成
# ライブラリ
import pandas as pd
import numpy as np

#定義
loop_times = 100
a_0,a_1 = 0, 1
data_frame = pd.DataFrame(index=[], columns=['A', 'B','C'])

#一行ずつdata_frameに追加
for i in range(loop_times):
    
    contens_a = a_0 if i > loop_times/2 else a_1
    contens_b = np.random.randint(2)
    contens_c = np.random.randn()
    series = pd.Series([contens_a, contens_b, contens_c], index=data_frame.columns)
    data_frame = data_frame.append(series, ignore_index = True)
 
# CSV ファイル (kmeans.csv) として出力
data_frame.to_csv("/kmeans.csv")

 

K平均法プログラム
# ライブラリ
import numpy as np
import pandas as pd 
import matplotlib.pyplot as plt
from sklearn import cluster, preprocessing
 
#作成したデータセットを読み込む
df_all=pd.read_csv('/kmeans.csv')
df_test=df_all[["A","B","C"]]
df_test.columns = [u'label_A', u'label_B', u'label_C']
pd.DataFrame(df_test)  #この行を実行するとデータが見れる
 
 
#データの整形
X=df_test[["label_A","label_C"]]
sc=preprocessing.StandardScaler()
sc.fit(X)
X_norm=sc.transform(X)
 
 
#描画
 
x=X_norm[:,0]
y=X_norm[:,1]
z=df_test["label_A"]
plt.subplot(2, 1, 1)
plt.scatter(x,y, c=z)
plt.show
 
# k-meansを実施
km=cluster.KMeans(n_clusters=2)
z_km=km.fit(X_norm)
 
 
#結果を描画
plt.subplot(2, 1, 2)
plt.scatter(x,y, c=z_km.labels_)
plt.scatter(z_km.cluster_centers_[:,0],z_km.cluster_centers_[:,1],s=250, marker='*',c='red')
plt.show

結果

f:id:ml_begin:20180520172224p:plain
上の図が、実際のラベリング、
下の図が、K平均法によってクラスタリングした図です。
赤い星が、各クラスターの中心点となっています。