Python数据聚类与分群分析【附代码】

本文详细介绍了KMeans和DBSCAN两种聚类算法的工作原理、代码实现以及在银行客户分群和新闻聚类场景中的应用。KMeans以距离为基础,DBSCAN则基于密度,两者在实际应用中有各自的优势和局限性。

摘要生成于 C知道 ,由 DeepSeek-R1 满血版支持, 前往体验 >

目录

1、KMeans算法

(1)KMeans算法的原理介绍

(2)KMeans算法的代码实现

(3)案例 - 银行客户分群模型

1、背景

2、读取银行客户数据

3、模型搭建与使用

2、DBSCAN算法

(1)DBSCAN算法的原理介绍

(2)DBSCAN算法的代码实现

(3)KMeans VS DBSCAN

3、案例 - 新闻聚类分群模型

(1)背景

(2)文本数据的读取与处理

 1、读取数据

2、中文分词

3、文本向量化基础:建立词频矩阵

4、文本向量化实战:构造特征变量

(3)模型搭建与使用

1、通过KMeans算法进行聚类分群

2、通过DBSCAN算法进行聚类分群


1、KMeans算法

(1)KMeans算法的原理介绍

       KMeans算法的K代表类别数量,Means代表每个类别内样本的均值,所以KMeans算法又称为K-均值算法。KMeans算法以距离作为样本间相似度的度量标准,将距离相近的样本分配至同一个类别。样本间距离的计算方式可以是欧氏距离,曼哈顿距离,余弦相似度等,KMeans算法通常采用欧氏距离来度量各样本间的距离

       KMeans算法的核心思想是:对每个样本点计算离各个中心点的距离,并将该样本点分配给最近中心点代表的类别,一次迭代完成后,根据聚类结果更新每个类别的中心点,然后重复之前操作再次迭代,直到前后两次分类结果没有差别。下面我们以一个简单案例对KMeans算法的原理进行解释,该案例目的是将样本点聚成3个类别(K=3

(2)KMeans算法的代码实现

       使用一些简单的二维数据来说明如何在Python当中实现KMeans算法

import numpy as np
data = np.array([[3, 2], [4, 1], [3, 6], [4, 7], [3, 9], [6, 8], [6, 6], [7, 7]])
import matplotlib.pyplot as plt
plt.scatter(data[:, 0], data[:, 1], c="red", marker='o', label='samples')  
plt.legend()  
plt.show()

       data[:,0]表示的则是X列的数,同理data[:, 1]表示的则是Y列的数。此外散点图函数scatter()中的参数c表示颜色,maker表示形状,label则表示数据标签,散点图如下所示:

       调用Python已经开发好的相关库来进行KMeans的聚类运算,代码如下

from sklearn.cluster import KMeans
kms = KMeans(n_clusters=2)
kms.fit(data)

       使用散点图展示KMeans算法的聚类结果:

plt.scatter(data[label == 0][:, 0], data[label == 0][:, 1], c="red", marker='o', label='class0') 
plt.scatter(data[label == 1][:, 0], data[label == 1][:, 1], c="green", marker='*', label='class1') 
plt.legend() 

       使用散点图展示KMeans算法的聚类结果:

       我们将K值设为3

kms_3 = KMeans(n_clusters=3)
kms_3.fit(data)
label_3 = kms_3.labels_
print(label_3)
plt.scatter(data[label_3 == 0][:, 0], data[label_3 == 0][:, 1], c="red", marker='o', label='class0')  
plt.scatter(data[label_3 == 1][:, 0], data[label_3 == 1][:, 1], c="green", marker='*', label='class1') 
plt.scatter(data[label_3 == 2][:, 0], data[label_3 == 2][:, 1], c="blue", marker='+', label='class2') 
plt.legend()  

       散点图如下所示:

(3)案例 - 银行客户分群模型

1、
评论 1
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

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

抵扣说明:

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

余额充值