文档介绍:机器学****算法主要都是分类和回归,这两类的应用场景都很清晰,就是对分类型变量或者数值型变量的预测。聚类分析是一 种根据样本之间的距离或者说是相似性(亲疏性),把越相似、差异越小的样本聚成一类(簇),最后形成多个簇,使 同一个簇内部的样本相似度机器学****算法主要都是分类和回归,这两类的应用场景都很清晰,就是对分类型变量或者数值型变量的预测。聚类分析是一 种根据样本之间的距离或者说是相似性(亲疏性),把越相似、差异越小的样本聚成一类(簇),最后形成多个簇,使 同一个簇内部的样本相似度高,不同簇之间差异性高。
有人不理解分类和聚类的差别,其实这个很简单:分类是一个已知具体有几种情况的变量,预测它到底是哪种情况;聚类 则是尽量把类似的样本聚在一起,不同的样本分开。举个例子,一个人你判断他是男是女这是分类,让男人站一排女人 站一排这是聚类。
聚类分析算法很多,比较经典的有k-means和层次聚类法
k-means聚类分析算法
k-means的k就是最终聚集的簇数,这个要你事先自己指定。k-means在常见的机器学****算法中算是相当简单的,基本过 程如下:
首先任取(你没看错,就是任取)k个样本点作为k个簇的初始中心;
对每一个样本点,计算它们与k个中心的距离,把它归入距离最小的中心所在的簇;
等到所有的样本点归类完毕,重新计算k个簇的中心;
重复以上过程直至样本点归入的簇不再变动。
k-means的聚类过程演示如下:
Heration 1 ’ Step 2a
Iteration 1, Step 2b
Heration 2, Step 2a
Id
Final Results
【原创】附代码数据
有问题到淘宝找“大数据部落”就可以了
Data
k-means聚类过程
k-means聚类分析的原理虽然简单,但缺点也比较明显:
首先聚成几类这个k值你要自己定,但在对数据一无所知的情况下你自己也不知道k应该定多少;
初始质心也要自己选,而这个初始质心直接决定最终的聚类效果;
每一次迭代都要重新计算各个点与质心的距离,然后排序,时间成本较高。
值得一提的是,计算距离的方式有很多种,不一定非得是笛卡尔距离;计算距离前要归一化。
层次聚类法
尽管k-means的原理很简单,然而层次聚类法的原理更简单。它的基本过程如下:
每一个样本点视为一个簇;
计算各个簇之间的距离,最近的两个簇聚合成一个新簇;
重复以上过程直至最后只有一簇。
层次聚类不指定具体的簇数,而只关注簇之间的远近,最终会形成一个树形图。
通过这张树形图,无论想划分成几个簇都可以很快地划出。
以下以癌细胞细据为例,演示K-means和层次聚类法的过程。
library(ISLR)
= NCI60$labs
= NCI60$data
>
= scale()
= dist()
> plot(hclust(),labels =
, main = "Complete Linkage", xlab = "", sub = "", ylab = "") # 默认按最长距离聚类
> plot(hclust(,method
="average"),labels = , main = "Average Linkage", xlab = "", sub = "", ylab = "") # 类平均法
> plot(hclust(),labels = , main = "Single Linkage", xlab = "", sub = "", ylab = "") #最短距离法
Complete Link
」«N3a
1<N3a
」<N山E vs0z<1 山乏 or_owz
OWN
O1OSN cmsz ——山I—<lso(rd
I ?s<>0 —^1 ZOJOO
Ncnoo I z<E<>0 O1OSZ z<s<>0 z<s<>0
<soz<ris
JVM姑
Average Linh
二 -dr- r- - -• .1■
z<5<>0
[^1— z<s<>0
J^— z<s<>0
<IAIOZ<1 山至
I—<乏 0N<1山乏 Id *^—<壬 0z<」山芒
n^—<乏QN3山芝
r— soz<^^s
H^sxm r ^1 <§Z5S
|—<运 0z<