概述

  聚类属于机器学习的无监督学习,在数据中发现数据对象之间的关系,将数据进行分组,组内的相似性越大,组间的差别越大,则聚类效果越好。它跟分类的最主要区别就在于有没有“标签”。比如说我们有一组数据,数据对应着每个“标签”,我们通过这些数据与标签之间的相关性,预测出某些数据属于哪些“标签”,这属于分类;而聚类是没有“标签”的,因此说它属于无监督学习,分类则属于监督学习。

  k-means(k-均值)属于聚类算法之一,笼统点说,它的过程是这样的,先设置参数k,通过欧式距离进行计算,从而将数据集分成k个簇。为了更好地理解这个算法,下面更加详细的介绍这个算法的思想。

算法思想

  我们先过一下几个基本概念:

 (1) K值:即要将数据分为几个簇;

 (2) 质心:可理解为均值,即向量各个维度取平均值,这个是我们聚类算法一个重要的指标;

 (3) 欧式距离:

  上面的这3条基本概念你大可不必太纠结,因为这是为了让你看下面的内容时,能够更好理解。假如说,我们现在有一堆数据集,在图像上的分布是这样的:

     

  从图像上看,貌似可以直接把他分为3个簇,因此,我们设置 k=3,然后我们随机生成3个点,再通过欧式距离公式,计算每个点到这三个点之间的距离,距离哪个点最近的,就归类,于是它就变成了这样:

    

  当然,这样还不够,毕竟这三个点只是随机生成的,而且我们还需要不断调整以达到更好的聚类效果;因此我们计算初次分好的簇的均值,即上面提到的质心,让这三个质心替代掉随机点,然后迭代重复上面的过程,以达到最优。

 

  ......(重复迭代n次)......

  最后,才生成最优解,如图:

  上面的图是在这个网站通过演示得到的,可以上这个网址实际操作一波,加深理解。

缺点

  几乎每个算法都有其缺点,这个算法也不例外,优点是原理简单,实现容易,缺点如下:

 (1)不规则点的聚类结果会有所偏差,如下图,比如我们想分成4个簇,俩眼睛一嘴巴以及外轮廓,但效果总是难以达到。

     

 (2)k值难以确定。比如下面这样的图,应该把它从中间分割得到两块呢还是分成左中右三块呢,难以确定。

    

  想要第一时间获取更多有意思的推文,可关注公众号: Max的日常操作

                            

