基于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文件中。

相关文章
|
3月前
|
机器学习/深度学习 算法 前端开发
别再用均值填充了!MICE算法教你正确处理缺失数据
MICE是一种基于迭代链式方程的缺失值插补方法,通过构建后验分布并生成多个完整数据集,有效量化不确定性。相比简单填补,MICE利用变量间复杂关系,提升插补准确性,适用于多变量关联、缺失率高的场景。本文结合PMM与线性回归,详解其机制并对比效果,验证其在统计推断中的优势。
1260 11
别再用均值填充了!MICE算法教你正确处理缺失数据
|
3月前
|
算法 搜索推荐 JavaScript
基于python智能推荐算法的全屋定制系统
本研究聚焦基于智能推荐算法的全屋定制平台网站设计,旨在解决消费者在个性化定制中面临的选择难题。通过整合Django、Vue、Python与MySQL等技术,构建集家装设计、材料推荐、家具搭配于一体的一站式智能服务平台,提升用户体验与行业数字化水平。
|
3月前
|
存储 分布式计算 大数据
基于Python大数据的的电商用户行为分析系统
本系统基于Django、Scrapy与Hadoop技术,构建电商用户行为分析平台。通过爬取与处理海量用户数据,实现行为追踪、偏好分析与个性化推荐,助力企业提升营销精准度与用户体验,推动电商智能化发展。
|
3月前
|
存储 监控 算法
监控电脑屏幕的帧数据检索 Python 语言算法
针对监控电脑屏幕场景,本文提出基于哈希表的帧数据高效检索方案。利用时间戳作键,实现O(1)级查询与去重,结合链式地址法支持多条件检索,并通过Python实现插入、查询、删除操作。测试表明,相较传统列表,检索速度提升80%以上,存储减少15%,具备高实时性与可扩展性,适用于大规模屏幕监控系统。
148 5
|
3月前
|
机器学习/深度学习 大数据 关系型数据库
基于python大数据的台风灾害分析及预测系统
针对台风灾害预警滞后、精度不足等问题,本研究基于Python与大数据技术,构建多源数据融合的台风预测系统。利用机器学习提升路径与强度预测准确率,结合Django框架实现动态可视化与实时预警,为防灾决策提供科学支持,显著提高应急响应效率,具有重要社会经济价值。
|
3月前
|
机器学习/深度学习 大数据 关系型数据库
基于python大数据的青少年网络使用情况分析及预测系统
本研究基于Python大数据技术,构建青少年网络行为分析系统,旨在破解现有防沉迷模式下用户画像模糊、预警滞后等难题。通过整合多平台亿级数据,运用机器学习实现精准行为预测与实时干预,推动数字治理向“数据驱动”转型,为家庭、学校及政府提供科学决策支持,助力青少年健康上网。
|
3月前
|
机器学习/深度学习 算法 数据可视化
基于MVO多元宇宙优化的DBSCAN聚类算法matlab仿真
本程序基于MATLAB实现MVO优化的DBSCAN聚类算法,通过多元宇宙优化自动搜索最优参数Eps与MinPts,提升聚类精度。对比传统DBSCAN,MVO-DBSCAN有效克服参数依赖问题,适应复杂数据分布,增强鲁棒性,适用于非均匀密度数据集的高效聚类分析。
|
4月前
|
缓存 监控 算法
苏宁item_get - 获得商品详情接口深度# 深度分析及 Python 实现
苏宁易购item_get接口可实时获取商品价格、库存、促销等详情,支持电商数据分析与竞品监控。需认证接入,遵守调用限制,适用于价格监控、销售分析等场景,助力精准营销决策。(238字)

热门文章

最新文章

推荐镜像

更多