聚类算法
2023-09-15 19:36:54 13 举报
AI智能生成
机器学习算法——聚类算法
作者其他创作
大纲/内容
简介
一种典型的无监督学习算法,主要用于将相似的样本自动归到一个类别中
聚类算法在现实中的应用
- 用户画像,广告推荐,Data Segmentation,搜索引擎的流量推荐,恶意流量识别
- 基于位置信息的商业推送,新闻聚类,筛选排序
- 图像分割,降维,识别;离群点检测;信用卡异常消费;发掘相同功能的基因片段
分类
粗聚类
细聚类
聚类与分类最大的区别
聚类算法是无监督的学习算法【无目标值】,而分类算法属于监督的学习算法【有目标值】
API
sklearn.cluster.KMeans(n_clusters=8)
参数
- n_clusters :开始的聚类中心数量,整型,缺省值= 8,生成的聚类数,即产生的质心(centroids)数
方法
- estimator.fit(x)
- estimator.predict(x)
- estimator.fit_predict(x) 【相当于先调用fit(x),然后再调用predict(x)】
实现流程
1、随机设置K个特征空间内的点作为初始的聚类中心
2、对于其他每个点计算到K个中心的距离,未知的点选择最近的一个聚类中心点作为标记类别
3、接着对着标记的聚类中心之后,重新计算出每个聚类的新中心点(平均值)
4、如果计算得出的新中心点与原中心点一样(质心不再移动),那么结束,否则重新进行第二步过程
由于每次都要计算所有的样本与每一个质心之间的相似度,故在大规模的数据集上,K-Means算法的收敛速度比较慢
评估
SSE (误差平方和)
每一个类别中点到中心点的误差平方和 再求和(累加所有类别)
SSE随着聚类迭代,其值会越来越小,直到最后趋于稳定
Elbow method ("肘"方法)
肘”方法主要是用于确定聚类算法中的K值
1、对于n个点的数据集,迭代计算 k from 1 to n,每次聚类完成后计算每个点到其所属的簇中心的距离的平方和
2、平方和是会逐渐变小的,直到k==n时平方和为0,因为每个点都是它所在的簇中心本身。
3、在这个平方和变化过程中,会出现一个拐点也即“肘”点,下降率突然变缓时即认为是最佳的k值(回报率大)。
2、平方和是会逐渐变小的,直到k==n时平方和为0,因为每个点都是它所在的簇中心本身。
3、在这个平方和变化过程中,会出现一个拐点也即“肘”点,下降率突然变缓时即认为是最佳的k值(回报率大)。
Silhouette Coefficient(轮廓系数)
轮廓系数法(Silhouette Coefficient)结合了聚类的凝聚度(Cohesion)和分离度(Separation),用于评估聚类的效果,目的使 内部距离最小化,外部距离最大化
平均轮廓系数的取值范围为[-1,1],系数越大,聚类效果越好。
Calinski-Harabasz Index (CH系数)
CH追求的是:类别内部数据的协方差越小越好,类别之间的协方差越大越好
CH需要达到的目的: 用尽量少的类别聚类尽量多的样本,同时获得较好的聚类效果
CH值越高则说明聚类效果越好
CH需要达到的目的: 用尽量少的类别聚类尽量多的样本,同时获得较好的聚类效果
CH值越高则说明聚类效果越好
算法优化
K-means 优缺点
优点
原理简单(靠近中心点),实现容易
聚类效果中上(依赖K的选择)
空间复杂度 ,时间复杂度
N为样本点个数,K为中心点个数,I为迭代次数
缺点
对离群点,噪声敏感 (中心点易偏移)
很难发现大小差别很大的簇及进行增量计算
结果不一定是全局最优,只能保证局部最优(与K的个数及初值选取有关)
Canopy 算法配合初始聚类
做法
随机选择一个点, 以T1,T2为半径画同心圆
下一个聚类中心点必须在外圆的外部
在聚类计算时候, 只需要圆内的点, 到中心点的距离即可.
优点
- (质心点的距离不会太近)Kmeans对噪声抗干扰较弱,通过Canopy对比,将较小的NumPoint的Cluster直接去掉有利于抗干扰
- Canopy选择出来的每个Canopy的centerPoint作为K会更精确。
- 只是针对每个Canopy的内做Kmeans聚类,减少相似计算的数量
缺点
算法中 T1、T2的确定问题 ,依旧可能落入局部最优解
K-means++
倾向于选择距离比较远的点,作为下一个聚类中心点(选择的质心尽可能的分散)
如果第一个质心选择在圆心,那么最优可能选择到的下一个点在P(A)这个区域
二分 K-means
实现流程
- 所有点作为一个簇
- 将该簇一分为二
- 选择能最大限度降低聚类代价函数(也就是误差平方和 SSE)的簇划分为两个簇。
- 以此进行下去,直到簇的数目等于用户给定的数目 k 为止。
因为聚类的误差平方和能够衡量聚类性能,该值越小表示数据点越接近于他们的质心,聚类效果就越好。所以需要对误差平方和最大的簇进行再一次划分,因为误差平方和越大,表示该簇聚类效果越不好,越有可能是多个簇被当成了一个簇,所以我们首先需要对这个簇进行划分
二分K均值算法可以加速K-means算法的执行速度,因为它的相似度计算少了并且不受初始化问题的影响,因为这里不存在随机点的选取,且每一步都保证了误差最小
K-medoids(k-中心聚类算法)
K-medoids和K-means是有区别的,不一样的地方在于中心点的选取
- K-means中,将中心点取为当前cluster中所有数据点的平均值,对异常点很敏感(可能是不存在的点)!
- K-medoids中,将从当前cluster 中选取到其他所有(当前cluster中的)点的距离之和最小的点作为中心点
算法流程
- 总体 n 个样本点中任意选取 k 个点作为medoids
- 按照与medoids最近的原则,将剩余的 n-k 个点分配到当前最佳的medoids代表的类中
- 对于第 i 个类中除对应medoids点外的所有其他点,按顺序计算当其为新的medoids时,代价函数的值,遍历所有可能,选取代价函数最小时对应的点作为新的medoids
- 重复2-3的过程,直到所有的medoids点不再发生变化或已达到设定的最大迭代次数
- 产出最终确定的 k个类
k-medoids对噪声鲁棒性好
k-medoids只能对小样本起作用,样本大,速度就太慢了,当样本多的时候,少数几个噪音对k-means的质心影响也没有想象中的那么重,所以k-means的应用明显比k-medoids多
Kernel k-means
kernel k-means实际上,就是将每个样本进行一个投射到高维空间的处理,然后再将处理后的数据使用普通的k-means算法思想进行聚类
ISODATA
动态聚类,类别 k 数目随着聚类过程而变化
- “合并”:(当聚类结果某一类中样本数太少,或两个类间的距离太近时)
- “分裂”:(当聚类结果中某一类的类内方差太大,将该类进行分裂)
Mini Batch K-Means
适合大数据的聚类算法(样本数量 > 1w)
Mini Batch KMeans使用了Mini Batch(分批处理)的方法对数据点之间的距离进行计算
Mini Batch计算过程中不必使用所有的数据样本,而是从不同类别的样本中抽取一部分样本来代表各自类型进行计算。由于计算样本量少,所以会相应的减少运行时间,但另一方面抽样也必然会带来准确度的下降
做法
随机不放回, 选择n样本(一小批), 使用kmeans进行聚类
在随机不放回, 选择n样本(一小批), 初始聚类中心点, 为上一次聚类中心点
更新质心
直到到所有样本都聚类完成了为止
与Kmeans相比,数据的更新在每一个小的样本集上。对于每一个小批量,通过计算平均值得到更新质心,并把小批量里的数据分配给该质心,随着迭代次数的增加,这些质心的变化是逐渐减小的,直到质心稳定或者达到指定的迭代次数,停止计算
特征降维
定义
指在某些限定条件下,降低随机变量(特征)个数,得到一组“不相关”主变量的过程
降低随机变量的个数
相关特征(correlated feature)
相对湿度与降雨量之间的相关
特征选择
数据中包含冗余或无关变量(或称特征、属性、指标等),旨在从原有特征中找出主要特征。
Filter(过滤式)
主要探究特征本身特点、特征与特征和目标值之间关联
方差选择法(低方差特征过滤)
删除低方差的一些特征,再结合方差的大小来考虑这个方式的角度
- 特征方差小:某个特征大多样本的值比较相近
- 特征方差大:某个特征很多样本的值都有差别
API
sklearn.feature_selection.VarianceThreshold(threshold = 0.0)
参数
threshold: 方差阈值, 小于等于该阈值的就会被过滤掉, 默认是0
训练集差异低于threshold的特征将被删除。默认值是保留所有非零方差特征,即删除所有样本中具有相同值的特征
Variance.fit_transform(X)
相关系数
思路
变量与变量之间, 如果相关性比较高, 就去掉其中一个
变量和目标之间, 如果变量与目标之间的相关性很低, 去掉这个变量(特征).
Pearson Correlation Coefficient 皮尔逊相关系数
主要作用: 反映变量之间相关关系密切程度的统计指标
公式
API: scipy.stats.pearsonr(x, y)
返回值: 第一个值就是皮尔逊相关系数
结论:
r值在在[-1, 1] 之间
r < 0, 就是负相关, r>0, J就是正相关
|r| 越接近于1, 就越相关性越高, 越接近于0, 相关性越低.
|r| < 0.4, 低相关, 0.4<=|r|<0.7 显著相关 0.7<|r|, 高度相关.
Spearman’s rank coefficient of correlation 斯皮尔曼相关系数
主要作用: 反映变量之间相关关系密切程度的统计指标
公式
n: 为等级个数
d: 为二列成对变量的等级差数
例子
API: scipy.stats.spearmanr(x, y)
返回值: 第一个数据是斯皮尔曼相关系数; 范围[-1, 1];
与皮尔逊相关系数的性质是一样的
结论:
r值在在[-1, 1] 之间
r < 0, 就是负相关, r>0, J就是正相关
|r| 月接近与1, 就越相关, 越接近于0, 越无关.
|r| < 0.4, 低相关, 0.4<=|r|<0.7 显著相关 0.7<|r|, 高度相关.
斯皮尔曼相关系数比皮尔逊相关系数应用更加广泛
Embedded(嵌入式)
算法自动选择特征(特征与目标值之间的关联)
决策树:信息熵、信息增益
正则化:L1、L2
深度学习:卷积等
主成分分析 PCA
定义
高维数据转化为低维数据的过程,在此过程中可能会舍弃原有数据、创造新的变量
作用
是数据维数压缩,尽可能降低原数据的维数(复杂度),损失少量信息
那么更好的理解这个过程呢?
API
sklearn.decomposition.PCA(n_components=None)
将数据分解为较低维数空间
参数
n_components
小数:表示保留百分之多少的信息
整数:减少到多少特征
返回值:转换后指定维度的array
案例—探究用户对物品类别的喜好
步骤
1. 加载数据
2. 数据基本处理
3. 特征降维-(主成分分析PCA)
4. 机器学习(模型训练-聚类KMeans)
5. 模型评估: 轮廓系数
0 条评论
下一页