【勉強メモ5】教師無し学習(KMeans)


始めに

今回記事作成者の機械学習の勉強&メモのために記事を作成しています
間違いなどありましたらコメントにてご指摘いただけると幸いです。

参考資料

Pythonによるあたらしいデータ分析の教科書 [ 寺田 学 ]

見て試してわかる機械学習アルゴリズムの仕組み 機械学習図鑑 [ 秋庭 伸也 ]

ライブラリを呼び出そう


#ライブラリのインポート
import pandas as pd
import numpy as np
import matplotlib
import matplotlib.pyplot as plt
%matplotlib inline
import random
random.seed(0)
import copy

# データ可視化のライブラリ
import seaborn as sns
#最大表示列数の指定(ここでは100列を指定) 
pd.set_option('display.max_columns',100)

# floatの表示方法を、小数点以下2桁で設定する処理
pd.options.display.float_format = '{:.2f}'.format

データの準備&確認

#データの読み込み
# data → 呼び出すデータのファイル名
# train_data.csv → 読み込むファイル名
data = pd.read_csv("data/train_data.csv")

#データの確認
data.head()

#データ数確認
data.shape

#データ情報の要約確認
data.info()

#データ統計要約確認
data.describe()

#ダミー変数作成する方法 
#性別、年代 → ダミー変数にしたいカラム名を選択すればよい
data.pd.get_dummies(data,drop_first = True, columns = ["性別", "年代"])

適切なクラスター数を検討する方法

#ElbowMethodで最適なクラスター数を求める方法

#空の箱を作る
distortions = []

# 1-10クラスタまで計算
for i in range(1,11):
    #クラスタリングの計算式作成
    km = KMeans(n_clusters = i, random_state = 1234)
    #クラスタリングの計算実施
    km.fit(data)
    #km.fitするとkm.inertia_が得られる
    distortions.append(km.inertia_)

#グラフを作成する(わかりやすくするため)
plt.plot(range(1,11),distortions, marker = "o")
#X軸のラベル作成
plt.xlabel("Number of clusters")
#Y軸のラベル作成
plt.ylabel("Distortion")
#グラフ出力
plt.show()

KMeansのモデル作成

# K-meeansを実施する
# K-meansでクラスターラベルを付与していく

# K-meansライブラリを呼び出す
from sklearn.cluster import KMeans

#モデルを初期化
##今回はクラスター数 [5]とした。
## random_state =1234 → 毎回同じランダムをしてもらうため
km = KMeans(n_clusters = 5, random_state = 1234)

#学習は教師ありと同じように model.fit(data)で実行する
km.fit(data)

#ラベルを付与する場合も教師あり同様にmodel.predeict(data)で実行する
cluster_label = km.predict(data)

# コピーするためのライブラリを呼び出す
import copy
#データをコピーする
data_with_cluster_label = copy.copy(data)
#
data_with_cluster_label["cluster_label"] = cluster_label

# ラベルが付与されているか確認
data_with_cluster_label.head()


結果を出力する


#データをコピーする(元データ保護のため)
data_with_cluster_label = copy.copy(data)
#クラスターラベルを表に追加する
data_with_cluster_label["cluster_label"] = cluster_label
#クラスターラベルが表に追加されているかを確認する
data_with_cluster_label.head()

#エクセルに出力する
data_with_cluster_label.to_excel("data/kmeans_result.xlsx", index=False, encoding='cp932')

参考資料

Pythonによるあたらしいデータ分析の教科書 [ 寺田 学 ]

見て試してわかる機械学習アルゴリズムの仕組み 機械学習図鑑 [ 秋庭 伸也 ]