基于python的k-means聚类分析算法,对文本、数据等进行聚类,有轮廓系数和手肘法检验

简介: 本文详细介绍了基于Python实现的k-means聚类分析算法,包括数据准备、预处理、标准化、聚类数目确定、聚类分析、降维可视化以及结果输出的完整流程,并应用该算法对文本数据进行聚类分析,展示了轮廓系数法和手肘法检验确定最佳聚类数目的方法。

K-means算法是一种常见的聚类算法,用于将数据点分成不同的组(簇),使同一组内的数据点彼此相似,不同组之间的数据点相对较远。以下是K-means算法的基本工作原理和步骤:

工作原理:

初始化:选择K个初始聚类中心点(质心)。
分配:将每个数据点分配到最接近的聚类中心,形成K个簇。
更新:根据每个簇中的数据点重新计算聚类中心。
迭代:重复步骤2和3,直到满足停止条件(如聚类中心不再改变或达到最大迭代次数)。

算法步骤:

初始化:随机选择K个数据点作为初始聚类中心。
分配:对于每个数据点,计算其与各个聚类中心的距离,将其分配给距离最近的聚类中心。
更新:重新计算每个簇的聚类中心,使用该簇内所有数据点的平均值。
迭代:重复步骤2和3,直到聚类中心稳定或达到最大迭代次数。

优点:

简单且高效,适用于大规模数据集。
对于球状簇具有很好的效果,易于解释。

缺点:

需要预先设定聚类数K。
对异常值和噪声敏感。
结果可能受初始聚类中心的选择影响。

应用领域:

图像分割、文本聚类、市场分析、推荐系统等。

实现聚类分析的基本步骤如下:

数据准备与预处理:

读取数据:从Excel文件中读取数据,对数据进行去重和缺失值处理。
特征选择:选择用于聚类分析的特征列,如'地区发展程度'、'时间间隔'、'评论回复数'、'评论点赞数'等。

df.drop\_duplicates(subset=\['评论'\], keep='first', inplace=True)
df.dropna(subset=\['评论'\],axis=0,inplace=True)
# 将评论时间列转换为时间格式
df\['评论时间'\] = pd.to\_datetime(df\['评论时间'\])
# 计算每个时间点距禖当前时间的时间间隔(单位:秒)
current\_time = datetime.now()
df\['时间间隔'\] = round((current\_time - df\['评论时间'\]).dt.total\_seconds().astype(int)/86400,1)
print(df.info())
# 创建一个字典,用于映射地区与发展水平的关系
region\_mapping = {
    '发达地区': \['北京省', '上海省', '天津省', '上海省'\],
    '普通地区': \['广东省', '江苏省', '浙江省', '福建省', '湖北省', '湖南省', '安徽省', '江西省', '山东省', '辽宁省', '吉林省', '黑龙江省'\],
    '发展地区': \['重庆省', '河南省', '四川省', '陕西省', '天津省', '山西省', '内蒙古省', '河北省', '广西省', '海南省', '河南省', '河北省', '山西省', '内蒙古省', '宁夏省', '青海省', '甘肃省',
             '陕西省', '新疆省'\],
    '未知': \['设置了隐私'\],
}

数据标准化:

使用StandardScaler对特征数据进行标准化,使数据具有零均值和单位方差。

scaler = StandardScaler()
X\_data = scaler.fit\_transform(X\_data)

确定聚类数目:

使用“肘部法”和“轮廓系数法”等方法确定合适的聚类数目。

\# 构造自定义函数,用于绘制不同k值和对应总的簇内离差平方和的折线图
def k\_SSE(X, clusters):
    # 选择连续的K种不同的值
    K = range(1, clusters + 1)
    # 构建空列表用于存储总的簇内离差平方和
    TSSE = \[\]
    for k in K:
        # 用于存储各个簇内离差平方和
        SSE = \[\]
        kmeans = KMeans(n\_clusters=k)
        kmeans.fit(X)
        # 返回簇标签
        labels = kmeans.labels\_
        # 返回簇中心
        centers = kmeans.cluster\_centers\_
        # 计算各簇样本的离差平方和,并保存到列表中
        for label in set(labels):
            SSE.append(np.sum((X\[labels == label, :\] - centers\[label, :\]) \*\* 2))
        # 计算总的簇内离差平方和
        TSSE.append(np.sum(SSE))

    # 中文和负号的正常显示
    plt.rcParams\['font.sans-serif'\] = \['Microsoft YaHei'\]
    plt.rcParams\['axes.unicode\_minus'\] = False
    # 设置绘图风格
    plt.style.use('ggplot')
    # 绘制K的个数与GSSE的关系
    plt.plot(K, TSSE, 'b\*-')
    plt.xlabel('簇的个数')
    plt.ylabel('簇内离差平方和之和')
    plt.title('手肘法')
    # 显示图形
    plt.show()

聚类分析:

使用自定义的KMeans类或Sklearn中的KMeans进行聚类分析,传入特征数据和确定的聚类数目。
获取聚类标签并将其与特征数据关联。

n\_clusters = 5
km = KMeans(n\_clusters=n\_clusters).fit(X\_data)

