Stanford机器学习---第九讲. 聚类
原文:http://blog.csdn.net/abcjennifer/article/details/7914952
本栏目(Machine learning)包括单参数的线性回归、多参数的线性回归、Octave Tutorial、Logistic Regression、Regularization、神经网络、机器学习系统设计、SVM(Support Vector Machines 支持向量机)、聚类、降维、异常检测、大规模机器学习等章节。内容大多来自Standford公开课machine learning中Andrew老师的讲解和其他书籍的借鉴。(https://class.coursera.org/ml/class/index)
第九讲. 聚类——Clustering
===============================
(一)、什么是无监督学习?
(二)、KMeans聚类算法
(三)、Cluster问题的(distortion)cost function
(四)、如何选择初始化时的类中心
(五)、聚类个数的选择
=====================================
(一)、什么是无监督学习
之前的几章我们只涉及到有监督学习,本章中,我们通过讨论另一种Machine learning方式:无监督学习。首先呢,我们来看一下有监督学习与无监督学习的区别。
给定一组数据(input,target)为Z=(X,Y)。
有监督学习:最常见的是regression & classification。
- regression:Y是实数vector。回归问题,就是拟合(X,Y)的一条曲线,使得下式cost function L最小。

- classification:Y是一个finite number,可以看做类标号。分类问题需要首先给定有label的数据训练分类器,故属于有监督学习过程。分类问题中,cost function L(X,Y)是X属于类Y的概率的负对数。
,其中fi(X)=P(Y=i | X);

无监督学习:无监督学习的目的是学习一个function f,使它可以描述给定数据的位置分布P(Z)。 包括两种:density estimation & clustering.
- density estimation就是密度估计,估计该数据在任意位置的分布密度
- clustering就是聚类,将Z聚集几类(如K-Means),或者给出一个样本属于每一类的概率。由于不需要事先根据训练数据去train聚类器,故属于无监督学习。
- PCA和很多deep learning算法都属于无监督学习。
好了,大家理解了吧,unsupervised learning也就是不带类标号的机器学习。
练习:

=====================================
(二)、K-Means聚类算法
KMeans是聚类算法的一种,先来直观的看一下该算法是怎样聚类的。给定一组数据如下图所示,K-Means算法的聚类流程如图:


图中显示了Kmeans聚类过程,给定一组输入数据{x(1),x(2),...,x(n)}和预分类数k,算法如下:

首先随机指定k个类的中心U1~Uk,然后迭代地更新该centroid。
其中,C(i)表示第i个数据离那个类中心最近,也就是将其判定为属于那个类,然后将这k各类的中心分别更新为所有属于这个类的数据的平均值。
=====================================
(三)、Cluster问题的(distortion)cost function
在supervised learning中我们曾讲过cost function,类似的,在K-means算法中同样有cost function,我们有时称其为distortion cost function.
如下图所示,J(C,U)就是我们要minimize的function.

即最小化所有数据与其聚类中心的欧氏距离和。
再看上一节中我们讲过的KMeans算法流程,第一步为固定类中心U,优化C的过程:

第二步为优化U的过程:

这样进行迭代,就可以完成cost function J的优化。
练习:

这里大家注意,回归问题中有可能因为学习率设置过大产生随着迭代次数增加,cost function反倒增大的情况。但聚类是不会产生这样的问题的,因为每一次聚类都保证了使J下降,且无学习率做参数。
=====================================
(四)、如何选择初始化时的类中心
在上面的kmeans算法中,我们提到可以用randomly的方法选择类中心,然而有时效果并不是非常好,如下图所示:

fig.1. original data
对于上图的这样一组数据,如果我们幸运地初始化类中心如图2,

fig.2. lucky initialization

fig.3. unfortunate initialization
但如果将数据初始化中心选择如图3中的两种情况,就悲剧了!最后的聚类结果cost function也会比较大。针对这个问题,我们提出的solution是,进行不同initialization(50~1000次),每一种initialization的情况分别进行聚类,最后选取cost function J(C,U)最小的作为聚类结果。
=====================================
(五)、聚类个数的选择
How to choose the number of clusters? 这应该是聚类问题中一个头疼的part,比如KMeans算法中K的选择。本节就来解决这个问题。
最著名的一个方法就是elbow-method,做图k-J(cost function)如下:

若做出的图如上面左图所示,那么我们就找图中的elbow位置作为k的选定值,如果像右图所示并无明显的elbow点呢,大概就是下图所示的数据分布:

这种情况下需要我们根据自己的需求来进行聚类,比如Tshirt的size,可以聚成{L,M,S}三类,也可以分为{XL,L,M,S,XS}5类。需要大家具体情况具体分析了~
练习:

Stanford机器学习---第九讲. 聚类的更多相关文章
- Stanford机器学习---第二讲. 多变量线性回归 Linear Regression with multiple variable
原文:http://blog.csdn.net/abcjennifer/article/details/7700772 本栏目(Machine learning)包括单参数的线性回归.多参数的线性回归 ...
- Stanford机器学习笔记-9. 聚类(Clustering)
9. Clustering Content 9. Clustering 9.1 Supervised Learning and Unsupervised Learning 9.2 K-means al ...
- Stanford机器学习---第一讲. Linear Regression with one variable
原文:http://blog.csdn.net/abcjennifer/article/details/7691571 本栏目(Machine learning)包括单参数的线性回归.多参数的线性回归 ...
- Stanford机器学习笔记-9. 聚类(K-means算法)
9. Clustering Content 9. Clustering 9.1 Supervised Learning and Unsupervised Learning 9.2 K-means al ...
- 机器学习六--K-means聚类算法
机器学习六--K-means聚类算法 想想常见的分类算法有决策树.Logistic回归.SVM.贝叶斯等.分类作为一种监督学习方法,要求必须事先明确知道各个类别的信息,并且断言所有待分类项都有一个类别 ...
- PE格式第九讲,资源表解析
PE格式第九讲,资源表解析 一丶熟悉Windows管理文件的方法 首先,为什么标题是这个,主要是为了下边讲解资源方便,因为资源结构体很乱.如果直接拿出来讲解,那么就会很晕. 1.windows管理文件 ...
- Linux第九讲随笔 -进程管理 、ps aux 、
Linux第九讲1,进程管理 Linux在执行每一个程序时,就会在内存中为这个程序建立一个进程,以便让内核可以管理这个运行中的进程,进程是系统分配各种资源,进程调度的基本单位. 怎么查看进程 一.ps ...
- python学习第九讲,python中的数据类型,字符串的使用与介绍
目录 python学习第九讲,python中的数据类型,字符串的使用与介绍 一丶字符串 1.字符串的定义 2.字符串的常见操作 3.字符串操作 len count index操作 4.判断空白字符,判 ...
- Linux基础知识第九讲,linux中的解压缩,以及软件安装命令
目录 Linux基础知识第九讲,linux中的解压缩,以及软件安装命令 一丶Linux Mac Windows下的压缩格式简介 2.压缩以及解压缩 3.linux中的软件安装以及卸载 1.apt进行安 ...
随机推荐
- KMP和扩展KMP
文章网上太多这里提一下代码细节: KMP: scanf("%s\n",s); scanf("%s\n",t); int ls=strlen(s),lt=strl ...
- linux下定时任务的使用
使用方法 执行crontab -e命令会进入一个可编辑界面,在该界面中我们可以制定定时任务,然后保存退出(wq) 格式如下: 由于直接运行编辑命令后只是一个空白界面,不够友好,所以建议使用以下方式来增 ...
- SequoiaDB 系列源码分析调整
犹豫我经验尚不够丰富,有大牛跟我说,以我这样定下的结构来分析源码,学习效果不太好. 应该先从程序的进程入口函数开始,慢慢的跟流程来分析.先通过系统的启动.退出来分析所用到的技术,像进程模型,线程模型等 ...
- 第十六章:脚本化HTTP
写在本章内容前: 第十五章:事件处理 涉及到到较多的文字篇幅,介于个人精力问题,暂不更新.主要包含的内容有事件类型.注册事件处理程序.事件处理程序的调用.文档加载事件.鼠标事件.鼠标滚轮事件.拖放事件 ...
- android 通过帧动画方式播放Gif动画
注意:经过本人测试,这个方法很耗内存, 图片一多就崩了.慎用 <1>用工具(photoshop或者FireWorks)将GIF动画图片分解成多个GIF静态图片,然后保存在res\drawa ...
- Java设计模式-代理模式(Proxy)
其实每个模式名称就表明了该模式的作用,代理模式就是多一个代理类出来,替原对象进行一些操作,比如我们在租房子的时候回去找中介,为什么呢?因为你对该地区房屋的信息掌握的不够全面,希望找一个更熟悉的人去帮你 ...
- ORACLE在存储过程中记录日志的处理包
Java开发过程中一般使用LOG4J来将程序的运行日志记录到文件中,在ORACLE存储过程中也需要记录日志,我将工作中自己整理的一个记录日志的包分享出来,其实很简单,希望大家多提意见. 一.表结构 为 ...
- session实现防止重复提交,以及验证
参考文档 1.生成Token的参考文档.http://www.cnblogs.com/TianFang/p/3180899.html 2.主要参考文档.http://www.cnblogs.com/x ...
- 【uoj222】 NOI2016—区间
http://uoj.ac/problem/222 (题目链接) 题意 有n个区间,当有m个区间有公共部分时,求m个区间长度的最大值与最小值之差的最小值. Solution 线段树+滑动窗口.这道题很 ...
- Appserv环境下搭建的PHP环境升级PHP版本(支持微信端口以及thinkphp)
Appserv 2.5.10 升级PHP from version 5.2 to 5.3 最近,在使用Appserv 2.5.10 中的PHP开发微信时,遇到下面错误 Fatal error C ...