聚类算法是一类非监督学习算法,在有监督学习中,学习的目标是要在两类样本中找出他们的分界,训练数据是给定标签的,要么属于正类要么属于负类。而非监督学习,它的目的是在一个没有标签的数据集中找出这个数据集的结构把它自动聚成两类或者多类。
本讲主要介绍了最常用了一种聚类算法--K-means聚类算法。如果将数据集分成两类,即k=2,K-means算法过程如下:
1、首先任意选取两个不同的样本作为两类样本的中心

2、K-means算法有两部,第一步cluster assignment step,遍历所有样本点,计算出每个样本点离两个中心的距离(这个距离不一定是欧几里得距离,根据不同需要选取)来判断样本点属于哪一个类别(比如某个样本点离红色的中心比离蓝色的中心近,那么就将这个样本点归类到红色这类中,反之亦然),每个样本归类之后就得到如下:

3、K-means的第二部是move centroid step,这一步是根据前一步的分类结果,计算出他们的新的类的中心(计算方法可以是对所有样本的每一维取平均,得到每类的中心),计算出新的中心结果如下:

4、然后根据新计算出来的两个中心将每个样本点再归类,不断迭代以上两步,直到所有样本点不再改变(即收敛)

K-Means正式定义如下,输入要求有一个整数k和m个样本点,然后按照上面讲到的过程一步一步迭代,直到收敛:

Andrew还讲到了一个例子,给不可分的数据集分类,就是一个T-shirt分类的例子,如下图:

比如现在有这样一系列身高和体重的数据,在生产T-shirt的时候会将T-shirt分成L,M和S三个号,利用K-Means就可以将这三类分出来,这里取k=3。

看了上面,你对K-Means应该有一个直观的概念了,接下去来讲一下关于K-Means的理论,在前面的监督学习中,首先都是建立一个假设,然后用已有的带有标签的数据集来最小化这个cost function,那么,在K-Means中,估值函数可以帮助我们debug,如果估值函数没有预想中的不断减小最后收敛到一个极值,那么算法肯定是写的有问题了。看看我们写的K-means算法有没有正常工作,他的估值函数如下:

解决算法陷入局部最优问题的方案当然是选取不同的初始值,多次运行kmeans算法,选取最小的cost function J作为最终的结果,这样就能取得一个很好的聚类结果。

一般运行K-means算法时,k(分类数)是人为指定的,但是人根本不知道样本数据中真实的类别是多少,比如上面这个例子中,反映在图上,很明显可以看出它可以聚类成三类,如果把k指定成两类或者其他,那么聚类效果会大打折扣。要区分k最常用的方法是elbow method,它的工作原理如下:

随着k增大,J会不断变小,k=m时候,j就变成了0。通常选取的k是拐点最明显的那个值。如果学习曲线如上图右边那个曲线,那就说明数据没有很好的区分性,因此可以将数据分成你所需要的任意类。

Standford机器学习 聚类算法(clustering)和非监督学习(unsupervised Learning)的更多相关文章

  1. 如何区分监督学习(supervised learning)和非监督学习(unsupervised learning)

    监督学习:简单来说就是给定一定的训练样本(这里一定要注意,样本是既有数据,也有数据对应的结果),利用这个样本进行训练得到一个模型(可以说是一个函数),然后利用这个模型,将所有的输入映射为相应的输出,之 ...

  2. Coursera 机器学习 第8章(上) Unsupervised Learning 学习笔记

    8 Unsupervised Learning8.1 Clustering8.1.1 Unsupervised Learning: Introduction集群(聚类)的概念.什么是无监督学习:对于无 ...

  3. 无监督学习(Unsupervised Learning)

    无监督学习(Unsupervised Learning) 聚类无监督学习 特点 只给出了样本, 但是没有提供标签 通过无监督学习算法给出的样本分成几个族(cluster), 分出来的类别不是我们自己规 ...

  4. 机器学习聚类算法之K-means

    一.概念 K-means是一种典型的聚类算法,它是基于距离的,是一种无监督的机器学习算法. K-means需要提前设置聚类数量,我们称之为簇,还要为之设置初始质心. 缺点: 1.循环计算点到质心的距离 ...

  5. 一种新型聚类算法(Clustering by fast search and find of density peaksd)

    最近在学习论文的时候发现了在science上发表的关于新型的基于密度的聚类算法 Kmean算法有很多不足的地方,比如k值的确定,初始结点选择,而且还不能检测费球面类别的数据分布,对于第二个问题,提出了 ...

  6. 机器学习聚类算法之DBSCAN

    一.概念 DBSCAN是一种基于密度的聚类算法,DBSCAN需要两个参数,一个是以P为中心的邻域半径:另一个是以P为中心的邻域内的最低门限点的数量,即密度. 优点: 1.不需要提前设定分类簇数量,分类 ...

  7. 机器学习作业(七)非监督学习——Matlab实现

    题目下载[传送门] 第1题 简述:实现K-means聚类,并应用到图像压缩上. 第1步:实现kMeansInitCentroids函数,初始化聚类中心: function centroids = kM ...

  8. 机器学习-聚类(clustering)算法:K-means算法

    1. 归类: 聚类(clustering):属于非监督学习(unsupervised learning) 无类别标记(class label) 2. 举例: 3. Kmeans算法 3.1 clust ...

  9. 数学模型:3.非监督学习--聚类分析 和K-means聚类

    1. 聚类分析 聚类分析(cluster analysis)是一组将研究对象分为相对同质的群组(clusters)的统计分析技术 ---->> 将观测对象的群体按照相似性和相异性进行不同群 ...

