机器学习简单复习笔记

487 阅读7分钟

写在最前:本文没有过多的涉及数学公式,倒是像一个复习回顾的笔记,读者请注意!!!

简单的理解正则化

还是从一个简单的例子看起来:y=wx+by=wx+b

一般来说。x是数据(特征),y是标签。也许,我们又可以将x称为知识,y称为答案,将w称为我们投入的注意力,将b认为是我们做的简单调整。那么,学习的过程就可以称之为,我们尽可能的利用知识来给出正确的答案。最简单的一种方法就是背下来!!!。那么就需要投入一些精力,对这些知识给更多的关注。似乎这样,w就会变得很复杂。众所周知,在w之前加一个惩罚项λ就会使w变得小一些。这似乎在说,有些知识我们不应该太注重,该放弃就放弃。

在学习的时候,如果你喜欢把好多内容都记在笔记上,也许你应该“正则化”一下。如果你是一个卷王,想学好多内容,也许你应该“正则化”一下。内卷的时候也要注意休息,生活不能过拟合。

聚类

聚类算法有很多种,其中最基本的一种算法是K-means。

一、K-means 聚类

输入:数据集X,聚类中心的个数K

输出:Cluster indicator

超参数:K(聚类中心的个数)

1、K-means的工作过程

首先随机初始化聚类中心->对每个样本点计算距离该样本点最近的聚类中心(或者将这个过程简单的称为类别分配)->根据前一步计算出的结果,计算每个类中所有的样本点的平均值。让聚类中心等于这个均值(或将这个过程简单的称为移动聚类中心)->不断重复类别分配和移动聚类中心的过程直到模型收敛。

随机初始化聚类中心是一个非常重要的工作,它在很大程度上将会导致模型能不能收敛到全局最优。为了尽可能的得到全局最优的聚类结果,一种普遍的策略就是进行多次随机初始化,然后不断迭代。也可以这么理解,如果将随机初始化聚类中心然后迭代模型至收敛认为是一次聚类的话,那么多次随机初始化策略实际上就是进行多次聚类,然后取得到的最优的模型。这是一种尽可能得到全局最优的策略,但并不总是有效。 比如,如果要聚的类太大的话。多次聚类也不一定就能找到全局最优。聚类次数一般在50-1000次。

2、K-means损失函数

通俗来讲,K-means的损失函数就是所有样本点与其对应的聚类中心之间的距离(具体公式去参考其他资料)。这里有点模糊的地方就是:K-means是怎么优化这个损失函数的呢?这里显然没有用到梯度下降。在类别分配的时候,对每个样本点计算距离该样本点最近的聚类中心。这个过程就是在最小化损失函数。

3、聚类中心数量的选取法则

肘部法则: 选择一系列聚类中心的值,比如:K=1..10。对每个K进行聚类。得到算法收敛后的损失函数的值。然后可视化一下这些损失函数。如果在某个K时之前,损失函数下减小的很厉害,而在这之后,损失函数减小的很缓慢。整个图像看起来是一个弯着的手肘。

那么这个K通常就是最好的值。然而,很多情况下很难获得这样的图像。那就要根据实际意义进行选取。

根据实际应用场景的意义选择: 根据实际的应用场景具体分析。

4、Cluster Indicator示意图

reference from:CDIMC-net: Cognitive Deep Incomplete Multi-view Clustering Network

二、评估聚类的指标

降维

华罗庚曾说过:“数缺形时少直观,形少数时难入微”。我这才是第二次更新这个博客,就感到没有数学公式,很难触摸到理论的本质。感叹一下,读者莫见怪。

降维中最经典的一种方法就是PCA。它的本质应该是奇异值分解理论。关于奇异值分解理论,我已经忘掉了。后面会补充。。。

一、主成分分析(PCA)

输入:数据集X,维度K

输出:降维之后的数据集Z

超参数:维度K

1、PCA的工作过程

step 1. 数据集预处理 预处理阶段主要的工作一般有两种。一个是特征缩放,将所有的特征放到相同的量纲内。比如:有的是数据特征的数量级是10,有的是1000, 特征缩放就是要将他们都缩放到0到1这个区间内。另一个就是均值标准化,将所有的特征值的平均值处理成0。基本做法就是将特征列减去该特征列的均值。

step 2. 奇异值分解 在一般的数据集中,如果将这个数据集看成是一个矩阵的话,那么每一列就表示一个样本,每一行就表示一个特征(注意下面公式中向量的维度)。在进行奇异值分解前,我们需要求一个协方差矩阵。这个协方差矩阵是n×n的。公式如下:

然后对协方差矩阵进行奇异值分解:[U, S, V]=svd(sigma)。这样得到了三个矩阵。U是n×n的,抽取U的前K列记为UreduceU_{reduce}

step 3. 投影 UreduceU_{reduce}的维度是n×k(同前面的大K)的。投影要做的工作就是:Z=UreduceTXZ=U_{reduce}^T * X(这里的乘法是矩阵乘法)。需要注意的是UreduceU_{reduce}是一个正交矩阵。它可以表示n维空间中一个k维子空间的基,用这个子空间的基乘数据集X,就可以完成将X投影到K维子空间。

此外,Ureduce1=UreduceTU_{reduce}^{-1}=U_{reduce}^T。因此可以得到一个公式:UreduceZ=XU_{reduce} * Z = X(这里的乘法表示矩阵乘法)。这是从低维数据中重构出高维数据的公式。

step 4. 求本次降维的效果 我也没有理解到公式的本质含义。直接上公式吧,幸好这是一个用于评估的指标。是否要定为0.99,依据个人需求。若本次设定的K并没有达到预想的效果,那么可以尝试其他的K。

Check  if  i=1kSi,ii=1nSi,i>=0.99Check\ \ if\ \ \frac{\sum_{i=1}^{k}S_{i,i}}{\sum_{i=1}^{n}S_{i,i}}>=0.99

2、PCA超参数的选择

关于评估指标,我还没理解。这里简单说一下方法:在某个区间[a,b]内依次取K,对每个K重复上面4步。如果遇到满足第4步的指标要求的K,就可以停止迭代了。但是现实是很残酷的。

3、PCA的应用

数据压缩: 将高维数据压缩到低维。一方面可以减少存储空间。另一方面可以加速计算。

数据可视化: 高维数据很难可视化,可以将它降到三维或者两维。利用可视化的图,可以帮助选择聚类的簇数。

4、小建议

1、 应该先使用原始数据进行建模,而不应该在第一次进行建模的时候就考虑使用PCA。如果原始的数据集表现不太好,或者有其他问题,再考虑PCA。

2、 计算降维矩阵UreduceU_{reduce}时只能利用训练数据,不能使用验证数据和测试数据。因为后者适用于选择模型或者测试模的泛化能力的。如果在训练阶段使用了这些数据,那么模型在训练时就见到了测试数据,显然会提供测试性能。这有点像数据泄露。