聚类算法.

本文介绍了聚类算法的基本概念、应用场景和与分类算法的区别。通过具体案例展示了如何使用Sklearn实现KMeans聚类,详细解析了KMeans算法的原理、距离度量方法以及性能评估指标,包括误差平方和、肘部法和轮廓系数。文章还讨论了KMeans算法的特点及在实际应用中需要注意的问题,提供了多个聚类分析案例,包括顾客数据、年龄与收入人群的分群分析。
摘要由CSDN通过智能技术生成

聚类算法

1. 为什么学习聚类算法

在没有具体类别标签列或结果的前提下,我们还希望对已有的数据进行分类,这时候就需要使用聚类方法。

1.1 聚类方法案例引入

(1)两个人在话筒前面同时说话,录音后发现这两个人的声音混杂在一起。因此我们需要区分两个人的声音,这时候我们依靠声音的频谱不同对声音进行不同的区分,当然如果实现并不知道每个人声音的特点的话,那么需要利用人们的声音数据进行训练,这就可以利用监督学习方式来实现。

(2)我们试想下面场景:不同客户的有不同的特点和需求,针对每个客户的特点选定不同的销售策略。我们可以对每个客户选取不同的特征,之后进行静态分类,即聚类。

聚类在商业的应用中还有如下,按照不同主题对文档、音乐、电影进行分组,或基于常见的购买行为,发现有相同的兴趣爱好顾客,并在此构建推荐引擎。

聚类就是要挖掘数据蕴含的相似性的结构信息。

下面通过一个例子,简单的说明相似性的结构信息。对于下面的16张扑克牌,如何将他们分组呢?

image-20210702093421157 image-20210702093450687

总结:无论选择哪种划分方法,关键在于我们怎样定义并度量“相似性”。

1.2 聚类算法在现实中的应用

  • 用户画像,广告推荐,搜索引擎的流量推荐,恶意流量识别
  • 基于位置信息的商业推送,新闻聚类,筛选排序
  • 图像分割,降维,识别;离群点检测;信用卡异常消费;发掘相同功能的基因片段

[外链图片转存失败,源站可能有防盗链机制,建议将图片保存下来直接上传(img-qPcT8uT6-1634000523337)(./images/wpsj82Dyo.png)]

1.3 聚类算法的概念

聚类算法:

一种典型的无监督学习算法,主要用于将相似的样本自动归到一个类别中。

在聚类算法中根据样本之间的相似性,将样本划分到不同的类别中,对于不同的相似度计算方法,会得到不同的聚类结果,常用的相似度计算方法有欧式距离法。

1.4 聚类算法与分类算法最大的区别

聚类算法是无监督的学习算法,而分类算法属于监督的学习算法。

1.5 小结

  • 聚类的定义【了解】
  • 一种典型的无监督学习算法,
  • 主要用于将相似的样本自动归到一个类别中
  • 计算样本和样本之间的相似性,一般使用欧式距离

2. 小试牛刀-Sklearn实现KMeans聚类

2.1 api介绍

sklearn.cluster.KMeans(n_clusters=8)

参数: n_clusters:开始的聚类中心数量 整型,n_clusters=8,生成的聚类数,即产生的质心(centroids)数。

方法: estimator.fit(x) estimator.predict(x) estimator.fit_predict(x)计算聚类中心并预测每个样本属于哪个类别,相当于先调用fit(x),然后再调用predict(x)

2.2 案例

随机创建不同二维数据集作为训练集,并结合k-means算法将其聚类,你可以尝试分别聚类不同数量的簇,并观察聚类效果:

img

聚类参数n_cluster传值不同,得到的聚类结果不同

img

2.3 流程分析

img

2.4 代码实现

  1. 创建数据集
import matplotlib.pyplot as plt
from sklearn.datasets.samples_generator import make_blobs
from sklearn.cluster import KMeans
from sklearn.metrics import silhouette_score 
# 创建数据集
# X为样本特征,Y为样本簇类别, 共1000个样本,每个样本2个特征,共4个簇,
# 簇中心在[-1,-1], [0,0],[1,1], [2,2], 簇方差分别为[0.4, 0.2, 0.2, 0.2]
X, y = make_blobs(n_samples=1000, n_features=2, centers=[[-1, -1], [0, 0], [1, 1], [2, 2]],
                  cluster_std=[0.4, 0.2, 0.2, 0.2],
                  random_state=9)

