K-means算法
一种广泛应用的无监督学习算法,用于将数据集划分为 K 个不同的簇(cluster),使得同一簇内的数据点相似度较高,而不同簇间的数据点相似度较低。
大概的流程
一、指定需要划分的簇[cù]的个数K值)(类的个数)
二、随机地选择K个数据对象作为初始的聚类中心(不一定要是我们的样本点);
三、计算其余的各个数据对象到这K个初始聚类中心的距离,把数据对象划归到距离它最近的那个中心所处在的簇类中:
四、调整新类并且重新计算出新类的中心;
五、循环步骤三和四,看中心是否收敛(不变),如果收敛或达到迭代次数则停止循环:
六、结束
优缺点
优点
简单快速:算法原理简单,易于理解和实现,计算复杂度相对较低,在处理大规模数据集时表现良好。
聚类效果较好:对于球形分布的数据,通常能得到不错的聚类结果,在许多实际应用中能有效地发现数据中的自然分组结构。
缺点
需预先指定簇的数量K :然而,在实际应用中,合适的 K值往往难以确定。不同的 值可能导致不同的聚类结果,选择不当可能无法准确反映数据的内在结构。
对初始簇中心敏感:初始簇中心的选择会影响最终的聚类结果。不同的初始值可能导致算法收敛到不同的局部最优解,从而得到差异较大的聚类结果。
对噪声和离群点敏感:由于簇中心是通过数据点的均值计算得到的,噪声和离群点可能会对簇中心的位置产生较大影响,进而影响聚类效果。
步骤
可以使用K-means++算法对选择初始化聚类中心进行优化:初始化的聚类种的中心之间尽可能的相隔远一点
步骤一:随机选取一个样本作为第一个聚类中心;
步骤二:计算每个样本与当前已有聚类中心的最短距离(即与最近一个聚类中心的距离),这个值越大,表示被选取作为聚类中心的概率较大;最后,用轮盘法(依据概率大小来进行抽选)选出下一个聚类中心;
步骤三:重复步骤二,直到选出K个聚类中心。选出初始点后,就继续使用标准的K-means算法了
类似迪杰斯特拉算法但是是每次大概率选择最远的路,更新最近的.
例题:根据消费习惯来对省份进行分类
省份 |
食品 |
衣着 |
家庭设备 |
医疗 |
交通 |
娱乐 |
居住 |
杂项 |
北京 |
2959.19 |
730.79 |
749.41 |
513.34 |
467.87 |
1141.82 |
478.42 |
457.64 |
天津 |
2459.77 |
495.47 |
697.33 |
302.87 |
284.19 |
735.97 |
570.84 |
305.08 |
河北 |
1495.63 |
515.9 |
362.37 |
285.32 |
272.95 |
540.58 |
364.91 |
188.63 |
山西 |
1406.33 |
477.77 |
290.15 |
208.57 |
201.5 |
414.72 |
281.84 |
212.1 |
内蒙古 |
1303.97 |
524.29 |
254.83 |
192.17 |
249.81 |
463.09 |
287.87 |
192.96 |
辽宁 |
1730.84 |
553.9 |
246.91 |
279.81 |
239.18 |
445.2 |
330.24 |
163.86 |
吉林 |
1561.86 |
492.42 |
200.49 |
218.36 |
220.69 |
459.62 |
360.48 |
147.76 |
黑龙江 |
1410.11 |
510.71 |
211.88 |
277.11 |
224.65 |
376.82 |
317.61 |
152.85 |
上海 |
3712.31 |
550.74 |
893.37 |
346.93 |
527 |
1034.98 |
720.33 |
462.03 |
江苏 |
2207.58 |
449.37 |
572.4 |
211.92 |
302.09 |
585.23 |
429.77 |
252.54 |
浙江 |
2629.16 |
557.32 |
689.73 |
435.69 |
514.66 |
795.87 |
575.76 |
323.36 |
安徽 |
1844.78 |
430.29 |
271.28 |
126.33 |
250.56 |
513.18 |
314 |
151.39 |
福建 |
2709.46 |
428.11 |
334.12 |
160.77 |
405.14 |
461.67 |
535.13 |
232.29 |
江西 |
1563.78 |
303.65 |
233.81 |
107.9 |
209.7 |
393.99 |
509.39 |
160.12 |
山东 |
1675.75 |
613.32 |
550.71 |
219.79 |
272.59 |
599.43 |
371.62 |
211.84 |
河南 |
1427.65 |
431.79 |
288.55 |
208.14 |
217 |
337.76 |
421.31 |
165.32 |
湖南 |
1942.23 |
512.27 |
401.39 |
206.06 |
321.29 |
697.22 |
492.6 |
226.45 |
湖北 |
1783.43 |
511.88 |
282.84 |
201.01 |
237.6 |
617.74 |
523.52 |
182.52 |
广东 |
3055.17 |
353.23 |
564.56 |
356.27 |
811.88 |
873.06 |
1082.82 |
420.81 |
广西 |
2033.87 |
300.82 |
338.65 |
157.78 |
329.06 |
621.74 |
587.02 |
218.27 |
海南 |
2057.86 |
186.44 |
202.72 |
171.79 |
329.65 |
477.17 |
312.93 |
279.19 |
重庆 |
2303.29 |
589.99 |
516.21 |
236.55 |
403.92 |
730.05 |
438.41 |
225.8 |
四川 |
1974.28 |
507.76 |
344.79 |
203.21 |
240.24 |
575.1 |
430.36 |
223.46 |
贵州 |
1673.82 |
437.75 |
461.61 |
153.32 |
254.66 |
445.59 |
346.11 |
191.48 |
云南 |
2194.25 |
537.01 |
369.07 |
249.54 |
290.84 |
561.91 |
407.7 |
330.95 |
西藏 |
2646.61 |
839.7 |
204.44 |
209.11 |
379.3 |
371.04 |
269.59 |
389.33 |
陕西 |
1472.95 |
390.89 |
447.95 |
259.51 |
230.61 |
490.9 |
469.1 |
191.34 |
甘肃 |
1525.57 |
472.98 |
328.9 |
219.86 |
206.65 |
449.69 |
249.66 |
228.19 |
青海 |
1654.69 |
437.77 |
258.78 |
303 |
244.93 |
479.53 |
288.56 |
236.51 |
宁夏 |
1375.46 |
480.89 |
273.84 |
317.32 |
251.08 |
424.75 |
228.73 |
195.93 |
新疆 |
1608.82 |
536.05 |
432.46 |
235.82 |
250.28 |
541.3 |
344.85 |
214.4 |
下面是spss的实操
分析->分类->k均值聚类
下面表示分为两类(这里的k要设置的方便解释)
迭代可以调整最大迭代次数
保存可以保存得出的一些额外的数据
选项
系统/层次聚类
聚类分析中的一种重要方法,它能够构建出一棵具有层次结构的聚类树,展示数据点之间的亲疏关系。
原理
基本思想:系统聚类基于数据点之间的相似性度量,通过不断合并或分裂数据点,形成具有层次结构的聚类结果。它假设数据点之间存在一种自然的层次关系,这种关系可以通过聚类树直观地展现出来。
相似性度量:常用的相似性度量方法包括欧氏距离、曼哈顿距离等用于衡量数值型数据点之间的距离,以此反映它们的相似程度。距离越小,数据点之间的相似性越高。
步骤(以凝聚式聚类为例)
1.初始化:将每个数据点看作一个单独的类,此时类的数量等于数据点的数量。
2.计算类间距离:使用选定的距离度量方法(如欧氏距离),计算每两个类之间的距离。常用的样品之间的距离计算方法有:(xik表示第i个样品的第k个指标)
1)绝对值距离:
2)欧式距离法:
(下面的都不常用)
3)minkowshi距离:
4)chebyshev距离:
5)马氏距离:
比如将高三,8班的30个人,根据他们的6科考试成绩来分类
指标和指标之间的距离:
1)相关系数:
2)夹角余弦:
比如根据高三8班的30个人的成绩,将6门课分为2类
类和类之间的距离:
我们记
1)最短距离法:
取两个类中各取一个点得到的最短距离为类间距离
2)重心法:
两个类之间的距离等于两个类的重心的距离
3.合并类:找到距离最近的两个类,将它们合并为一个新类。
4.更新距离矩阵:由于类的合并,需要重新计算新类与其他类之间的距离,更新距离矩阵。
5.判断终止条件:重复步骤 2 - 4,直到所有数据点都合并到一个类中,或者满足某个终止条件(如达到预设的类的数量)
流程图:
最后会变成如下的图:
(类似霍夫曼树)
聚类分析需要注意的问题
1.对于一个实际问题要根据分类的目的来选取指标,指标选取的不同分类结果一般也不同。
2.样品间距离定义方式的不同,聚类结果一般也不同。
3.聚类方法的不同,聚类结果一般也不同(尤其是样品特别多的时候)。最好能通过各种方法找出其中的共性。
4.要注意指标的量纲,量纲差别太大会导致聚类结果不合理。
5.聚类分析的结果可能不令人满意,因为我们所做的是一个数学的处理,对于结果我们要找到一个合理的解释。
类型
凝聚式聚类:从每个数据点作为一个单独的类开始,然后逐步合并相似的类。具体来说,每次迭代时,算法会计算所有类之间的距离,将距离最近的两个类合并为一个新类,这个过程不断重复,直到所有数据点都合并到一个类中,最终形成一棵聚类树。
分裂式聚类:与凝聚式聚类相反,它从所有数据点都属于一个大类开始,然后逐步将大类分裂成更小的类。每次迭代时,算法会选择一个类进行分裂,使得分裂后的两个子类之间的差异尽可能大,直到每个数据点都成为一个单独的类,同样形成一棵聚类树。
(这里讲解的是凝聚式)
下面是spss操作
分析->分类->系统聚类:
如下的选择:
统计可以不用管,图可以如下的选择,帮助我们更加直观的反应一些数据
方法里面可以选择之前的距离计算的方法:
如果量纲有差异就可以进行标准化,这里都是元,可以不进行标准化
保存可以选择K的数量和解的范围
得出的谱系图
那么我们就可以根据这个图来选择这个K的值(可以自己根据图区估计)
也可以根据下面的肘部法则来确定最优的k
各个类畸变程度之和:各个类的畸变程度等于该类重心与其内部成员位置距离的平方和;假设一共将n个样本划分到K个类中(K≤n-1,即至少有一类中有两个元素)
在部分多元统计教材中,J又被称为聚合系数。聚合系数折线图:横坐标为聚类的类别数K,纵坐标为聚合系数J
根据下面的表格来画出肘部图
复制到excel中,插入图表
根据k=5的时候,下降的趋势缓和,K<5畸变程度较大(k==3也可以解释)
下面我们就按照K=3去分类
生成如下的结果:
北京 |
1 |
天津 |
1 |
河北 |
2 |
山西 |
2 |
内蒙古 |
2 |
辽宁 |
2 |
吉林 |
2 |
黑龙江 |
2 |
上海 |
3 |
江苏 |
2 |
浙江 |
1 |
安徽 |
2 |
福建 |
1 |
江西 |
2 |
山东 |
2 |
河南 |
2 |
湖南 |
2 |
湖北 |
2 |
广东 |
3 |
广西 |
2 |
海南 |
2 |
重庆 |
2 |
四川 |
2 |
贵州 |
2 |
云南 |
2 |
西藏 |
1 |
陕西 |
2 |
甘肃 |
2 |
青海 |
2 |
宁夏 |
2 |
新疆 |
2 |
补充:
图表的绘制:
图表->图表构建器->加入x和y,根据分出来的类分色,将省份作为标签
优缺点
优点:
不需要预先指定聚类数量:与 K - means 聚类不同,系统聚类不需要事先确定要划分的类的数量,聚类结果的层次结构可以展示不同粒度下的数据分组情况,用户可以根据实际需求和聚类树的结构来选择合适的聚类数量。
聚类结果展示直观:聚类树能够直观地展示数据点之间的亲疏关系和聚类的层次结构,有助于用户理解数据的内在结构和分布特征。
缺点:
计算复杂度高:每次迭代都需要计算所有类之间的距离,随着数据点数量和类数量的增加,计算量会迅速增大,时间复杂度较高,不适合处理大规模数据集。
一旦合并或分裂不可撤销:在凝聚式聚类中,一旦两个类被合并,后续步骤无法撤销这个操作。如果在某个阶段选择了不恰当的合并,可能会导致最终聚类结果不理想。同样,分裂式聚类中一旦类被分裂,也无法恢复。
DBSCAN算法
基于密度的空间聚类算法,它是一种无监督学习算法,主要用于在具有噪声的数据集中发现任意形状的簇,并识别出数据集中的噪声点。
1.原理
核心概念:
邻域:对于数据集中的一个点p,给定半径r,以点p为中心,r为半径的区域内的所有点构成点p的r-邻域,记为 N r(p)。
核心点:如果点p的r-邻域内包含的点数大于或等于某个阈值 MinPts,则点p被称为核心点。核心点意味着在其周围一定范围内有足够多的数据点,表明该区域具有较高的数据密度。
边界点:如果点q在某个核心点p的-邻域内,但点q的r-邻域内的点数小于 MinPts,则点q是边界点。边界点依赖于核心点来确定其所属的簇。
噪声点:既不是核心点也不是边界点的点被认为是噪声点,这些点通常是孤立的,在其周围没有足够的数据点形成有意义的簇。
密度可达:如果存在一条从核心点p到点q的点链,其中链上的每个点都在其前一个点的r-邻域内,且链上的第一个点是核心点,那么称点q从核心点p密度可达。
密度相连:如果存在一个核心点o,使得点p和点q都从点o密度可达,那么称点p和点q密度相连。
聚类原理:DBSCAN 通过检查数据集中每个点的-邻域来确定该点是核心点、边界点还是噪声点。然后基于核心点的密度可达关系将数据点划分为不同的簇,密度相连的数据点构成一个簇。
算法步骤
1,初始化,确定r和MinPts,两个参数的选择对聚类结果有重要影响,通常需要根据数据的特点和经验进行调整。
2,遍历数据集:
对于数据集中的每个点 p:计算点 p的 r - 邻域 Nr(p),
1)如果领域中的点的数量大于MinPts,那么p就是核心点,创建一个新的簇C,并且将p及其密度可达的所有点加入C中。
2)如果领域中的点的数量小于MinPts,则 p不是核心点。如果 p尚未被分配到任何簇中,则将p标记为噪声点。
3,重复聚类:重复步骤2,知道数据点都被处理完毕。
优缺点
优点:
能够发现任意形状的簇:不像 K - means 等算法倾向于发现球形的簇,DBSCAN 可以根据数据点的密度分布发现任意形状的簇,适用于各种复杂的数据分布情况。
对噪声点不敏感:可以直接识别并标记出数据集中的噪声点,而 不会将噪声点错误地划分到某个簇中,使得聚类结果更加准确和可靠。
无需预先知道要形成的簇类的数量:与 K - means 等需要预先指定聚类数量的算法不同,DBSCAN 根据数据的密度自动确定簇的数量,减少了用户对聚类数量先验知识的依赖。
缺点:
参数选择困难:r和MinPts 的选择对聚类结果影响很大,但没有通用的方法来确定最优值。不合适的参数可能导致聚类结果不理想,例如将过多的点标记为噪声点,或者将不同的簇合并为一个簇。
计算复杂度较高:在最坏情况下,DBSCAN 的时间复杂度为O(N^2),其中N是数据点的数量。对于大规模数据集,计算量较大,可能需要较长的运行时间。
不适合高维数据:随着数据维度的增加,数据点之间的距离度量变得不太可靠,密度的概念也变得模糊,导致聚类效果下降。这是因为在高维空间中,数据点趋于稀疏,传统的基于距离的密度定义不再有效,即所谓的 “维度灾难” 问题。