随机推荐

  1. Touch Punch在移动设备上面增加jQuery UI的触摸支持|Jquery UI 支持移动端 触摸滑动等

    jQuery UI是我们前台开发常用的UI前端类库,但是目前的jQuery UI用户界面类库在互动和widget上并不支持touch事件.这意味着你在桌面上设计的优雅的UI可能在触摸设备,例如,ipa ...

  2. 大约Android 3.0后AsyncTask默认的单线程分析

    在Android下了很大的后台操作在需要的情况下.通常用于AsyncTask这个类.比方说,网络负载形象.访问server接口.一般的情况是使用一个的一例AsyncTask对象mTask,复制Asyn ...

  3. js实现tooltip动态提示效果(文字版)

    页面中经常用到鼠标移动到一个元素上面显示提示的功能,最开始的做法是在下面创建一个div然后动态显示这个div,但是这样需要加很多div,比较麻烦. 针对上面个的需求,这边写了一个tooltip动态提示 ...

  4. 1951: [Sdoi2010]古文字猪

    1951: [Sdoi2010]古代猪文 链接:Click Here~ 题目: 一道非常好的组合数学题.!!.题目非常长.只是就以下几段话实用. iPig认为仅仅要符合文献,每一种能整除N的k都是有可 ...

  5. Javascript多线程引擎(六)

    Javascript多线程引擎(六) 经过三个月的时间, Javascript 引擎已经完成beta版本(还不支持多线程特性, 预计下个星期就可以支持了, 现阶段还在进行测试基本JS单元功能), 并且 ...

  6. 在Visual Studio中Git的基本使用

    什么是Git Github : https://github.com/git Pro Git: http://git-scm.com/book Git 是一款免费的.开源的.分布式的版本控制系统.旨在 ...

  7. 基于Stm32的MP3播放器设计与实现

    原创博文,转载请注明出处 这是我高级电子技术试验课做的作业,拿来共享一下.项目在安福莱例程基础之上进行的功能完善,里面的部分内容可参考安福莱mp3例程.当然用的板子也是安福莱的板子,因为算起来总共做了 ...

  8. [Usaco2008 Open] Clear And Present Danger 寻宝之路[最短路][水]

    Description     农夫约翰正驾驶一条小艇在牛勒比海上航行.     海上有N(1≤N≤100)个岛屿,用1到N编号.约翰从1号小岛出发,最后到达N号小岛.一 张藏宝图上说,如果他的路程上 ...

  9. 职责链(Chain of Responsibility)模式

    一. 职责链(Chainof Responsibility)模式 责任链模式是一种对象的行为模式.在责任链模式里,很多对象由每一个对象对其下家的引用而连接起来形成一条链.请求在这个链上传递,直到链上的 ...

  10. 使用NPOI导出,读取EXCEL(可追加功能)

    使用NPOI导出,读取EXCEL,具有可追加功能 看代码 using System; using System.Collections.Generic; using System.Text; usin ...