#分群 K-means
from sklearn.cluster import KMeans
import numpy as np
import matplotlib.pyplot as plt
%matplotlib inline
plt.style.use('ggplot')

import pandas as pd
df = pd.read_csv("StudentJob.csv",encoding = "big5")
df.head()

from sklearn.cluster import KMeans
import numpy as np
import matplotlib.pyplot as plt
%matplotlib inline
plt.style.use('ggplot')

df.salary = df.salary.astype(float)                   #traform into float type
df.working = df.working.astype(float)                 #traform into float type
X = df[['salary','working']].values                   #tranform DataFrame to ndarray Matrix  為了predict輸入的方式

 

 

#如何選擇 k

實務上我們讓程式幫忙選擇一個適合的 k,使得群間差異最大、群內差異最小

from sklearn import cluster, datasets, metrics
import matplotlib.pyplot as plt

# 迴圈
silhouette_avgs = []
ks = range(2, 11)
for k in ks:
    kmeans_fit = cluster.KMeans(n_clusters = k).fit(X)
    cluster_labels = kmeans_fit.labels_
    silhouette_avg = metrics.silhouette_score(X, cluster_labels)
    silhouette_avgs.append(silhouette_avg)

# 作圖並印出 k = 2 到 10 的績效
plt.bar(ks, silhouette_avgs)
plt.show()
print(silhouette_avgs)

由績效圖我們發現 在2群、3群的績效比較好,因此我們可以將K設定為2 OR 3

 


km = KMeans(n_clusters=2)  #K=2群
y_pred = km.fit_predict(X)
plt.figure(figsize=(10, 6))
plt.xlabel('Salary')
plt.ylabel('Rate of working')
plt.scatter(X[:, 0], X[:, 1], c=y_pred) #C是第三維度 已顏色做維度
plt.show()

km.cluster_centers_ #各群中心點(X,Y)的位置

 

 

文章標籤
全站熱搜
創作者介紹
創作者 to52016 的頭像
to52016

Eason [資料科學//Python學習/資料庫] & [拍片&剪片]

to52016 發表在 痞客邦 留言(6) 人氣(11,217)