zoukankan      html  css  js  c++  java
  • K-Means

    利用临近信息来标注类别的。是聚类算法中最简单的、搞笑的。

    核心思想:指定k个初始质心作为聚类的类别,重复迭代值算法收敛。对于欧式空间的样本,误差平方和作为目标函数。

    一、优缺点

    优点:简单、快速,效果好,适用于高维;

    缺点:很容易受到初始质心的影响,而且初始质心也很难选择。

    二、k如何选取?

    1、手肘法

    随着k的增加,样本划分的越来越细,越来越接近真实类别数,这个时候误差下降的速度会平缓,当等于真实的类别数时,此时的误差是最小的,再继续增加k的时候,由于越来越偏离真实类别墅,误差会增加,此时这个拐弯的地方就是最佳的k值。

    2、轮廓系数

    簇内不相似度:样本到同簇内其他样本的平均距离,越小说明越应该被分到这个簇;

    簇间不相似度:样本到其他簇内样本的平均距离,越大说明越不属于其他簇;

    计算簇内不相似度和簇见不相似度,通过公式得到每个样本的轮廓系数:

     轮廓系数范围在[-1,1]之间,越大越合理;

    等于0说明在边界上;

    所有样本的轮廓系数均值作为聚类结果的轮廓系数,用来衡量聚类结果的好坏。

    三、怎么找这k个中心点?

    选择彼此距离最远的k个点。

    四、停止条件?

    迭代次数,聚类中心移动的距离阈值。

    五、如何处理空聚类?

    找一个分布最散的簇,找一个替补质心,就能消除这个空簇。重复多次,如果噪点或者孤立点还很多要考虑更换算法,例如密度算法。

    六、如何快速收敛超大的kmeans?

    前m次迭代正常进行,m次之后,就只计算离他最近的几个质心的距离就行了,远的质心不用计算。

  • 相关阅读:
    【C#】项目优化实战
    【NoSql】Redis
    【算法】非递归的方式生成树
    工作4年的一些想法
    【NoSql】MongoDb
    【微信开发】 前端
    【微信开发】常用 api
    [MVC] DIV 布局
    [Swift] 疑难杂症
    《你不懂我,我不怪你》
  • 原文地址:https://www.cnblogs.com/pacino12134/p/11334982.html
Copyright © 2011-2022 走看看