对于无监督学习我们主要学习两种算法:聚类(K-means)和维度约简(PCA法)。
1聚类算法clutering
1.1聚类算法简介
无监督学习:我们面对的是一组无标记的训练数据, 数据之间, 不具任何相关联的标记。如图:
我们得到的数据 看起来像这样:一个数据集, 一堆数据点,但没有任何标记以供参考。所以从训练数据中, 我们只能看到 x 1、 x 2… 等等… 到 x(m) 没有任何标记 y 供参考。
就此数据而言, 其中一种可能的结构 是 所有的数据 可以大致地划分成 两个类或组。 因此,像我介绍的 这种划分组的算法, 称为
聚类算法。 这是我们第一种 无监督学习算法。
记住,聚类算法clutering只是无监督学习的一种,不是所有的无监督学习都是聚类算法
1.2K-means
K-means也是聚类算法中最简单的一种。但是里面包含的思想却是不一般。
K-means算法是将样本聚类成k个簇(cluster),具体算法描述如下:
随机选取k个聚类质心点(cluster centroids)为
。
重复下面过程直到收敛 {
- [ ] 对于每一个样例i,计算其应该属于的类
- [ ] 对于每一个类j,重新计算该类的质心
}
下图展示了对n个样本点进行K-means聚类的效果,这里k取2。
一个练习题:
1.2.1kmeans的目标函数
在大多数我们已经学到的 监督学习算法中。 算法都有一个优化目标函数 或者某个代价函数(又叫:畸变函数)需要通过算法进行最小化 。
事实上 K均值也有 一个优化目标函数或者 需要最小化的代价函数。
注意,这个值只会随着迭代下降,不会上升。
1.2.2随机初始化
这一节我们讨论: 如何避开局部最优来构建K均值聚类方法 。
有几种不同的方法 可以用来随机 初始化聚类中心 ,但是 事实证明, 有一种方法比其他 大多数方法 更加被推荐。
可以避免 可能局部,获得全局最优的结果 。
1.2.3选择类别数
讨论一下 K-均值聚类的最后一个细节 :我想选择聚类数目的更好方法。 或者说是如何去选择 参数大写K的值 。
说实话 这个问题上没有一个 非常标准的解答 、或者能自动解决它的方法。
目前用来决定聚类数目的 最常用的方法 ,仍然是通过看可视化的图, 或者看聚类算法的输出结果 ,或者其他一些东西来手动地决定聚类的数目。
两种常见方法:
1. 肘部法则
例如下面的例子,分别考虑3和5,画出loss图像。
- 从后续需求(生意)角度考虑
下面有个练习题:
2 维数约减 (dimensionality reduction)
这节开始介绍 第二种无监督学习问题 它叫维数约减 (dimensionality reduction) 。
我们希望使用维数约简 的原因有以下几个 :
1. 一个原因是数据压缩。
数据压缩不仅通过 压缩数据使得数据 占用更少的计算机 内存和硬盘空间, 它还能给算法提速 它还能给算法提速 。
2. 另一个原因就是可视化。通过降维进行可视化,进而更好地理解数据。
2.1数据压缩
在实际工作中,数据的维度通常是很大的(100+)。那么数据维度约简(data dimensionality reduction)是很有必要的。
举一个例子:3维降成2维:
2.2数据可视化
比如这个国家GDP的数据,数据有50维。不能画出来,但是个以用两个维度大体上表示出来。比如这样:
横轴可以表示国家面积,国家总GDP等,纵轴可以表示人均GDP,幸福度等等。
那么怎么找出这种可以很好表示其他特征的特征呢?下面一节介绍这个算法PCA(主成分分析法)。
3维度约简-主成分分析法PCA
对于降维问题来说 目前 最流行 最常用的算法是 主成分分析法 (Principal Componet Analysis, PCA)
3.1 PCA是做什么的
PCA是寻找到一个低维的平面 对数据进行投影 ,以便 最小化投影误差的平方( 最小化每个点 与投影后的对应点之间的距离的平方值 )。
定义:想把数据从n维降到k维(k < n),就在这个空间里面找k个单位向量来表示数据,使得数据点投影到这个面上的误差最小。如下例子:2到1 和 3到2
下面介绍 线性回归与2维PCA的区别:虽然都是找一条直线去拟合但是,
- 计算loss的方式不同(垂直)。
- PCA没有标签Y(非监督)。
3.2PCA的计算过程
设有m条n维数据。将原始数据按列组成n行m列矩阵X
- 将X的每一行(代表一个属性字段)进行零均值化,即减去这一行的均值
- 求出协方差矩阵
- 求出协方差矩阵的特征值及对应的特征向量(使用svd函数)。(特征向量最能代表原数据)
- 将特征向量按对应特征值大小从上到下按行排列成矩阵,取前k行组成矩阵Ur。(找k个最能代表原数据的向量)
- Y=UTXY=UTX即为降维到k维后的数据
取前k个最有代表意义的特征向量:
将特征值按照从大到小的顺序排序,选择其中最大的k个,然后将其对应的k个特征向量分别作为列向量组成特征向量矩阵。
(1)数据预处理
(2)PCA算法的目的
(3)PCA算法
(4)PCA降维
(5)PCA算法总结
4应用PCA
4.1PCA反向压缩
既然PCA可以将高维数据压缩到低维,那么反着使用PCA则可以将低维数据恢复到高维。
因为Y=UT×XY=UT×X,所以换算一下U×Y=XU×Y=X这里的X只是近似值。
那么当n和k相同的时候会发生什么呢?看下题:
1. U的维度为方阵
2. 反着求x,为原值
3. 保存率为100%
4.2怎么选择维度k
在 PCA 算法中 我们把n维特征变量 降维到k维特征变量 。这个数字k也被称作 主成分的数量 或者说是我们保留的主成分的数量 。
在这个视频中 我会给你们一些参考 告诉你们 人们是怎样思考如何选择 PCA 的参数k的 。
我们先来思考两个值:
1. 第一个是:PCA 所做的是 尽量最小化 平均平方映射误差 (Average Squared Projection Error) 。
2. 第二个是:我还要定义一下 数据的总变差 (Total Variation) 。 它的意思是 “平均来看 我的训练样本 距离零向量多远?
我们把两个数的比值作为衡量PCA算法的有效性,比如
所以一个比较好的办法是:定义一个阈值,然后实验k,看看那个最小的k合适。计算步骤如下:
这里有个技巧:svd函数会返回一个对角矩阵S,他的元素可以很快的计算这个阈值。
4.3使用PCA的场景
主成份分析法主要有以下用途:
1. 数据压缩
1. 减少内存的占用、存储硬盘
2. 加速算法的运转
2. 数据可视化:3维2维
有些人觉的PCA也可以用来防止过拟合,但是这是不对的。应该用正则化。正则化使用y标签最小化损失函数,使用了y标签信息。而PCA只单纯的看x的分部就删除了一些特征,损失率很多信息。
总结一下PCA的用法: