iT邦幫忙

2023 iThome 鐵人賽

DAY 27
0

~今天要分享的是「Kmeans實作」~

瞭解了Kmeans的基本概念後,來看看在Python中是如何撰寫程式碼來做分析的吧~

Kmeans分析模型在sklearn的cluster套件底下:
from sklearn.cluster import KMeans

在建立Kmeans模型時,有兩個重點先提醒大家:

  1. 由於Kmeans是非監督式學習,所以資料中不需用事先標記答案(依變數)
  2. 必須先決定要分成幾群(K值)

[程式碼實作]

import pandas as pd
from sklearn.datasets import load_iris
iris = load_iris()
iris_data = pd.DataFrame(iris['data'],columns=iris['feature_names'])
print("DATA:",iris_data.head())
print("=====================================================================")

X=iris_data[['sepal length (cm)','sepal width (cm)','petal length (cm)','petal width (cm)']]

from sklearn.cluster import KMeans
Kmeans=KMeans(n_clusters=3)
Kmeans.fit(X)
Kmeans_pred=Kmeans.predict(X)
iris_data['cluster']=Kmeans_pred
print("DATA:",iris_data.head())
print("=====================================================================")

a=iris_data.groupby('cluster').mean()
b=iris_data.groupby('cluster').count()
print("各群在每個變數下的平均值:",a)
print("=====================================================================")
print("各群個數:",b["sepal length (cm)"])

使用sklearn的資料集”iris”進行分析,n_clusters設定為3

https://ithelp.ithome.com.tw/upload/images/20231012/20163290I3FPDPDnnq.png
從結果可以發現,分類在第零群的有62個,且'sepal length (cm)'約為5.90,'sepal width (cm)'約為2.75,'petal length (cm)'約為4.39,'petal width (cm)'約為1.43;分類在第一群的有50個,且'sepal length (cm)'約為5.01,'sepal width (cm)'約為3.43,'petal length (cm)'約為1.46,'petal width (cm)'約為0.25;分類在第二群的有38個,且'sepal length (cm)'約為6.85,'sepal width (cm)'約為3.07,'petal length (cm)'約為5.74,'petal width (cm)'約為2.07。
若是要做成分析報告的話,我們可以更進一步對於每個群做命名,像是我觀察到第二群的幾乎所有數據都高於其他兩個群,所以我會將第二群命名為「大花花群」;而第一群只有在” sepal width (cm)”的數據是三者中最高的,其餘都是最低的,所以我會將第一群命名為「萼片長花花群」;而由於第零群的數據幾乎都位於中間值,所以我會將第零群命名為「普通花花群」。
註:命名的名稱因人而異,筆者只是將看到數據結果的反應作命名而已,若有更好的名稱歡迎在下方留言處留言歐!


上一篇
鐵人賽第二十六天~Kmeans介紹
下一篇
鐵人賽第二十八天~常見錯誤總整理
系列文
打造數據科學之路:資料分析與機器學習的完整指南30
圖片
  直播研討會
圖片
{{ item.channelVendor }} {{ item.webinarstarted }} |
{{ formatDate(item.duration) }}
直播中

尚未有邦友留言

立即登入留言