Cucco’s Compute Hack

コンピュータ関係の記事を書いていきます。

sklearnでクラスタリング(その2)

プロットするプログラムhello_scatterもつけてみた。
f:id:Cucco:20190303163512p:plain

import numpy as np
import matplotlib.pyplot as plt
from sklearn.cluster import KMeans

def hello_kmeans_demo():
    X = np.array([[1, 2], [1, 4], [1, 0],[10, 2], [10, 4], [10, 0]])
    """
    array([[ 1,  2],
       [ 1,  4],
       [ 1,  0],
       [10,  2],
       [10,  4],
       [10,  0]])
    X.shapeは、(6,2)
    """
    kmeans = KMeans(n_clusters=2, random_state=0).fit(X)
 #クラスタリングの結果のラベルが手に入る
    Y=np.array(kmeans.labels_)

    #print("cluster_centers_",kmeans.cluster_centers_)
    #print("inertia_",kmeans.inertia_)
    #print("kmeans.n_iter_",kmeans.n_iter_)

 #プロット関数呼び出し
    hello_scatter(X,Y)

def hello_scatter(np_data,np_target=None,dim_x=0,dim_y=1):
    """
    指定された次元で、scatterプロットする。
    targetのラベルが0ならば赤、1ならば緑、2ならば青、それ以外は黒でプロット。
    """
    color_list=["black"]*np_data.shape[0]#shapeで(行,列)が返ってくるので行数分のリストを作成。
    for i in np.where(np_target==0)[0]:
        color_list[i]="red"
    for i in np.where(np_target==1)[0]:
        color_list[i]="green"
    for i in np.where(np_target==2)[0]:
        color_list[i]="blue"

    #arrayは、[行,列]で指定
    plt.scatter(x=np_data[:,dim_x], y=np_data[:,dim_y], c=color_list, marker=".")
    plt.grid(True)
    plt.show()

if __name__ == "__main__":
    hello_kmeans_demo()