吴恩达机器学习系列课程笔记——非监督学习
该系列笔记内容是楼主在观看课程时记录的,其中图片是视频中ppt的截图,内容仅供参考,有问题欢迎大家指出。
非监督学习(Unsupervised Learning)
- 与监督学习不同的是,非监督学习是在没有标签信息情况下,通过对所研究对象的样本分析找寻隐含在数据中的结构
1. 聚类(Clustering)
聚类方法是通过算法自动的将数据分成有紧密关系的不同子集或簇
1.1 K均值算法(K-means)——迭代算法
- 输入内容:
- 大写K表示期望从数据中聚类出簇的个数,且K要小于样本数目
- 无标签的训练数据集X
- 基本原理主要分为簇分配和移动聚类中心(Cluster Centroid),下三张图简单表示了K均值聚类过程,其中绿点为原始数据,红点为标为红色聚类中心的数据,蓝色同理表示标为蓝色聚类中心的数据
- 具体步骤如下:
- 随机生成 K 个聚类中心点
- 遍历数据集并计算每个样本到各个聚类中心点的直线距离
- 将数据集按照最短距离分配给各个聚类中心点
—> 若出现没有属于某聚类中心的数据,且不需要K个簇,则将该聚类中心移除,最终得到的是K-1个簇
—> 但若一定需要分成K类,则重新随机初始化这个聚类中心 - 将聚类中心点根据各自属性的集合数据的平均值进行移动
- 重复2-4步骤,直到聚类中心不再改变
- 如下图所示,K均值算法不仅可以将明显的分类数据进行区分,也可以对不太明显数据按期望的K簇进行分类,例如对衣服分为S、M和L号进行制作
1.1.1 失真代价函数(Distortion Cost Function)
- 根据K均值算法原理可知,簇分配步骤是关于变量c(即数据集)标签的变化,移动聚类中心步骤是关于变量μ(即聚类中心)位置的变化,通过计算数据到聚类中心的直线距离可以得到失真代价函数
1.1.2 聚类中心的随机初始化
- 初始化状态的不同会引导出不同的结果,有可能会导致局部最优而非全局最优,如下图所示
- 因此,较少的分组如 2-10 类,可以通过多次随机初始化运行算法以保证合理的分类结果(在所有运行出的结果中选择代价最小的);较多的分类也可以通过随机初始化聚类中心给予合理的起点,但无需运行多次
1.1.3 聚类数量的选择
- 目前没有很好的自动选择方法,主要通过观察可视化图或算法的输出手动的进行选择,或者通过经验和目标选择
- 下图为其中一种方法称为肘部法则(Elbow Method)——通过绘图找到某个值使得之后的分类代价函数下降缓慢,但实际上得到的曲线会比较平滑模糊
- 建议使用后续的下游目标(Downstream Purpose) 作为评价标准来选择聚类数量,如下图所示
2. 降维(Dimensionality Reduction)
-
目的:
- 数据压缩(不仅使得占用空间减少,还可以对算法进行加速)
- 可视化数据(一般降到2或3维空间)
- 当某些特征是线性相关时,可以通过降维用更少维度的向量表示原始特征,如下图简单示意图表示了3D到2D和2D到1D的情况
2.1 主成分分析法(PCA,Principal Components Analysis)
- PCA是通过将数据投影到以k个向量(降至的k维度)展开的线性子空间上,使得空间内数据的**投影误差(Projection Error)**最小
- 数据预处理:均值标准化(不清楚的可以看吴恩达机器学习系列课程笔记——最优化算法)
- 如上图所示,算法核心包括:
- 计算协方差(Covariance Matrix)
- 通过**奇异值分解(SVD,Singular Value Decomposition)**计算协方差的特征向量
- 通过PCA找到训练集特征的关系可以优化监督算法(实际情况中是可以降维1/5或1/10且不影响性能),值得注意的是,PCA用于寻找压缩特征的映射方式只需在训练集上使用即可,当找到映射关系后可以用于交叉验证集和测试集
- 另外,通过PCA有时的确可以防止过拟合,但不是解决过拟合问题的好方式,尽管PCA降维保留了可能99%的信息,但很有可能扔掉了一些比较重要的信息(因为降维不考虑标签y,只针对特征x进行处理),所以尽量还是使用正则化去改进
2.1.1 与线性回归模型的区别
- 线性回归求得的拟合线是计算数据到该线的垂直距离而非投影距离
- 两者的数据集不同,对于PCA每个数据都视为同样类型,而线性回归模型中有实际标签值y
2.1.2 压缩重现(原始数据的重构)
- 通过PCA得到的降维矩阵可以还原成原来的维度,但是由于压缩时是做投影,因此还原后的数据不一定与原始数据相同,如上图右侧所示,1D还原到2D上时点都经过拟合曲线,与原始数据由一定误差
2.1.3 降维k参数的选择
- 如下图所示,当选择降维k时,需要其在满足丢失信息影响小的情况下尽可能的小,因此可以同计算数据的波动程度,即,使得该值小于某个阈值
- 测试方法:
- 暴力解决方法:通过一个个测试k值,将求得正向压缩后反向重构的x值带入式子求得波动程度,直到符合阈值要求为止
- 利用SVD算法返回的S矩阵求解,其中S是降维后的X的协方差矩阵
3. 异常检测(Anomaly Detection)
- 异常检测算法是用于检测行为是否异常,由于其正确样本数量远大于异常的,因此可以通过机器学习判断数据是否在正常范围内来区分异常行为,下图为异常检测简单的示例图
在算法介绍前先了解以下什么是高斯分布
3.1 高斯分布(Gaussian Distribution)
- 上图为高斯分布(也称正态分布)的基本公式,其中μ是均值,决定了高斯分布的对称轴的位置;σ是标准差(standard deviation),控制曲线到中轴的距离,σ2决定了高斯分布概率的密度;由于是概率分布,不论曲线如何变化,其下覆盖的面积恒为1
- 对于样本数足够大的情况下,式子中除以的是 m 还是 m-1 在实际机器学习中区别不大,一般习惯用m
-
实现步骤:
- 选择特征向量可以明显指出异常反应的样本
- 根据参数拟合高斯分布中的均值μ和标准差σ
- 进行密度估计(Density Estimation),并根据选定的 ε 判断数据是否异常
3.2 特征选择评估标准
- 训练集是无标签数据,但尽量都是非异常或异常其中一类样本;而验证集或测试集则是带有标签的数据(包括异常和非异常的样本),通常使用60%、20%、20%的比例分割样本数据;使用验证集进行参数的调整(包括选择特征以及阈值ε的值)之后再在测试集上进行测试
- 由于测试数据一般是偏斜类(异常样本数量远少于正常的),因此可以通过查准率与召唤率或F1-score标准进行评估
3.3 实际设计问题
- 如上图左下所示,当密度估计函数绘制出来的曲线不是高斯分布的时候,可以通过一些函数将特征转调整成更接近高斯分布的曲线,如或开m次方
- 通过误差分析过程选择新的特征:通常情况下会出现如下图所示的问题,即有的异常在高斯分布正常范围内;此时可以通过观察某个异常案例进行启发,一般是通过选择很大或很小的特征进行重新组合以此达到合适的筛选范围
3.4 异常检测与监督学习的区别
- 异常检测更适合解决偏斜类问题,而监督学习则适合处理每种特征数量均等的问题
- 异常检测更适合解决某类未来趋势不确定,或容易出现新的特征导致异常的问题,而监督学习更适合固定类别的问题
3.5 多元高斯分布(Multivariate Gaussian Distribution)
- 有些问题异常数据是与特征间关系有密切联系的,如两个特征间成斜椭圆关系的异常检测无法通过高斯分布进行正确判断,因此引入了多元高斯分布的概念
- 上图为多元高斯分布的公式,其中协方差矩阵Σ(n×n矩阵)中的对角线是对应特征的参数,数值越大则在对应的方向中越大;矩阵中剩余部分可以用于建立不同特征间的的相关性;μ表示中心点位置,按照对应的位置表示对应特征的中轴位置;下图为改变不同参数后多元高斯分布的三维示意图
- 高斯分布是特殊的多元高斯分布:当协方差矩阵中对角线都为σ2,且其余都为零时,即为高斯分布
- 若出现协方差矩阵为不可逆的情况有两种:
- 特征数多于样本数
- 特征有冗余(线性相关的几个特征,如x1=x2的重复特征或x1=x2+x3无意义的特征)
- 使用多元高斯分布进行异常检测,与使用高斯分布的步骤几乎相同,如下图所示
3.6 不同分布的应用范围
- 数据量:多元高斯分布由于求解p函数时用到了协方差矩阵,导致计算量成幂指数增长,不能很好的用于大量特征的计算上,与之相反的是高斯分布对处理大量特征更有效
- 特征关系:若模型中出现特征间关系时,可以通过创建新的特征加入高斯分布模型中,也可以利用多元高斯分布模型自动的进行处理
- 限制条件:对于多元高斯分布模型来说,由于数学上的约束条件,需要样本数大于特征数才可以使用(否则协方差矩阵不可逆),而高斯分布则没有这个条件
- 实践建议:因为多元高斯分布模型中的协方差矩阵是特征数量n×n的矩阵,所以使用时样本数尽量远大于特征数(如m > 10 n),否则不能很好覆盖所有情况