文章目录
聚类分析
背景小故事
-
故事1:2000年美国总统大选:小布什以1%的优势赢了戈尔,想想如果对这1%的选票加以引导和吸引让他投向另一个候选人,结果就截然不同;怎么通过有限的预算来采取相关竞选活动吸引他们—聚类
-
故事2:假设你是某银行的客户关系主管,有5个经理为你工作,你想把公司所有客户组织成5个组,以便为每一个组分配一个不同的经理。策略上:你想使每个内部的客户尽可能相似,此外,两个不同“性格”的客户是不应该放在同一组。怎么做—聚类
初识聚类分析
什么是聚类分析
-
聚类分析(简称聚类):是把数据对象划分成多个子集的过程。每个子集是一个簇,尽量使得簇中的对象彼此相似,但是与其他簇中的对象不相似。由此产生的簇的集合就叫做聚类
,因此聚类其实又可称为数据分割
-
聚类和分类的区别
-
分类
a. 分类是监督学习
b. 在分类中,对于目标数据集中存在哪些类是知道的,要做的就是将每一条记录分别属于哪一类标记出来
c. 分类学习有训练实例或数据样本有类别标记
-
聚类
a. 聚类是无监督学习
b. 聚类分析是研究如何在没有训练的条件(没有示例:标签)下把样本划分为若干类
c. 与分类不同,无监督学习不依赖预先定义的类或带类标记的训练实例,需要由聚类学习算法自动确定标记
d. 需求:给定若干无标记的样本,预先也不知道到底有多少类,怎么才能把所有样本分割成不同的有意义的聚类;并且使得同一聚类相似度高,不同聚类相似度低
-
举例:假设有一批人的年龄的数据,大致知道其中有一堆少年儿童,一堆青年人,一堆老年人
a. 聚类:就是自动发现这三堆数据,并把相似的数据聚合到同一堆中。所以对于这个例子,如果要聚成3堆的话,那么输入就是一堆年龄数据,注意,此时的年龄数据并不带有类标号,也就是说我只知道里面大致有三堆人,至于谁是哪一堆,现在是不知道的,而输出就是每个数据所属的类标号,聚类完成之后,就知道谁和谁是一堆了
b. 分类就是,我事先告诉你,少年儿童、青年人及老年人的年龄是什么样的,现在新来了一个年龄,输出它的类标号,就是它是属于少年儿童、青年人、老年人的哪个类。一般来说,分类器是需要训练的,也就是要告诉你的算法,每个类的特征是什么样子,它才能识别新的数据
- 应用领域:商务智能、图像模式识别、web搜索、生物学和安全等
-
商务智能(行为相似度)
a. 把大量客户分组,使得组内的客户具有非常类似的特征(市场分割) b. 比如:分析不同性别、不同年龄、不同职业的用户的充电行为习惯(充电周期、充电时间段等)
-
图像模式识别(内容、像素相似度)
a. 在手写字符识别系统中来发现簇或者子类 b. 比如:在一个手写数字的数据集中有1,2,3等数字,注意:像2这个数字,有的人写2时会在左下方带有小圆圈,有的则不会,我们就可以使用聚类来确定“2”的子类,每个子类代表可能出现“2”的变体 c. 这种基于子类的多个模型可以有效提高图像模式识别的准确率
-
web搜索(文本相似度)
a. web页面数量巨大,关键词搜索往往会返回大量相关网页 b. 可以使用聚类来对搜索结果分组(百度、谷歌)
-
分类算法的预处理
a. 聚类还可以应用于分类算法的预处理 b. 处理之后分类算法可以在分好的簇上进行操作
-
离群点检测
a. 信用卡欺诈检测和电商中的犯罪活动监控 b. 比如:信用卡交易中的异常情况(平时都很节俭,突然变得非常昂贵和频繁)
- 相似度评判
- 欧式距离
- 余弦距离
- 皮尔逊相关系数
- KL散度(交叉熵)
- 核函数映射后的距离
聚类分析的要求
- 可伸缩性:处理不同规模数据集的能力
- 处理不同属性类型的能力:数值型、非数值型(二元、标称、序数等)
- 发现任意形状的簇:基于距离度量计算相似度的聚类算法(比如k-means)往往趋向于发现具有相近尺寸和密度的球状簇
- 处理噪声的能力:大部份数据集中包括离群点、缺失数据、未知、错误数据等
- 聚类高维数据的能力
- 。。。
基于划分的聚类算法
概念和特点
- 概念:给定一个有N个元组的数据集,基于划分的方法将构造K个分组,每一个分组就代表一个聚类(K<N)
- 大部分划分方法时基于距离的,首先创建一个初始划分。然后采取迭代的重定位技术,把对象从一个组移动到另一个组来改进划分
- 特点:计算量大,很适合发现中小规模的数据库中小规模的数据库中的球状簇
代表算法
k-均值(k-means):基于形心
流程
- 工作流程
- 选择K个点作为初始质心
- 将每个点指派到最近的质心,形成K个簇(聚类)
- 重新计算每个簇的质心(采用均值)
- 重复2-3直至质心不发生变化
- 算法详细描述
解释1:k是事先定好的聚类数量;c(i)是样例i与k个类中距离最近的那个类(1到k中的一个值);质心u(j)代表我们对属于同一个类的样本中心点的猜测(就是算的均值)
解释2:
- 定义畸变函数
-
J函数表示每个样本点到其质心的距离平方和,K-means是要将J调整到最小,可以看出函数J是因变量,c(所属类别)和u(质心)是自变量
-
所以可以固定c,调整u来使J变小
-
也可以固定u,调整c来使J变小
举例:k取2,算法迭代过程a-f
- 伪代码
function K-Means(输入数据,中心点个数K){
获取输入数据的维度D和个数N
随机生成K个D维的点作为中心点
while(算法未收敛){
对N个点:计算每个点属于哪一类。
对于K个中心点:
1,找出所有属于自己这一类的所有数据点
2,把自己的坐标修改为这些数据点的中心点坐标
}
输出结果:
}
- 数学推导
- C表示的聚类中心的值,x是属于这个簇的数据点 采用的是误差平方和作为衡量的目标函数SSE,目标是使得其最小
- 为什么选取簇集合的平均值作为聚类中心,因为这样才能是SSE达到最小,在数学中求一个函数的最小值,当然是求偏导,SSE是一个二元函数
经过公式推出c的值刚好是蔟集合的均值
优缺点
- 优点
- 算法简单易实现
- 缺点
- 需要用户事先指定类簇个数K
疑问:怎么指定呢?
方法A:肘部法则
解释:先定K=1,然后计算代价函数J;再定k=2,然后计算J,可以看出J函数单调递减,然后有一个拐点,拐点之后下降幅度就比较缓,拐点其实就是最佳K值
但是,实际情况往往是这样的,并没有拐点
方法B:根据经验和实际业务来定K值
举例:你有一批T恤需要生产,有个问题,需要生产几种型号的T恤比较合适呢
方案:收集适量消费者的(身高,体重)样本,做聚类分析,然后根据相关经验做聚类分析。
so:对于k值得指定:比较提倡的做法还是从实际问题出发,人工指定比较合理的K值,通过多次随机初始化聚类中心选取比较满意的结果
K=3
K=5
- 聚类结果对初始类簇中心的选取较为敏感
- 容易陷入局部最优
(针对1,2,3所以提出了k-means++算法做改进)
- 只能发现球型类簇
k-means++:k-means的改进
流程
- 举例
数据集中共有8个样本,分布以及对应序号如下图所示:
假设经过图1的步骤一后6号点被选择为第一个初始聚类中心,那在进行步骤二时每个样本的D(x)和被选择为第二个聚类中心的概率如下表所示:
其中的P(x)就是每个样本被选为下一个聚类中心的概率。最后一行的Sum是概率P(x)的累加和, 用于轮盘法选择出第二个聚类中心。方法是随机产生出一个0~1之间的随机数,判断它属于哪个区间,那么该区间对应的序号就是被选择出来的第二个聚类中心了。例如1号点的区间为[0,0.2),2号点的区间为[0.2, 0.525)。
从上表可以直观的看到第二个初始聚类中心是1号,2号,3号,4号中的一个的概率为0.9。而这4个点正好是离第一个初始聚类中心6号点较远的四个点。这也验证了K-means的改进思想:即离当前已有聚类中心较远的点有更大的概率被选为下一个聚类中心。可以看到,该例的K值取2是比较合适的。当K值大于2时,每个样本会有多个距离,需要取最小的那个距离作为D(x)。
k-means算法的应用
- 收集数据
- 准备数据
- 分析数据
- 训练算法(适用于监督学习)
- 测试算法(评价指标:误差平方和)
- 使用算法(一般簇的质心就能够代表整个簇的数据作为决策)
举例:
比如:分析不同性别、不同年龄、不同职业的用户的充电行为习惯(充电周期、充电时间段等)
步骤:
- 收集用户的充电数据
- 将数据结构化
- 使用K-means++算法进行数据分析
- 测试算法的准确度(误差平方和)
- 之后将用户自动划成不同的簇,每个簇的质心就能够代表整个簇的数据作为决策
- 针对不同的簇,采取各自的运营活动,比如说个性化充电
k-中心点(k-medoids):基于代表对象
基于层次的聚类算法
概念和特点
- 概念:对给定的数据集进行层次似的分解,直到某种条件满足为止。具体又可分为“自底向上”和“自顶向下”两种方案。
- 特点:较小的计算开销。然而这种技术不能更正错误的决定。
代表算法
BIRCH算法
CURE算法
CHAMELEON算法
基于密度的聚类算法
概念和特点
1.概念:只要一个区域中的点的密度大过某个阈值,就把它加到与之相近的聚类中去。
2. 特点:能克服基于距离的算法只能发现“类圆形”的聚类的缺点。
代表算法
DBSCAN算法
OPTICS算法
DENCLUE算法
基于网络聚类算法
概念和特点
- 概念:将数据空间划分成为有限个单元(cell)的网格结构,所有的处理都是以单个的单元为对象的。
- 特点:处理速度很快,通常这是与目标数据库中记录的个数无关的,只与把数据空间分为多少个单元有关。