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