1.主成分分析的作用:
(1) 数据的降维, 通过降维可以发现更便于人类理解的特征;
(2) 可视化;
(3) 去噪;
2.主成分分析的原理,(以两个特征为例)
主成分分析:一个非监督的机器学习算法
从图中可以看出,通过简单的只取一个特征来表示样本(将样本映射到特征1上,表示只取特征1;将样本映射到特征2上,表示只取特征2),往往不能很好的来表示样本。虽然达到了降维的目的,但是不能很好的将样本区分开来,使每个样本的“独特性”降低,即样本见得间距变小。
那么,如何找到让这个样本间间距最大的轴?如何定义样本间间距?
使用方差(variance)来定义样本间的间距,方差越大,样本越离散,样本间的间距越大。
由上图可以看出:将样本映射到斜线上,更符合样本以前的分布,且方差也比较大.
x(demean之后的样本)为m*n的矩阵(m为样本的数量,n为样本的特征个数)
w=(w1,w2)(我们想要求的轴的方向)为n维的列向量
目标:使得我们所有的样本映射到w以后,有:,最大 (为样本映射到w后的表示)
由于是一个向量,向量的平方==向量模的平方,
所以目标函数为:
将样本映射到w方向上(w为单位的方向向量)
由于我们对所有的样本(x)进行demean处理,即,所以映射到w方向后,。
所以,目标即为:
用梯度上升法,求得w=(w1,w2,……wn)使得目标函数最大,n为特征的数量;
令:
补充:向量a的平方=a点乘a=向量a的模的平方。向量的点乘可以看作是矩阵中的乘。
3.主成分分析与线性回归的区别
4.求出第一主成分以后,如何求出下一个主成分?
数据进行改变,将数据在第一个主成分上的分量去掉
在新的数据上再求第一主成分。
5.高维数据向低维数据的映射
注意这里的与前边的维度相同,但是并表示的不再是一个矩阵,因为降维的过程中,丢失掉了部分信息(但丢失掉的这部分信息很有可能是噪音)。
6.程序实现时注意的几个事项
mnist.ipynb 中
(1)先下载数据:
from sklearn.datasets import fetch_mldata
mnist = fetch_mldata('MNIST original')
若出现OSErroe,有可能是scikit_learn_data/mldata(默认的文件被放在了cikit_learn_data/mldata中) 中已经存在mnist-original但是被损坏的文件,将该文件删除,重现下载即可
(2)取原始数据90%的信息,可以将原始样本从784维降到87维,
进行KNN分类时,运行速度从原来的51.5 s 降到了664 ms毫秒,速度得到了将近10倍的提升.
识别的准确率从 0.9688 提升到了0.9728, 丢失了一部分信息,但是识别的准确率却更高了, 这说明,数据中可能存在噪音,我们可能是将那些不重要的信息(噪音)丢掉了.
从而也说明了PCA 具有去噪的作用
(3)对于图像, 不用使用standardScalar, 因为只有在数据尺度不同时才使用standard Scalar,而像素点的灰度的尺度相同
(4)sklearn中的KNN算法的实现方法与我们本地封装的KNN的实现方法有略微不同.sklearn中KNN对于样本量比较大的数据,会自动的使用树结构来加快KNN过程.