#% 降维后画图显示聚类结果
#将原始数据中的索引设置成得到的数据类别
X\_rsl = pd.DataFrame(X\_data,index=km.labels\_)
X\_rsl\_center = pd.DataFrame(km.cluster\_centers\_) #找出聚类中心

降维可视化:

使用TSNE对聚类结果进行降维处理,将高维数据降至二维或三维。
利用降维后的数据和聚类中心绘制散点图,根据聚类结果进行着色展示。

tsne = TSNE()
tsne.fit\_transform(X\_rslwithcenter) #进行数据降维,并返回结果

结果输出:

将聚类标签与原始数据关联,将聚类结果输出到Excel文件中。

相关文章
|
1月前
|
JSON 算法 API
1688商品详情API实战:Python调用全流程与数据解析技巧
本文介绍了1688电商平台的商品详情API接口,助力电商从业者高效获取商品信息。接口可返回商品基础属性、价格体系、库存状态、图片描述及商家详情等多维度数据,支持全球化语言设置。通过Python示例代码展示了如何调用该接口,帮助用户快速上手,适用于选品分析、市场研究等场景。
|
28天前
|
Web App开发 数据采集 JavaScript
动态网页爬取:Python如何获取JS加载的数据?
动态网页爬取:Python如何获取JS加载的数据?
329 58
|
21天前
|
人工智能 数据可视化 Python
在Python中对数据点进行标签化
本文介绍了如何在Python中使用Matplotlib和Seaborn对数据点进行标签化,提升数据可视化的信息量与可读性。通过散点图示例,展示了添加数据点标签的具体方法。标签化在标识数据点、分类数据可视化及趋势分析中具有重要作用。文章强调了根据需求选择合适工具,并保持图表清晰美观的重要性。
47 15
|
13天前
|
数据采集 Web App开发 JavaScript
Python爬虫解析动态网页:从渲染到数据提取
Python爬虫解析动态网页:从渲染到数据提取
|
24天前
|
存储 监控 算法
企业数据泄露风险防控视域下 Python 布隆过滤器算法的应用研究 —— 怎样防止员工私下接单,监控为例
本文探讨了布隆过滤器在企业员工行为监控中的应用。布隆过滤器是一种高效概率数据结构,具有空间复杂度低、查询速度快的特点,适用于大规模数据过滤场景。文章分析了其在网络访问监控和通讯内容筛查中的实践价值,并通过Python实现示例展示其技术优势。同时,文中指出布隆过滤器存在误判风险,需在准确性和资源消耗间权衡。最后强调构建多维度监控体系的重要性,结合技术与管理手段保障企业运营安全。
48 10
|
1月前
|
供应链 API 开发者
1688 商品数据接口终极指南:Python 开发者如何高效获取标题 / 价格 / 销量数据(附调试工具推荐)
1688商品列表API是阿里巴巴开放平台提供的服务,允许开发者通过API获取1688平台的商品信息(标题、价格、销量等)。适用于电商选品、比价工具、供应链管理等场景。使用时需构造请求URL,携带参数(如q、start_price、end_price等),发送HTTP请求并解析返回的JSON/XML数据。示例代码展示了如何用Python调用该API获取商品列表。
108 18
|
24天前
|
存储 机器学习/深度学习 人工智能
多模态RAG实战指南:完整Python代码实现AI同时理解图片、表格和文本
本文探讨了多模态RAG系统的最优实现方案,通过模态特定处理与后期融合技术,在性能、准确性和复杂度间达成平衡。系统包含文档分割、内容提取、HTML转换、语义分块及向量化存储五大模块,有效保留结构和关系信息。相比传统方法,该方案显著提升了复杂查询的检索精度(+23%),并支持灵活升级。文章还介绍了查询处理机制与优势对比,为构建高效多模态RAG系统提供了实践指导。
220 0
多模态RAG实战指南:完整Python代码实现AI同时理解图片、表格和文本
|
1月前
|
算法 Python
Apriori算法的Python实例演示
经过运行,你会看到一些集合出现,每个集合的支持度也会给出。这些集合就是你想要的,经常一起被购买的商品组合。不要忘记,`min_support`参数将决定频繁项集的数量和大小,你可以根据自己的需要进行更改。
88 18
|
1月前
|
存储 机器学习/深度学习 算法
论上网限制软件中 Python 动态衰减权重算法于行为管控领域的创新性应用
在网络安全与行为管理的学术语境中,上网限制软件面临着精准识别并管控用户不合规网络请求的复杂任务。传统的基于静态规则库或固定阈值的策略,在实践中暴露出较高的误判率与较差的动态适应性。本研究引入一种基于 “动态衰减权重算法” 的优化策略,融合时间序列分析与权重衰减机制,旨在显著提升上网限制软件的实时决策效能。
43 2
|
3月前
|
机器学习/深度学习 存储 设计模式
Python 高级编程与实战:深入理解性能优化与调试技巧
本文深入探讨了Python的性能优化与调试技巧,涵盖profiling、caching、Cython等优化工具,以及pdb、logging、assert等调试方法。通过实战项目,如优化斐波那契数列计算和调试Web应用,帮助读者掌握这些技术,提升编程效率。附有进一步学习资源,助力读者深入学习。

热门文章

最新文章

推荐镜像

更多