监督学习算法需要标记的样本(x,y),但是无监督学习算法只需要input(x)。 您将了解聚类 - 用于市场分割,文本摘要,以及许多其他应用程序。

Principal Components Analysis, 经常用于加快学习算法,同时对于数据可视化以帮助你对数据的理解也有很大的帮助。

Unsupervised learning Introduction

supervised learning:在前面几课我们学习的都是属于监督性学习的内容,包括回归和分类,主要特点就是我们使用的数据集都是类似(x,y)这种样本,在算法中需要使用x作为训练的输入,然后把y作为分类的lable或输出的数值(在回归中)。

unsupervised learning:这是我们下面着重讨论的。如果要理解其和supervised learning的区别,主要把握一点:在算法训练中我们是否会使用y,当然我们也可以使用类似(x,y)的数据集,但是其中的y我们只是用来做结果验证,不用来训练算法,这一点很重要。

下面是unsupervised learning的应用举例:

K-means algorithm

根据Ng老师的上课顺序,先来看一个K-means 聚类的例子:

开始正式讲解。

算法输入:K,需要分类的数量;训练数据集X,去除x0 =1.

下面是算法描述:

总体来说,先随机初始化聚类中心centoids u1,u2,...,uk,然后重复迭代下面两步:

1.Cluster assignment:将样本点x(i)分配到离它最近的聚类中心K(距离由欧式距离来衡量,为上面画框的公式),将它此时分配的簇类型记为c(i),c(i)取值为簇的类标号。

2.Move centroid:根据上一步样本点的分配结果,重新计算聚类中心uk,uk为所有分配点的平均值。比如:现有x(1),x(3),x(5),x(10),分配给了类标号为2的簇,则簇中心(聚类中心)u2就等于这四个点的均值,如上面的计算。

K-means optimization objective

这里的最优化目标函数J(c,u)是所有样本点离簇中心的距离之和,这里需要弄清楚这些notation的含义。

c(i):x(i)分配给最近簇中心的类标号;

uk:聚类中心k,也就是簇中心,是一个意思。

uc(i):被分配给x(i)的簇中心,这个值可能每次迭代会根据簇中心的变化而变化,比如在这一次迭代中,x(i)被分配到2类簇,可能下次会被分配到4类簇,这样uc(i)就先是u2,然后是u4.

让我们再来回顾一下之前给出的算法:

这里需要说明的是,当执行Cluster assignment的时候,是固定簇中心u不变,最小化J(c,u)来求参数c;

然后Move centroid的时候,是固定c不变,最小化J(c,u)来求参数u。

这个过程个人感觉和最大期望算法(EM)的思想类似,感兴趣的童鞋可以去看看EM算法。

Random initialization

现在来接着讨论初始化簇中心的问题。

随机选择K个训练样本(K<m),作为簇中心。当然,可能我们运气并不好而选到了上面方框中的两个点,或者我们选择的中心会出现类似下面局部最优的情况,

为避免出现这种情况,通常需要多次初始化簇中心,可以是50~1000次,然后选取使J(c,u)最小的簇中心。

Choosing the number of clusters

老师介绍了一种叫 ’Elbow method‘ 的方法,如下

方法就是以K和J(c,u)作图,当然,在使用的时候,你可能会遇到上面两种情况:

如果出现左边的图,你就应该很兴奋了,这就是所谓的手肘型"Elbow",因为你可以一眼就看出你的最佳的K取值,就是3左右,因为在3之前,J下降的很快,而3之后J下降的不明显。

但如果不幸出现右边的图,可能就不是那么明显了。这时就是“仁者见仁”了。

像这个关于T恤尺码的问题,根据你的实际需要,可以选择3个簇“S,M,L”,也可以选择5个簇"XS,S,M,L,XL"等。

Dimensionality Reduction

数据降维可以压缩数据,比如对图片的压缩保存,可以节省磁盘空间,另外数据降维可以提高算法的训练速度,还可以用数据降维到2维或者3维进行数据可视化。

Principal Component Analysis problem formulation

 

简单的说,数据降维就是用低维度的数据尽量保持原维度的数据表示。

从上面的数据可视化看出,左边的2维图的样本点分布趋势基本在一条直线上,而右边的三维样本点基本分布在2维平面上,所以我们可以分别用一维和二维数据来表示上面的数据分布。

数据降维的关键就是找到数据投影的方向,使样本x在该方向上的projection error最小。以二维数据为例:

将上面两幅图做一下对比,你觉得应该选择哪一个投影方向比较适合?当然是第二个。

为什么?之前讨论的数据降维的目标是:使用低维的数据尽量保持或表示出原数据的特征。

观察上面数据的分布特征,可以看出数据大体是沿正向45度角分布的,我们做投影时,应该使数据的投影尽量的区分开,不能像左图那样太集中,而是像右图那样分散开,这样也得到了最小的projection error 。

