機器學習—聚類5-2(輪廓係數)
阿新 • • 發佈:2022-03-15
使用輪廓係數評估超市客戶分組效果
主要步驟流程:
- 1. 匯入包
- 2. 匯入資料集
- 3. 使用K-Means演算法得到不同K值對應的WCSS4. 使用K-Means演算法得到不同K值對應的輪廓係數
- 3.1 生成WCSS
- 3.2. 畫出 K值 vs WCSS 圖
-
4. 使用K-Means演算法得到不同K值對應的輪廓係數
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時,輪廓係數的值最高
結論:
- 肘部法則和輪廓係數都是確定K-Means模型中K值的方法