机器学习—聚类5-2(轮廓系数)

使用轮廓系数评估超市客户分组效果

主要步骤流程:

  • 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]:
 CustomerIDGenreAgeAnnual 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值的方法

 

posted @   Theext  阅读(912)  评论(0编辑  收藏  举报
相关博文:
阅读排行:
· 无需6万激活码!GitHub神秘组织3小时极速复刻Manus,手把手教你使用OpenManus搭建本
· C#/.NET/.NET Core优秀项目和框架2025年2月简报
· Manus爆火,是硬核还是营销?
· 终于写完轮子一部分:tcp代理 了,记录一下
· 【杭电多校比赛记录】2025“钉耙编程”中国大学生算法设计春季联赛(1)
点击右上角即可分享
微信分享提示