然后我们就用样本在该方向的投影值来表示原来的数据,就达到了压缩的目的。

有同学会发现这怎么和前面讲的回归很类似,下面讲讲他们之间的区别:

1.回归是supervised learning,而PCA是Unsupervised learning,即PCA不需要使用样本的y;

2. PCA衡量的是orthogonal distance, 而linear regression是所有x点对应的真实值y与估计值h(x)之间的vertical distance距离。可以在上图看到,第一个是回归,这个error是x真实的y值与预测值之间的垂直距离,而PCA的error是x与其在投影方向的垂直距离。

Principal Component Analysis algorithm

数据预处理:feature scaling/mean normalization

Reduce data from n-dimensions to k-dimensions

计算协方差矩阵Sigma:

计算特征向量U:

在Octive/Matlab中使用函数svd,进行“奇异值分解”(singular value decomposition)求解特征向量U。

我们需要选择K个最大特征值对应的特征向量。

使用SVD函数求得的U中,已经自动排好序列,选择前K个向量,作为我们数据投影的“基向量”:

然后将x表示成压缩后的新样本z:z=Ureduce‘ * x;其中x是n维,z是压缩后的k维。

给出对上面内容的总结:

Reconstruction from compressed representation

我们使用Z = Ureduce ’ * x 将数据压缩到k维,现在我们也可以通过Xapprox = Ureduce * Z 将数据还原成类似原来的样子,但是请注意,这个还原的Xapprox是我们对原数据的估计,是有误差的,不可能回到和原来一模一样的情况,所以这个就要求我们在压缩的时候压缩维度的情况下尽可能保持数据的原始特征。从上面的图可以看出,我们还原出来的数据和原数据的差别。

choosing the number of principal components k

为了选择最佳的principal components 的K值,我们使用方框中的公式来定量评估压缩后的数据对原来数据特性(ariance)的保持度。

设置一个阈值,比如10%,当公式的结果值在阈值以内我们就认为这个K值的压缩结果是可以接受的。

那我们的PCA算法就是这样的:

对于不同的K=1,K=2......,从小到大这么取K值,然后计算它的Ureduce(K个特征向量) ,Z(压缩后的数据表示),和Xapprox(还原后的近似数据),计算上面的公式是否在你设置的阈值以内,取最小的满足阈值的K值作为理想的principal components的数量。这里需要说明的是,我们在svd函数求出的返回值中包含一个S矩阵,可以用它来计算判别式的值。S是一个对角矩阵,由Sigma的特征值组成,直接可以用

前k个特征值的和/特征值的总和  来计算,看上面的例子。

Application of PCA

1.使用PCA提高监督性学习的训练速度。先使用没有标记的数据X,经过PCA处理得到新的数据Z,将新的数据集(Z,y)用于算法训练。PCA不仅可以运用在training set,还可以在Xcv和Xtest中使用。

2.数据压缩和数据可视化。

3.不要使用PCA来防止过拟合,而是应该使用regulrization。

Note:

在设计机器学习算法时,不要首先就考虑要使用PCA,当你在原始数据训练结果不理想时,再考虑使用PCA.

参考:http://blog.csdn.net/abcjennifer/article/details/8002329