# 数据集可视化
plt.scatter(X[:, 0], X[:, 1], marker='o')
image-20210702095247377
  1. 使用k-means进行聚类,并使用silhouette_score(轮廓系数)评估
model = KMeans(n_clusters=2, random_state=9)
y_pred = model.fit_predict(X)
# 分别尝试n_cluses=2\3\4,然后查看聚类效果
plt.scatter(X[:, 0], X[:, 1], c=y_pred)
plt.show()

# 用轮廓系数评估的聚类分数
silhouette_score(X, y_pred)
# 0.6435178953651656
image-20210702095349349

2.5 小结

api:sklearn.cluster.KMeans(n_clusters=8)【知道】

参数:

  • n_clusters:开始的聚类中心数量

方法:

  • estimator.fit_predict(x)
  • 计算聚类中心并预测每个样本属于哪个类别,相当于先调用fit(x),然后再调用predict(x)

3. 聚类原理详解

3.1 距离的度量(相似性度量)

Euclidean Distance 定义

img

其他距离衡量:余弦值(cos), 相关度 (correlation), 曼哈顿距离 (Manhattan distance)

曼哈顿距离:纽约曼哈顿的街区比较平整,我们从P1起点到P2起点,首先横向跨越三个街区,在纵向跨越2个街区就达到P2点了。

3.2 Kmean算法原理

3.2.1 非监督中的Kmean算法

聚类(clustering) 属于非监督学习 (unsupervised learning),无类别标记(class label).

观察下图,相同类别的通过属性之间的相似性聚集在一起,算法中并未涉及类别标记的问题。

3.2.2 K-means算法详解

K-几个聚类中心,Mean-均值,每次迭代的时候使用均值方式迭代

  • K : 初始中心点个数(计划聚类数)
  • means:求中心点到其他数据点距离的平均值

Clustering 中的经典算法,数据挖掘十大经典算法之一

算法接受参数 k ;然后将事先输入的n个数据对象划分为 k个聚类以便使得所获得的聚类满足:同一聚类中的对象相似度较高;而不同聚类中的对象相似度较小。

算法思想:

以空间中k个点为中心进行聚类,对最靠近他们的对象归类。通过迭代的方法,逐次更新各聚类中心的值,直至得到最好的聚类结果

算法描述

(1)随机适当选择c个类的初始中心;image-20210702101146615

(2)在第k次迭代中,对任意一个样本,求其到c各中心的距离,将该样本归到距离最短的中心所在的类;

image-20210702101239305

(3)利用均值等方法更新该类的中心值;

image-20210702101402214

(4)对于所有的c个聚类中心,如果利用(2)(3)的迭代法更新后,聚类中心的值保持不变,则迭代结束,否则继续迭代。

**算法终止条件:**迭代次数/簇中心变化率/最小平方误差和SSE

img

算法核心步骤梳理:

计算距离—归类-----计算均值—距离----归类----均值----距离–…

(1)求解第i个样本xi到达第j个聚类中心的距离,选择j最小的值赋值给第i个样本的标记值。

(2)对于属于第j个样本的所有的xj求均值,作为第j个样本的新的聚类中心,聚类中心改变了,重新计算标记信息,标记变了重新计算距离。

算法流程巩固:

输入:k, data[n];

(1) 选择k个初始中心点,例如c[0]=data[0],…c[k-1]=data[k-1];

(2) 对于data[0]….data[n], 分别与c[0]…c[k-1]比较,假定与c[i]差值最少,就标记为i;

(3) 对于所有标记为i点,重新计算c[i]={所有标记为i的data[j]之和}/标记为i的个数;

(4) 重复(2)(3),直到所有c[i]值的变化小于给定阈值。

3.2.3 KMeans算法举例
  • 案例:
image-20190219171158984
  • 1、随机设置K个特征空间内的点作为初始的聚类中心(本案例中设置p1和p2)
image-20190219171244828

2、对于其他每个点计算到K个中心的距离,未知的点选择最近的一个聚类中心点作为标记类别

  • 0
    点赞
  • 1
    收藏
    觉得还不错? 一键收藏
  • 2
    评论
评论 2
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

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

抵扣说明:

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

余额充值