zoukankan      html  css  js  c++  java
  • 聚类之k-means

    1、介绍

    k-means算法以k为参数(所期望的簇的个数),把n个对象分成k个簇(单层划分),用质心(数据点的平均值)定义簇的原型。使得簇内具有较高的相似度,而簇间的相似度较低。

    通过聚类,我们能够发现数据对象之间的关系。簇内的相似度越高,簇间的相似度越低,聚类效果越好。

    2、过程

    ①随机选择k个点作为初始的聚类中心。

    ②对于剩下的点,根据其与聚类中心的距离,将其归入最近的簇,形成k个簇。

    ③对每个簇,计算所有点的均值作为新的聚类中心。

    ④重复②、③,直到聚类中心不再改变。

    3、缺点

    ①可能收敛于局部最小值,在大规模数据中收敛较慢。

    ②k值需要预先给定,属于先验知识。

    ③对初始选取的聚类中心敏感。这会导致①。

    ④并不适合所有的数据类型,比如不能处理非球形簇。

    ⑤对含离群点的数据处理时存在问题。

    为了克服k-means收敛于局部最小值的问题,可以采用二分k-means(bisecting K-means).

    4、优化方法

    1、bisecting K-means

    ①将所有样本看成一个簇。

    ②当簇小于k时,对于每个簇i,计算总误差,在簇i上进行2-means聚类,再计算该簇划分为两个簇后的总误差,选择误差最小的簇进行划分。

  • 相关阅读:
    C++程序设计入门--前言
    C++ string_view 的坑
    从OGRE,GAMEPLAY3D,COCOS2D-X看开源
    抽烟解闷的程序员
    一个团队应该是什么样
    准备开始接手公司的项目
    两位印象深刻的同事
    一段故事结束,一段生活开始
    starling性能优化总结(毫无疑问还是转载)
    知道端口号如何查看应用位置
  • 原文地址:https://www.cnblogs.com/ivan-count/p/10515755.html
Copyright © 2011-2022 走看看