1.无监督学习简介:机器自己分类,我们并不知道为什么这么分类
第一个无监督算法:聚类
聚类算法一般用来做什么?
1)市场分割,也许你在数据库中存储了许多客户的信息,而你希望将他们分成不同的客户群,这样你可以对不同类型的客户分别销售产品或者分别提供更适合的服务。
2)社交网络分析:事实上有许多研究人员正在研究这样一些内容,他们关注一群人,关注社交网络,例如 Facebook, Google+, 或者是其他的一些信息,比如说:你经常跟哪些人联系,而这些人又经常给哪些人发邮件,由此找到关系密切的人群。可以更好的管理数据中心。因为如果你知道数据中心中,那些计算机经常协作工作。那么,你可以重新分配资源,重新布局网络。由此优化数据中心,优化数据通信。
3)了解星系的形成。然后用这个知识,了解一些天文学上的细节问题。
2.K均值算法:最普及的聚类算法,是一种迭代算法
方法为:
1)首先选择K个随机的点,称为聚类中心;
2)对于数据集中每一个数据,按照距离K个中心点的距离,将其与距离最近的中心点关联起来,与每一个中心点关联的所有点聚成一类;
3)计算每一组的平均值,将该组所关联的中心点移动到平均值的位置;
4)重复2,3,直到中心点不再变化。
伪代码:
Repeat {
for i = 1 to m
c(i) := index (form 1 to K) of cluster centroid closest to x(i)
for k = 1 to K
μk := average (mean) of points assigned to cluster k
}
第一个for循环是赋值步骤,即:对于每一个样例i,计算其应该属于的类。
第二个for循环是聚类中心的移动,即:对于每一个类K,重新计算该类的质心。
注意:无监督同样会出现拟合不当。
如果K太大,会导致过拟合,使得模型更细致;
如果K太小,会使得模型过于笼统。
3.优化目标:K均值最小化问题,是要最小化所有的数据点与其所关联的聚类中心点之间的距离之和,
K均值迭代算法,我们知道,第一个循环是用于减小c(i)引起的代价,而第二个循环则是用于减小μ(i)引起的代价。
迭代的过程一定会是每一次迭代都在减小代价函数,不然便是出现了错误。
4.随机初始化
在运行K均值算法之前,我们首先要随机初始化所有的聚类中心点
1)应该选择K < m,即聚类中心点的个数要小于所有的训练集实例的数量;
2)随机选择K个训练实例,然后令K个聚类中心分别与这K个训练实例相等;
K均值有个问题:可能会停留在一个局部最小值处,而这取决于初始化的情况。
为了解决这个问题,通常需要多次运行K均值算法,每一次都重新进行随机初始化,最后再比较多次运行K均值的结果,选择代价函数最小的结果。这种方法在K较小的时候可行,如果K较大,这么做可能不会有明显的改善。
5.选择聚类数
一般是认为选择哪几个分类。
还有一个方法叫做“肘部法则”,我们需要做的是改变聚类类别的总数,
你会发现这种模式,它的畸变值会迅速下降, 从 1 到 2,从 2 到 3 之后,你会在 3 的时候达到一个肘点。在此之后,畸变值就下降的非常慢,看起来就像使用 3 个聚类来进行聚类是正确的,这是因为那个点是曲线的肘点,畸变值下降得很快, k 等于 3 之后就下降得很慢,那么我们就选 k 等于 3。
当你应用肘部法则的时候,如果得到类似于上面的图,那么这将是一种用来选择聚类个数的合理方法。