1. 认识无监督学习
监督学习很容易理解,给一些带有正确答案的训练集,通过最小化 Cost 来调整系统。那么无监督学习是怎么工作的呢?实际上,无监督学习也是通过最小化 Cost 来调优系统的,具体看一个算法。
2. K-means 描述
无监督学习广泛用在分类问题中,K-means分类算法就是一个简单的无监督学习算法。
工作原理是,给出一组数据,使用K-means算法对数据进行 K 个部分的划分。
我们可以很容易的分析出,数据应该分为两类。那么 K-means 算法是如何找出这两类的呢?我们首先随机选两个点,(1)然后计算数据点到我们选的两个点的距离并将数据点归属于距离最近的那个点,(2)计算两个点到它所属点的距离的平方和的均值(其实就是Cost)。重复(1)和(2),直到Cost收敛到我们满意的程序为止。见图:
可以看到运行完算法后,就成功的分类了。
我们将上述算法,以伪代码的方式再描述一遍:
随机初始化 K 个分类点(cluster centroid)Repeat{for i = 1 to mC(i) := index(from 1 to K) of cluster centroid closest to x(i)for k = 1 to Ku(k) := average(mean) of points assigned to cluster k
}
3. K-means 优化
我们随机初始化 K 个分类点的时候,我们需要注意以下事项:
- K < m
- 随机从训练集中选 K 个点作为分类点
- 很明显K-Means容易陷入局部最优的情况,所以我们通常对K-means运行1-100次,并计算 Cost ,然后选择拥有最小 Cost 的那个K个点。
如何确定 K ?容易知道 K 越大时,Cost 越小,那么 K 是越多越好嘛?很明显不是的,我们需要一个适当的 K 值,当我们无法确定的时候,会通过 Elbow 方法来确定 K 的大小。见下图:
也是通过绘图得出,我们选择“肘关节”的K值,因为之后随着K的增大, Cost的变化已经不那么明显。
4.降维
降维就是将数据为维度下降,例如 二维变一维,降维的目的有数据压缩或者数据可视化,两个目的作用都很明显。
4.1主成分分析
为什么叫主成分分析呢?因为多维数据中有很多数据是相近的,就例如一个三维图点图,很有可能数据点都在同一个平面或者附近波动,这个时候我们就可以使用主成分分析对数据进行降维了。下面介绍使用主成分分析的步骤:
1.数据预处理:
通常,在我们使用数据时,如果数据的取值相差很大,我们都会对数据进行正规化处理。
2.计算协方差:
3.计算特征向量:
#Python 中已经计算svd的包
from numpy import linalglinalg.svd(Sigma)
4.获得新特征:
上面的U 是 N*N 矩阵,这个的N是原特征的维度,我们获取新特征的公式是:
Z就是我们获得的新特征,并且是 K 维的。
5.重构数据:
有时候我们需要用到之前n维的数据,所以需要根据Z重新构造出n维的数据。重新的构造的特征并不是跟之前的一样的,而是有一定差异的。
6.如何选择 k (主成分的个数)?
根据上述公式,我们可以知道多少特征是保留的了,如果上式小于等0.1,我们就认为有 90% 的特征保留了下来。这样选择 k 很麻烦,还要计算出 xapproxxapprox ,下面的等价的公式可以更方便的计算出特征保留度。
上述 99%的特征保留了下来。选择k的时候,我们择满足上述不等式条件下尽可能大的 k 值,这里尽可能大是指保留度尽可能大。
7.应用PCA场景:
- 监督学习加速,数据维度降了,自然能够加速
- 数据压缩
- 数据可视化
在我们使用PCA之前,我们要考虑:在未使用PCA前,我们的系统在原数据上表现的如何,只能当表现跟我们预期的不一样时,我们去尝试使用PCA。