斯坦福机器学习视频笔记 Week8 无监督学习:聚类与数据降维 Clusting & Dimensionality Reduction的更多相关文章

  1. 斯坦福机器学习视频笔记 Week1 Linear Regression and Gradient Descent

    最近开始学习Coursera上的斯坦福机器学习视频,我是刚刚接触机器学习,对此比较感兴趣:准备将我的学习笔记写下来, 作为我每天学习的签到吧,也希望和各位朋友交流学习. 这一系列的博客,我会不定期的更 ...

  2. 斯坦福机器学习视频笔记 Week1 线性回归和梯度下降 Linear Regression and Gradient Descent

    最近开始学习Coursera上的斯坦福机器学习视频,我是刚刚接触机器学习,对此比较感兴趣:准备将我的学习笔记写下来, 作为我每天学习的签到吧,也希望和各位朋友交流学习. 这一系列的博客,我会不定期的更 ...

  3. 斯坦福机器学习视频笔记 Week6 关于机器学习的建议 Advice for Applying Machine Learning

    我们将学习如何系统地提升机器学习算法,告诉你学习算法何时做得不好,并描述如何'调试'你的学习算法和提高其性能的“最佳实践”.要优化机器学习算法,需要先了解可以在哪里做最大的改进. 我们将讨论如何理解具 ...

  4. 斯坦福机器学习视频笔记 Week9 异常检测和高斯混合模型 Anomaly Detection

    异常检测,广泛用于欺诈检测(例如“此信用卡被盗?”). 给定大量的数据点,我们有时可能想要找出哪些与平均值有显着差异. 例如,在制造中,我们可能想要检测缺陷或异常. 我们展示了如何使用高斯分布来建模数 ...

  5. 斯坦福机器学习视频笔记 Week3 逻辑回归与正则化 Logistic Regression and Regularization

    我们将讨论逻辑回归. 逻辑回归是一种将数据分类为离散结果的方法. 例如,我们可以使用逻辑回归将电子邮件分类为垃圾邮件或非垃圾邮件. 在本模块中,我们介绍分类的概念,逻辑回归的损失函数(cost fun ...

  6. 斯坦福机器学习视频笔记 Week7 支持向量机 Support Vector Machines

    SVM被许多人认为是最强大的“黑箱”学习算法,并通过提出一个巧妙选择的优化目标,今天最广泛使用的学习算法之一. Optimization Objective 根据Logistic Regression ...

  7. 斯坦福机器学习视频笔记 Week4 & Week5 神经网络 Neural Networks

    神经网络是一种受大脑工作原理启发的模式. 它在许多应用中广泛使用:当您的手机解释并理解您的语音命令时,很可能是神经网络正在帮助理解您的语音; 当您兑现支票时,自动读取数字的机器也使用神经网络. Non ...

  8. 斯坦福机器学习视频笔记 Week2 多元线性回归 Linear Regression with Multiple Variables

    相比于week1中讨论的单变量的线性回归,多元线性回归更具有一般性,应用范围也更大,更贴近实际. Multiple Features 上面就是接上次的例子,将房价预测问题进行扩充,添加多个特征(fea ...

  9. ng机器学习视频笔记(十六) ——从图像处理谈机器学习项目流程

    ng机器学习视频笔记(十六) --从图像处理谈机器学习项目流程 (转载请附上本文链接--linhxx) 一.概述 这里简单讨论图像处理的机器学习过程,主要讨论的是机器学习的项目流程.采用的业务示例是O ...

随机推荐

  1. POJ 1426 Find The Multiple &amp;&amp; 51nod 1109 01组成的N的倍数 (BFS + 同余模定理)

    Find The Multiple Time Limit: 1000MS   Memory Limit: 10000K Total Submissions: 21436   Accepted: 877 ...

  2. 图像sift配准后融合

    image rectification 图像校正 在配准时,先找到特征点,找到特征点后剔除伪匹配点. 然后针对两幅图像做几何矫正(一般通过估计出来的仿射矩阵完成). 这部完成后,图像可以匹配了,但是两 ...

  3. Linux基础分析

    1.系统目录 [root@15b883 ~]# tree -L 1 / ├── bin 常用二进制命令所在的目录 ├── boot 内核及系统引导程序所在的文件目录 ├── dev 设备目录 ├── ...

  4. IDLE崩溃:IDLE's subprocess didn't make connection. Either IDLE can't start a...

    今天在测试Python脚本的时候,突然间发现,脚本不能启动了,还弹出了“IDLE's subprocess didn't make connection. Either IDLE can't star ...

  5. 浅析Avicii的MV Hey Brother

    date: 2017-04-10 20:30:19 其实这篇随感早应在一个月之前就写完的,但是笔者刚从老家来到北京,需要安顿各种事情,再加上自己比较懒上班比较忙,每天晚上回到家,都是直接趴在床上睡了. ...

  6. 【spring boot logback】spring boot中logback日志乱码问题

    在初次使用logback的自定义配置文件完整的控制spring boot日志后,发现了一个无法忍受的问题,就是日志乱码. 控制台看到打印日志乱码如下: 而日志文件打开: 记事本打开 sublime打开 ...

  7. python time与datetime.date/datetime模块

    https://docs.python.org/3/library/datetime.html 1.用于日期比较大小的方法 方法名 方法说明 用法 __eq__(…) 等于(x==y) x.__eq_ ...

  8. 部署vuejs dist文件,通过node.js编译

    前期准备: 1. Linux环境,安装配置node.js ① 下载地址:http://nodejs.cn/download/  ,下载linux 64位 ② 已编译好的压缩包,解压到指定目录 cd / ...

  9. 《从零开始学Swift》学习笔记(Day 32)——计算属性

    原创文章,欢迎转载.转载请注明:关东升的博客 计算属性本身不存储数据,而是从其他存储属性中计算得到数据. 计算属性概念: 计算属性提供了一个getter(取值访问器)来获取值,以及一个可选的sette ...

  10. <2013 07 22> 游历西欧

    从本月11号开始到昨天,10天时间,和其他六位同学畅游了西欧,路经慕尼黑-巴塞罗马-尼斯-马赛-巴黎-阿姆斯特丹,最后回到慕尼黑,每个地方都待了两天,参观了主要的景点和建筑,见识了本地文化与饮食. 令 ...