k-means 算法介绍的更多相关文章

  1. KNN 与 K - Means 算法比较

    KNN K-Means 1.分类算法 聚类算法 2.监督学习 非监督学习 3.数据类型:喂给它的数据集是带label的数据,已经是完全正确的数据 喂给它的数据集是无label的数据,是杂乱无章的,经过 ...

  2. K-means算法

    K-means算法很简单,它属于无监督学习算法中的聚类算法中的一种方法吧,利用欧式距离进行聚合啦. 解决的问题如图所示哈:有一堆没有标签的训练样本,并且它们可以潜在地分为K类,我们怎么把它们划分呢?  ...

  3. FCM聚类算法介绍

    FCM算法是一种基于划分的聚类算法,它的思想就是使得被划分到同一簇的对象之间相似度最大,而不同簇之间的相似度最小.模糊C均值算法是普通C均值算法的改进,普通C均值算法对于数据的划分是硬性的,而FCM则 ...

  4. 从K近邻算法谈到KD树、SIFT+BBF算法

    转自 http://blog.csdn.net/v_july_v/article/details/8203674 ,感谢july的辛勤劳动 前言 前两日,在微博上说:“到今天为止,我至少亏欠了3篇文章 ...

  5. KNN算法介绍

    KNN算法全名为k-Nearest Neighbor,就是K最近邻的意思. 算法描述 KNN是一种分类算法,其基本思想是采用测量不同特征值之间的距离方法进行分类. 算法过程如下: 1.准备样本数据集( ...

  6. 机器学习03:K近邻算法

    本文来自同步博客. P.S. 不知道怎么显示数学公式以及排版文章.所以如果觉得文章下面格式乱的话请自行跳转到上述链接.后续我将不再对数学公式进行截图,毕竟行内公式截图的话排版会很乱.看原博客地址会有更 ...

  7. Python之常见算法介绍

    一.算法介绍 1. 算法是什么 算法是指解题方案的准确而完整的描述,是一系列解决问题的清晰指令,算法代表着用系统的方法描述解决问题的策略机制.也就是说,能够对一定规范的输入,在有限时间内获得所要求的输 ...

  8. 机器学习(Machine Learning)算法总结-K临近算法

    一.算法详解 1.什么是K临近算法 Cover 和 Hart在1968年提出了最初的临近算法 属于分类(classification)算法 邻近算法,或者说K最近邻(kNN,k-NearestNeig ...

  9. <转>从K近邻算法、距离度量谈到KD树、SIFT+BBF算法

    转自 http://blog.csdn.net/likika2012/article/details/39619687 前两日,在微博上说:“到今天为止,我至少亏欠了3篇文章待写:1.KD树:2.神经 ...

  10. K中心点算法之PAM

    一.PAM聚类算法:         选用簇中位置最中心的对象,试图对n个对象给出k个划分:代表对象也被称为是中心点,其他对象则被称为非代表对象:最初随机选择k个对象作为中心点,该算法反复地用非代表对 ...

随机推荐

  1. 【转】Linux cp -a用法

    cp file1 file1-bk  ---------> 这样复制备份的话文件的属性(创建时间这些会变化) 要想不变化, cp -a  file1 file-bk  加上一个 -a 这个参数就 ...

  2. Linux温习(三)Linux文件和文件夹管理

    关于Linux文件夹的几个常见概念 路径 对文件位置信息的描写叙述机制.是指从树型文件夹中的某个文件夹层次到其内某个文件的一条通路.分为相对路径和绝对路径: 工作文件夹 登入系统后.用户始终处于某个文 ...

  3. 一次mysql优化经历

    某日运维突然说无线终端的频道页接口訪问量非常大,memcache缓存扛只是来.导致mysql并发查询量太大,导致server不停地宕机,仅仅能不停地重新启动机器.遗憾的是运维并没有告诉mysql查询量 ...

  4. android_checkbox_dialog 设计 是不是要开起 默认不提示对话框

    android_checkbox_dialog设计是不是开起默认不提示 package com.example.android_checkbox_dialog; import android.app. ...

  5. groovy入门 第05章 基本输入输出

    基本输入输出 5.1基本输出 print XXX    //同一行输出 println XXX //换行输出 输出字符串: def message ="My name is Michael& ...

  6. ArcGIS教程:分水岭

    摘要 确定栅格中一组像元之上的汇流区域. 使用方法 · 各个分水岭的值将取自输入栅格中源的值或者要素倾泻点数据.假设倾泻点为栅格数据集,则使用像元值.假设倾泻点为点要素数据集,则从指定的字段中获取值. ...

  7. 混合minxins

    <!DOCTYPE html> <html lang="en"> <head> <meta charset="UTF-8&quo ...

  8. JAVA学习第十九课(java程序的异常处理 (二))

    异常处理的捕捉形式: 这是能够对异常进行针对性处理的方式 六.try.catch的理解 详细格式: try { //须要被检測异常的代码 } catch(异常类 变量)//改变量用于接受发生异常的对象 ...

  9. MyCAT简单入门配置

    MyCAT简单入门配置 安装jdk 建议1.7以上 安装mysql 安装MyCAT Mycat 源码:https://github.com/MyCATApache/Mycat-Server Mycat ...

  10. JSP JDBC 读取SQL Server 数据2

    <%-- Created by IntelliJ IDEA. User: hellohongfu Date: 2017/12/21 Time: 0:16 To change this templ ...