监督学习:
训练集:
针对一组有标记的训练数据,提出一个适当的假设,找出决策边界,借此区分正负标记数据。
无监督学习:
训练集:
面对一组无标记的训练数据,数据之间不具有任何相关联的标记,将未标记的数据送入特定的算法,分析出数据的结构,例如聚类。
均值()算法是现在最为广泛使用的聚类算法。
有一些未标记的数据如下图所示,想将这些数据分成两个簇
首先随机选择两个点,称为聚类中心:
均值算法是一个迭代方法,做两件事:
- 簇分配,即遍历所有的样本,依据每个点更接近哪个中心,来将数据点分配到不同的聚类中心,如下图:
- 移动聚类中心,将聚类中心移动到该类所有点的均值处,如下图:
循环以上两步,得到如下图结果:
当聚类中心不再变化时,均值算法收敛。
均值算法接受两个输入:
- 参数(表示聚类簇的个数);
- 训练集,是个维向量。
算法说明:
随机初始化个聚类中心
距样本最近的聚类中心的索引()
注:
分配到第个簇的所有点的平均值
例:
则
如果存在一个没有点分配给它的聚类中心,直接将该中心移除。
我们用表示样本被分配到的簇的聚类中心。
均值算法的优化目标:
上面这个代价函数也叫失真代价函数。
在均值算法中:
第一步
距样本最近的聚类中心的索引()
实际是在对代价函数进行关于参数的最小化,保持不变。
第二步
分配到第个簇的所有点的平均值
实际上是选择最小化代价函数的。
随机初始化聚类中心的方法:
- 确保,为类别数,为训练样本数;
- 随机选取个训练样本;
- 令等于这个训练样本,表示个聚类中心。
因为随机初始化的不同,均值算法最终可能会得到不同的结果,只得到局部最优解。
假设存在数据如下图:
其全局最优解为:
由于随机初始化的不同,可能得到如下两种局部最优解:
如果想提高均值算法找到全局最优解的几率,能做的是尝试多次随机初始化,运行多次均值算法。
具体做法如下:
随机初始化均值;
运行均值算法,得到;
计算代价函数
选取最小的聚类。
实际证明:若较小(),做多次随机初始化通常能保证找到一个较好的局部最优解,但若非常大时,做多次随机初始化不太会有太大影响,可能会有稍好的结果,但不会好太多。
如何决定聚类数?
最常用的方法:通过看可视化的图或者看聚类算法的输出结果手动决定聚类的数目。
肘部法则():
计算取不同值时的代价函数,用图表呈现,如下图:
找到拐点,即处,则类别数取。
但是,实际中经常得到的结果为下图:
没有清晰的肘点,畸变值是连续下降的。
所以肘部法则值得尝试,但不是在任何问题上都有好的表现。
还有一种考虑值的方法:看不同的聚类数量能为后续目标提供多好的结果。