无监督学习——KMeans

      在K-Means算法中,聚类中簇的个数K是用户预先给定的值,k均值算法收敛到局部最小值,而非全局最小值(局部最小值指结果还可以但并非最好结果,全局最小值是可能的最好结果),用于度量聚类效果的指标是SSE(误差平方和),SSE值越小表示数据点越接近于他们的质心,聚类效果也越好。

     为了改变K均值划分簇的结果:

             1、将具有最大SSE值得簇划分为两个簇。

            2、合并簇:合并最近的质心,或者合并两个使得SSE增幅最小的质心。第一种思路是通过计算所有质心之间的距离,然        后合并距离最近的两个点来实现。第二种方法是合并两个簇然后计算总SSE值。重复处理,直到合并到最佳两个簇为止。

K均值算法要求我们预先设定聚类的个数,然后不断更新聚类中心,经过几轮迭代之后,最终的目标就是要让所有数据点到其所属聚类中心距离的平方和趋于稳定。

1.聚类

         1.属于无监督学习,训练样本的标记信息未知。

      2.聚类试图将数据集中的样本划分为若干个通常不相交的子集,每个子集称为一个“簇”,通过这样的划分,每个簇可能对应于一个潜在的类别。

          3.概念:将更具相似性的样本归为一类(cluster),同组中的样本比其他租的样本更相似。

      4.应用:市场调查中对用户分组、社交网络识别社区、推荐系统、寻找相似模式的基因组;

2.K-means聚类算法

   

实现过程:(机器学习及实践P81)
  1. 实现过程
    1. 指定聚类的数量K
    2. 初始化,指定第k个类的重心位置uk;(实际中,为避免局部最优解,需要从不同位置开始初始化,取最小成本函数对应的重心位置作为初始化位置)
    3. 遍历每一个元素xi,计算该元素到各个类重心uk的距离,将该元素划分到距其最近的类;
    4. 计算重新生成类的重心;
    5. 重复3-4,直至各个类的重心位置不再变化(成本函数值的差达到了限定值,或者前后两次迭代的重心位置变化达到了限定值);
  2. 超参数K:表示类的数量,需要人为指定,K-means不能决定要分几个类;
  3. 肘部法则(elbow method): 可用于估计聚类数量;把不同K值的成本函数值画出来,找出K值增大过程中,畸变程度下降幅度最大的位置所对应的K值(即为肘部);
  4. 参数:类的重心位置和其内部观测值的位置;
  5. 成本函数:各个类畸变程度(distortions)之和;每个类的畸变程度等于该类重心与其内部成员位置距离的平方和;最优解以成本函数最小化为目标,其中uk是第k个类的重心位置;

    J=k=1KiCk|xiuk|2

  6. 效果评估-轮廓系数(silhouette Coeffient):类的密集与分散程度的评价指标;其中a是每个类中样本彼此距离的均值,b是一个类中样本与其最近的那个类的所有样本的距离的均值;

    s=bamax(a,b)


k-means 算法缺点

     ① 在 K-means 算法中 K 是事先给定的,这个 K 值的选定是非常难以估计的。很多时候,事先并不知道给定的数据集应该分成多少个类别才最合适。这也是 K-means 算法的一个不足。有的算法是通过类的自动合并和分裂,得到较为合理的类型数目 K,例如 ISODATA 算法。关于 K-means 算法中聚类数目K 值的确定在文献中,是根据方差分析理论,应用混合 F 统计量来确定最佳分类数,并应用了模糊划分熵来验证最佳分类数的正确性。在文献中,使用了一种结合全协方差矩阵的 RPCL 算法,并逐步删除那些只包含少量训练数据的类。而文献中使用的是一种称为次胜者受罚的竞争学习规则,来自动决定类的适当数目。它的思想是:对每个输入而言,不仅竞争获胜单元的权值被修正以适应输入值,而且对次胜单元采用惩罚的方法使之远离输入值。
  ② 在 K-means 算法中,首先需要根据初始聚类中心来确定一个初始划分,然后对初始划分进行优化。这个初始聚类中心的选择对聚类结果有较大的影响,一旦初始值选择的不好,可能无法得到有效的聚类结果,这也成为 K-means算法的一个主要问题。对于该问题的解决,许多算法采用遗传算法(GA),例如文献 中采用遗传算法(GA)进行初始化,以内部聚类准则作为评价指标。
  ③ 从 K-means 算法框架可以看出,该算法需要不断地进行样本分类调整,不断地计算调整后的新的聚类中心,因此当数据量非常大时,算法的时间开销是非常大的。所以需要对算法的时间复杂度进行分析、改进,提高算法应用范围。在文献中从该算法的时间复杂度进行分析考虑,通过一定的相似性准则来去掉聚类中心的侯选集。而在文献中,使用的 K-means 算法是对样本数据进行聚类,无论是初始点的选择还是一次迭代完成时对数据的调整,都是建立在随机选取的样本数据的基础之上,这样可以提高算法的收敛速度。参考博客:点击打开链接点击打开链接


为了克服K均值算法收敛到局部最小值问题,提出二分K均值算法(机器学习实战P190)

     二分K均值算法的伪代码:

              将所有点看成一个簇  

             当簇数目小于k时  

             对于每一个簇  

                 计算总误差 

                 在给定的簇上面进行K均值聚类(K=2)

                 计算将该 簇一分为二后的总误差  

            选择使得误差最小的那个簇进行划分操作

参考博客:点击打开链接,K均值代码:点击打开链接


plt.scatter各参数详解 :点击打开链接



  • 0
    点赞
  • 7
    收藏
    觉得还不错? 一键收藏
  • 0
    评论
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值