1. 程式人生 > 其它 >機器學習—聚類5-2(輪廓係數)

機器學習—聚類5-2(輪廓係數)

使用輪廓係數評估超市客戶分組效果

主要步驟流程:

  • 1. 匯入包
  • 2. 匯入資料集
  • 3. 使用K-Means演算法得到不同K值對應的WCSS4. 使用K-Means演算法得到不同K值對應的輪廓係數
    • 3.1 生成WCSS
    • 3.2. 畫出 K值 vs WCSS 圖
  • 4. 使用K-Means演算法得到不同K值對應的輪廓係數

  資料集連結:https://www.cnblogs.com/ojbtospark/p/16009774.html  

1. 匯入包

In [1]:
# 匯入包
import numpy as np
import pandas as pd
import matplotlib.pyplot as plt

 

2. 匯入資料集

In [2]:
# 匯入資料集
dataset = pd.read_csv('Mall_Customers.csv')
dataset
Out[2]:
  CustomerID Genre Age Annual Income (k$) Spending Score (1-100)
0 1 Male 19 15 39
1 2 Male 21 15 81
2 3 Female 20 16 6
3 4 Female 23
16 77
4 5 Female 31 17 40
... ... ... ... ... ...
195 196 Female 35 120 79
196 197 Female 45 126 28
197 198 Male 32 126 74
198 199 Male 32 137 18
199 200 Male 30 137 83

200 rows × 5 columns

僅選取Annual Income (k$)和Spending Score (1-100)這2個欄位

In [3]:
X = dataset.iloc[:, [3, 4]].values
X[:
3, :]
Out[3]:
array([[15, 39],
       [15, 81],
       [16,  6]], dtype=int64)
 

3. 使用K-Means演算法得到不同K值對應的WCSS

3.1 生成WCSS

In [4]:
# 使用肘部法則選擇最優的K值
from sklearn.cluster import KMeans
wcss = []
for i in range(1, 11):
    kmeans = KMeans(n_clusters = i, init = 'k-means++', n_init=10, max_iter=300, random_state = 0)
    kmeans.fit(X)
    wcss.append(kmeans.inertia_)

3.2. 畫出 K值 vs WCSS 圖

In [5]:
# 畫出 聚類個數 vs WCSS 圖
plt.figure()
plt.plot(range(1, 11), wcss, 'ro-')
plt.title('The Elbow Method')
plt.xlabel('Number of clusters')
plt.ylabel('WCSS')
plt.show()

由上圖可見,從K=5開始,WCSS下降不再明顯

 

4. 使用K-Means演算法得到不同K值對應的輪廓係數

In [6]:
# 聚類個數2-10時,對應的輪廓係數
from sklearn.metrics import silhouette_score
for i in range(2, 11):
    kmeans = KMeans(n_clusters = i, init = 'k-means++', n_init=10, max_iter=300, random_state = 0)
    kmeans.fit(X)
    y_kmeans = kmeans.predict(X)
    silhouette = silhouette_score(X, y_kmeans)
    print('當聚類個數是%d時,對應的輪廓係數是%.4f' %(i, silhouette))
當聚類個數是2時,對應的輪廓係數是0.2969
當聚類個數是3時,對應的輪廓係數是0.4676
當聚類個數是4時,對應的輪廓係數是0.4932
當聚類個數是5時,對應的輪廓係數是0.5539
當聚類個數是6時,對應的輪廓係數是0.5394
當聚類個數是7時,對應的輪廓係數是0.5270
當聚類個數是8時,對應的輪廓係數是0.4576
當聚類個數是9時,對應的輪廓係數是0.4565
當聚類個數是10時,對應的輪廓係數是0.4498
 

由輸出結果可見,聚類個數是5時,輪廓係數的值最高

 

結論:

  1. 肘部法則和輪廓係數都是確定K-Means模型中K值的方法