使用K-Means聚类分析啤酒数据集

在这篇博客中,我们将探讨如何使用K-Means聚类算法来分析一个啤酒数据集。我们将通过Python编程语言和Scikit-learn库来实现这一过程,并使用轮廓系数来评估聚类的效果

 简介

K-Means是一种广泛使用的聚类算法,它通过将数据点划分为K个簇来工作,每个簇由其质心(centroid)表示。算法的目标是最小化簇内数据点到质心的距离总和。轮廓系数是一种评估聚类效果的指标,它结合了簇内凝聚度和簇间分离度。

算法原理

 K-Means算法基于距离度量来工作,通常使用欧几里得(Euclidean)距离。算法的步骤如下

     

  1. 初始化:随机选择K个数据点作为初始的簇中心点。

  2. 分配:对于数据集中的每个点,计算其与所有簇中心点的距离,并将该点分配给最近的簇中心点。

  3. 更新:对于每个簇,计算簇中所有点的平均值,并更新簇中心点为该平均值。

  4. 迭代:重复步骤2和步骤3,直到满足停止条件,如簇中心点的变化小于某个阈值,或者达到预设的最大迭代次数。

数学表达

设数据集为 X = \{x_1, x_2, ..., x_n} ),其中 n 是数据点的数量,每个数据点 xi​ 有 d 维特征。算法的目标是找到 K 个簇中心点 C = \{c_1, c_2, ..., c_K} ,使得簇内误差平方和最小化:

其中,Si​ 是分配给第 i 个簇的所有数据点的集合,∣∣x−ci​∣∣ 是数据点 x 和簇中心 ci​ 之间的欧几里得距离。

优缺点

优点
简单、易于理解和实现。当簇为凸形且大小相似时,聚类效果较好。对大数据集有效。
 

缺点:
需要预先指定簇的数量 K。对初始簇中心点的选择敏感,可能导致局部最优解。
可能难以处理非凸形簇和大小差异大的簇。
对噪声和异常值敏感。

应用场景

  • 客户细分:根据购买行为将客户分为不同的群体。

  • 图像压缩:通过聚类减少图像数据的存储空间。

  • 社交网络分析:识别社交网络中的社区结构。

  • 异常检测:识别数据集中的异常或离群点

代码

import pandas as pd
from sklearn.cluster import KMeans
from sklearn import metrics

#读取文件
beer = pd.read_table("data.txt", sep=' ',encoding='utf8',engine='python')
#传入变量(列名)
X = beer[["calories","sodium","alcohol","cost"]]

"""根据分成不同的簇,自动计算轮廓系数得分
"""

scores = []
for k in range (2,10):: #寻找合适的K值
    labels = KMeans(n_clusters=k).fit(X).labels_#从左到右依次进行计算
    score = metrics.silhouette_score(X, labels)#轮廓系数
    scores.append(score)
print(scores)

#绘制得分结果
import matplotlib.pyplot as plt

plt.plot(list(range(2,10)),scores)
plt.xlabel("Number of clusters nitialized")
plt.ylabel("Sihouette Score")
plt.show()
#聚类
km = KMeans(n_clusters=2).fit(X)


#对聚类结果进行评分

"""采用轮廓系数评分
X:数据集scaled_cluster:聚类结果
score:非标准化聚类结果的轮廓系数
"""
score = metrics.silhouette_score(X,beer.cluster)
print(score)




运行结果

 结论

通过上述步骤,我们成功地使用K-Means算法对啤酒数据集进行了聚类分析,并使用轮廓系数评估了聚类效果。轮廓系数得分图帮助我们选择了最佳的簇数量。在实际应用中,我们可以根据业务需求和数据特点选择合适的聚类算法和评估指标。

评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值