非监督算法是机器学习研究的一大领域,它适用于不带标签的样本数据,采取一定的算法,将样本分成自动分类成不同的簇。
K均值(K-meas)
K均值算法接收两个输入,一个是K,表示簇的数量,另一个是不带标签的训练集{
x
1
,
x
2
,
.
.
x
m
x_1,x2,..x_m
x1,x2,..xm}。
算法过程如下:
- 随机初始化K个聚类中心 μ 1 , μ 2 , . . . μ K \mu_1,\mu_2,...\mu_K μ1,μ2,...μK
- 遍历每个样本,对于每个样本,计算其与K个聚类中心的距离,将样本划分到距离最短的中心的簇内。
- 遍历每个聚类中心 μ k \mu_k μk,计算被划分到簇 μ k \mu_k μk的样本的均值作为 μ k \mu_k μk的新位置。
令
c
(
i
)
c^{(i)}
c(i)表示样本i被划分到的簇的下标,则损失函数可以定义为:
J
(
c
(
i
)
,
.
.
.
,
c
(
m
)
,
μ
1
,
.
.
.
,
μ
k
)
=
1
m
∣
∣
x
(
i
)
−
μ
c
(
i
)
∣
∣
2
.
.
.
.
.
.
.
.
(
1
)
J(c^{(i)},...,c^{(m)},\mu_1,...,\mu_k)=\frac{1}{m}||x^{(i)}-\mu_{c^{(i)}}||^2........(1)
J(c(i),...,c(m),μ1,...,μk)=m1∣∣x(i)−μc(i)∣∣2........(1)
我们的目标就是最小化(1),而算法步骤2和3的过程就是在最小化损失函数的过程,其本质是EM算法的迭代过程。
距离的计算
通常使用欧式距离 d = ∑ i = 1 m ( x ( i ) − y ( i ) ) 2 d=\sqrt{\sum\limits_{i=1}^m(x^{(i)}-y^{(i)})^2} d=i=1∑m(x(i)−y(i))2。
聚类中心初始化
方法:通常随机取K个样本作为初始聚类中心。
参数K的选择
肘部原则:画出K从1开始的损失函数值的图像,一开始,图像会下降地比较快,然后趋于平缓,整个形状看起来像人的手肘,我们所要做的就是选取肘部对应的K作为我们的参数K。因为选取它前面的参数的话,损失函数值太高,选取它后面的参数的话,损失函数值变化的量又太少,因此肘部可能是一个合适的参数。然而画出来的图像不一定总是存在肘部,也有可能是平滑的,不过也是一种值得尝试的方法。
另一种方法是根据后续的目的来决定K参数的取值。
K-means++算法
是K-means的一个改进算法。在K-means中,对于聚类中心的初始化使用随机选取K个样本作为聚类中心,而K-means++按照以下的思路选取:
- 随机选取第一个聚类中心。
- 如果已经选取了n个聚类中心,则在选取第n+1个时,距离当前n个聚类中心越远的点会有更高的几率被选为第n+1个聚类中心。
这是一种符合直觉的选取方式,K-means++在这一点上做了改进,其余的和K-means没有任何区别。
ISODATA算法
ISODATA算法,全称是迭代自组织数据分析法。它针对K均值中K需要手动选择这一问题做了改进,其核心思想是:若属于某个类别的样本数少于某个阈值,则去除该类别。若属于某个类别的样本数大于某个阈值,则将该类别分类为两个类别。
这样我们不用指定K的大小,算法就可以为我们自动选择一个合适的K出来。当然除此之外,我们有了更多的超参数,包括每个类所需要的最小样本数
N
m
i
n
N_{min}
Nmin,最大方差
S
i
g
m
a
Sigma
Sigma,两个聚类中心所允许的最小距离
D
m
i
n
D_{min}
Dmin,以及预期聚类中心
K
o
K_o
Ko,通常最终输出的聚类中心是在
[
K
o
/
2
,
2
K
o
]
[K_o/2,2K_o]
[Ko/2,2Ko]的范围之间。
总结
优点:易于实现,非常简单且使用广泛
缺点:可能收敛于局部最小值,在大规模数据下收敛慢,对初始聚类中心的位置较为敏感,参数K需要手动选择。