机器学习及应用 第9章 降维.pptx
- 文档编号:12674189
- 上传时间:2023-06-07
- 格式:PPTX
- 页数:46
- 大小:3.34MB
机器学习及应用 第9章 降维.pptx
《机器学习及应用 第9章 降维.pptx》由会员分享,可在线阅读,更多相关《机器学习及应用 第9章 降维.pptx(46页珍藏版)》请在冰点文库上搜索。
第09章降维,k-近邻学习主成分分析低维嵌入SVD分解,9.1引言,降维(DimensionalityReduction,DR)是指采用线性或者非线性的映射方法将高维空间的样本映射到低维空间中。
降维获得低维空间下的数据等价表示,实现高维数据的可视化呈现。
等价的低维数据更方便存储、处理、计算和使用。
降维能够去除数据噪声、降低算法开销。
降维还可应用于文本分类和数据压缩等领域。
降维可以得到原始数据的简化表示以加速后续处理或者改进输出结果,因此它已经成为很多算法数据进行预处理的重要手段。
9.1.1降维的概念,9.1引言,9.1引言,降维方法可分为线性降维和非线性降维两大类。
线性降维假设构成数据集的各变量间独立无关。
主成分分析(PrincipalComponentAnalysis,PCA)独立成分分析(IndependentComponentAnalysis,ICA)线性判别分析(LinearDiscriminantAnalysis,LDA)非线性降维方法,也称之为流形学习方法(ManifoldLearning),其目标是从高维采样数据中恢复低维流形结构,不改变数据本身的拓扑特性。
基于保持全局结构信息,如等距离映射算法ISOMAP关注局部结构信息,如LLE、LE、HLLE,9.1.2常见算法分类,9.2k-近邻学习,k-近邻(k-NearestNeighbor,kNN):
给定一个训练数据集,对新的输入实例,在训练数据集中找到与该实例最邻近的k个实例,即k个邻居。
如果这k个实例的多数属于某个类,就把该输入实例分类到这个类中。
9.2.1算法实现,kNN算法计算流程如下:
计算每个样本点与测试点的距离;排序后取距离值最小的k个样本点作为k-近邻;获取k-近邻的分类标签并计算各分类出现的次数;找出出现次数最多的分类,返回该值作为测试点的分类结果。
9.2k-近邻学习,实例代码,9.2k-近邻学习,运行效果:
左下角两个点属于B类用蓝色点标识,右上角两个点属于A类用红色标识。
取k值为3时通过kNN算法计算,距离测试点(0.2,0.1)最近的三个点中的两个点都是蓝色,因此测试点也是蓝色,属于B类。
这样的实现方式适合样本数量和特征数量比较少的情况。
假设样本数量为N、特征数量为M,该算法时间复杂度是。
面对大样本和特征数较多的情况,使用KD树、球树训练数据。
以KD树为例,搜索时间复杂度为,适合于样本数量远大于特征数量的kNN搜索。
9.2k-近邻学习,sklearn.neighbors模块集成了k-近邻相关的类,KNeighborsClassifier用做kNN分类树,KNeighborsRegressor用做kNN回归树。
KNeighborsClassifier类的实现原型如下:
9.2.2算法实例,classsklearn.neighbors.KNeighborsClassifier(n_neighbors=5,weights=uniform,algorithm=auto,leaf_size=30,p=2,metric=minkowski,metric_params=None,n_jobs=1,*kwargs):
主要参数如下:
n_neighbors:
整型,默认参数值为5。
邻居数k值。
weights:
字符串或回调函数,默认参数值为uniform。
预测时的权重有:
9.2k-近邻学习,uniform:
所有近邻样本权重都一样;distance:
权重和距离成反比;callable,即回调函数:
该函数的输入是距离数组,输出是同样大小的权重数组。
algorithm:
计算近邻的算法,包括如下四种:
auto,根据传递给fit方法的参数值,尝试选择最优算法;ball_tree,球树实现(BallTree);kd-tree,KD树实现(KDTree);brute,暴力实现。
leafsize:
整型,默认参数值为30。
定义构建KD树或球树时叶子结点数量的阈值。
这个值会影响构建和查询的速度,以及树的存储空间。
metric:
字符串或回调函数,默认参数值为minkowski。
给定树的距离度量方法。
p:
整型,默认参数值为2。
定义闵可夫斯基距离中的p值。
9.2k-近邻学习,实例代码,9.2k-近邻学习,在这个例子中,使用鸢尾花iris数据集作为训练数据集,提取该数据集的前两个特征值以简化样本。
首先创建近邻分类的实例并对数据进行拟合,同时绘制了分类的边界,将不同分类点以不同的颜色显示出来。
最后将训练数据集中的数据用不同颜色的散点显示出来。
9.2k-近邻学习,kNN算法本身简单有效,能处理大规模的数据分类,尤其适用于样本分类边界不明显的情况。
计算量较大且运行时需要大量内存:
对每一个待分类数据都要计算它到全体已知样本的距离,才能求得它的k个最近邻点。
kNN算法的三个基本要素:
(1)k值的选择:
通过交叉验证的方式求出最合适的k值,默认取值为5。
(2)分类决策规则:
通常采用多数表决决定。
在类域间分布不平衡的情况下,采用为k个邻居分配不同权值的方法来改进。
(3)距离度量方法。
9.2.3算法关键,9.3主成分分析,通过某种线性投影,将高维的数据映射到低维的空间中表示,并期望在所投影的维度上数据的方差最大,以此使用较少的数据维度,同时保留住较多的原数据点的特性。
PCA是丢失原始数据信息最少的一种线性降维方式,可以将PCA应用在数据压缩、数据可视化、提升机器学习速度等场景中。
9.3.1算法思想,PCA是将n维特征向量映射到r维上(),映射的过程要求每个维度的样本方差最大化,达到尽量使新的r维特征向量之间互不相关的目的。
这些数据中拥有方差最大的r个维度被称为主成分。
假设有样本数据集,每个样本有n个特征:
。
处理过程如下:
9.3主成分分析,计算样本均值生成去中心化的样本,得到中心化矩阵:
其中,计算S的协方差矩阵:
,即使用SVD奇异值分解方法计算协方差矩阵的特征值和特征向量。
调用方法:
linalg.svd(),矩阵中的特征值排序,选择其中最大的r个,将其对应特征向量作为列向量组成降维矩阵。
将样本点投影到选取的特征向量上,降维后的数据为:
9.3主成分分析,我们使用贡献率来判断选择主成分的个数。
贡献率是指选取的r个特征值总和占全部特征值总和的比重,一般应取85%以上。
公式如下:
9.3.2算法实例,贡献率,scikit-learn提供了主成分分析相关的类sklearn.decomposition,其函数原型如下:
classsklearn.decomposition.PCA(n_components=None,copy=True,whiten=False,svd_solver=auto,tol=0.0,iterated_power=auto,random_state=None),9.3主成分分析,主要参数如下:
n_components:
整型,浮点型,None或者字符串。
保留的主成分个数,亦即保留下来的特征个数n。
copy:
布尔值类型,默认参数值为False。
若为True,将原始训练数据复制一份,算法运行后原始训练数据的值不会有任何改变;若为False,则在原始数据上进行降维计算,运行PCA算法后原始训练数据的值会改变。
whiten:
布尔值类型,默认参数值为False。
白化,使得每个特征具有相同的方差。
从转换后的信号中删除一些信息,提高下游估计值的预测精度。
svd_solver:
字符串。
可以取值auto,full,arpark,或randomized。
以三维的球型数据集为原始数据对象,通过降维方法把它降成二维数据:
9.3主成分分析,实例代码,9.3主成分分析,运行结果如下:
n_components=2.000000主成分方差比例:
0.983182120.00850037主成分方差:
3.784837850.03272285n_components=0.950000主成分方差比例:
0.98318212主成分方差:
3.78483785n_components=0.990000主成分方差比例:
0.983182120.00850037主成分方差:
3.784837850.03272285n_components=mle主成分方差比例:
0.98318212主成分方差:
3.78483785,首先使用scikit提供的make_blobs方法,在指定样本点数量、特征数量、中心点、范围等基础上生成三维球型数据;当n_components=2时,将数据降维到二维,即保留2个主成分;当n_components=0.95时,表示不直接指定降维的维度,而指定降维后的主成分方差占总方差值的比例为95%以上。
此时只保留了1个主成分,其方差为3.78483785、方差占比98.3%。
当n_components=mle,与保留2个主成分的效果一致。
9.3主成分分析,当n_components=0.99时,表示指定降维后的主成分方差占总方差值的比例为99%以上。
此时保留了2个主成分,其方差分别为3.78483785和0.3272285,方差占比为98.3%和0.85%,方差占比之和为99.2%。
使用mplot3d实现三维数据可视化,并利用mplotlib将降维后的数据显示出来。
对比两幅图可以很清楚地看到,PCA降维的过程保留了原始三维图中的4个聚类。
9.4低维嵌入,传统的线性降维方法,如主成分分析PCA,在把高维数据映射到低维空间时通常不能保留原高维数据的内在非线性结构和特征。
非线性的方法如LLE、hessian局部线性嵌入算法HLLE等应运而生。
它们的优点是具有较少的参数需要设置,而且使用非迭代方法求解从而可以避免陷入局部极小。
9.4.1算法原理,LLE算法基本思想是把整个非线性流形分为许多个小块,这些小块由各数据点与它的k个邻居点构成,每个小块可以看作是拥有局部线性结构的。
每个数据点和它的k个邻居点的线性组合系数称为重构权重。
LLE认为所有数据点降到低维后邻居关系不变,包括重构权重也不变。
因此将小块数据线性降维后,再把它们拼接起来,即可构成高维数据的低维表示。
9.4低维嵌入,低维嵌入(LLE)算法大致如下:
(1)假设数据由n个m维样本点=1,2,组成,按照kNN算法计算出每个样本点的k个近邻点向量_=1,2,,目的是利用近邻点_线性重构。
(2)基于损失函数定义出重构误差,其中表示第j个样本点_对于第i个样本点_重构时的贡献量,即重构权重。
=1=1_2(3)将所有样本点从m维空间映射到低维的d维空间中。
原始m维空间中第i个样本点的权值保持不变,用于低维的d维空间中重构输出样本点向量。
同时希望在低维空间中的重构误差最小,即=1=1_2,9.4低维嵌入,9.4.2算法实例,流形学习库在sklearn.manifold包中。
里面实现的流形学习算法包括:
多维尺度变换(MDS)算法、等距映射(ISOMAP)算法、拉普拉斯特征映射(LE)算法以及局部线性嵌入(LLE)算法。
LLE算法对应的类是LocallyLinearEmbedding,其函数原型如下:
classsklearn.manifold.LocallyLinearEmbedding(n_neighbors=5,n_components=2,reg=0.001,eigen_solver=auto,tol=1e-06,max_iter=100,method=standard,hessian_tol=0.0001,modified_tol=1e-12,neighbors_algorithm=auto,random_state=None,n_jobs=1,主要参数如下:
9.4低维嵌入,n_neighbors:
整型。
搜索样本的近邻的个数,默认是5。
n_components:
整型。
流形学习降维到的维数,维度降到2-3维可用于可视化呈现。
reg:
浮点型。
正则化常量,乘以距离矩阵的局部协方差矩阵的迹。
eigen_solver:
字符串,可以取值arpack,dense和auto。
其含义如下:
auto:
算法会为输入数据尝试选择最好的特征分解的方法;dense:
使用标准非稀疏矩阵特征分解方法;arpack:
用于稀疏和非稀疏的矩阵分解,但在稀疏矩阵分解时速度更快。
method:
字符串,可以取值standard,hessian,modified和ltsa。
standard:
使用标准的局部线性嵌入算法;hessian:
使用Hessianeigenmap算法;modified:
使用改进的局部线性嵌入算法;ltsa:
使用局部切线空间对齐算法。
neighbors_algorithm:
字符串,可以取值auto,brute,kd-tree和ball-tree。
9.4低维嵌入,实例代码,9.4低维嵌入,使用sklearn生成的生成瑞士卷曲线数据集,样本点数量为1500。
接下来调用manifold包中的locally_linear_embedding类实现LLE算法。
最后对原始数据、降维结果分别做可视化呈现。
LLE算法对k值选取非常敏感,只有选取了合适的k值参数才能获得较好效果。
(a)原始瑞士卷数据,(b)K=10时LLE降维效果,(c)K=20时LLE降维效果,(c)K=80时LLE降维效果,9.4低维嵌入,9.4.3算法评价,LLE算法要求知道每个样本点的所有k个近邻点权值。
当样本点足够稀疏时,用欧氏距离求得和样本最近的几个点,可能已经包含很大的一片包含不同类样本点的区域,还有很多数据拓扑结构呈现卷曲状。
很可能把不在同一平面的点包含其中,影响降维效果。
局部稀疏线性嵌入算法LSLE是在LLE算法的基础上为解决此类问题产生的。
其它低维嵌入算法,例如HLLE算法则是通过最小化高维流形的曲率,然后再嵌入到相应的低维空间,它通过一个样本数据的局部Hessian矩阵的均值来衡量其流形曲率,由Hessian矩阵的特征向量可以得到低维空间的坐标表示。
9.5SVD分解,矩阵分解技术能从复杂数据中提取重要的特征信息。
它将原始矩阵表示成两个或多个矩阵的乘积,能够用相对较小的数据集来表示原始数据集,其他数据则被视作噪声或冗余信息,从而提高运算效率和推荐精度。
奇异值分解(SingularValueDecomposition,SVD)作为常见的矩阵分解技术,也常应用于降维。
9.5.1SVD算法原理,特征值分解:
=1。
其中,Q是原矩阵A的特征向量组成的矩阵,是特征值构成的对角阵,每一个对角线上的元素就是一个特征值。
利用特征值和特征向量,我们可以还原出原始矩阵。
特征值分解要求矩阵必须是方阵。
奇异值分解是一个能适用于任意的矩阵的一种分解的方法。
9.5SVD分解,假设有一个m行n列的原始矩阵A,对它进行奇异值分解,可以得到三个矩阵,分别是:
、T,=T其中,U称为左奇异向量,V称为右奇异向量,矩阵表示奇异值矩阵。
对于矩阵,除了对角元素不为0,其他元素都为0,并且对角元素是从大到小排列的。
这些对角元素就是奇异值,它对应了原始矩阵A的奇异值,表征着数据集的特征值。
如何将奇异值和特征值对应起来呢?
由于方阵的特征值和特征向量的关系如下:
=将矩阵A的转置乘以A,将会得到一个方阵,求该方阵特征值和特征向量,有:
T=,9.5SVD分解,这里得到的V,就是右奇异向量。
此外,还可以得到:
=1,2=这里的就是上述的奇异值,是矩阵T特征值的平方根。
U就是上述的左奇异向量。
中的奇异值跟特征值类似,在矩阵中按从大到小排列,并且奇异值的减少特别快。
所以可以仅保留比较大的r个奇异值,也就是说数据集中保留r个重要特征,将其余特征当作噪声或冗余信息。
那么,如何确定要保留的奇异值个数r呢?
通常是保留到矩阵奇异值平方和总量的90%为止。
TSVD降维的过程就是舍弃不重要的特征向量的过程,而剩下的特征向量组成的空间即为降维后的空间。
它不仅节省存储量,更能降低计算量。
因此,在隐性语义索引、图像压缩、推荐系统、金融等领域都有应用。
9.5SVD分解,9.5.2算法实例,例1SVD算法实现。
利用线性代数工具箱numpy.linalg的svd函数,实现代码如下:
二维数组输入数据data,SVD函数输出3个矩阵U、S和V,其中U和V是正交矩阵,S由输入矩阵data的奇异值组成。
使用np.diag(S)函数生成完整的奇异值矩阵,将U、S、V三个矩阵相乘还原出来的结果数据,可以看到它和原始矩阵data是十分接近的。
9.5SVD分解,U:
-0.447218670.537287430.00643789-0.50369332-0.35861531-0.24605053-0.86223083-0.14584826-0.292463360.403295820.22754042-0.10376096-0.20779151-0.670043930.3950621-0.58878098-0.50993331-0.059695180.109680530.28687443-0.53164501-0.188709990.191410610.53413013S:
17.713920840.0.0.0.6.391671450.0.0.0.3.097960970.0.0.0.1.32897797,V:
-0.57098887-0.4274751-0.38459931-0.585935260.222797130.51723555-0.82462029-0.05319973-0.674923850.692944720.2531966-0.014032010.410866110.263742380.32859738-0.80848795U*S*V:
5.00000000e+005.00000000e+001.38777878e-155.00000000e+005.00000000e+002.39391840e-153.00000000e+004.00000000e+003.00000000e+004.00000000e+001.09634524e-153.00000000e+00-5.55111512e-161.94289029e-165.00000000e+003.00000000e+005.00000000e+004.00000000e+004.00000000e+005.00000000e+005.00000000e+004.00000000e+005.00000000e+005.00000000e+00,运行结果,9.5SVD分解,例2SVD分解在基于用户推荐的协同过滤系统中的应用利用新用户的评分向量找出相似用户。
原始矩阵的每一行代表不同用户的评价,因此,计算用户相似度就需要计算用户向量之间的距离。
采用SVD对原始数据进行简化,然后在此基础上进行基于用户的协同过滤。
SVD算法计算过后保留了前k个奇异值,那么这个k就是现在向量的长度。
此时,用户的评价向量也要重新生成,在利用SVD算法实现的时候直接用U矩阵代替原始矩阵。
相当于之前所有用户组成的评价向量是A,简化后所有用户组成的向量为U:
0:
k,即U的前k列。
实现的主要步骤如下:
建立“用户-物品”评分矩阵;利用SVD算法分解原始矩阵为三个参数,T;计算目标用户在新坐标下的评分向量;将目标用户评分向量与其他用户向量逐个比较,按相似度从高到低排列;排序计算最近似的结果。
9.5SVD分解,降序索引:
021降序的距离数组:
0.934019720.45085190.25244701,运行结果如下,经过SVD分解降维处理以后,与测试用户最相似的用户是第一行用户,可以将他评价过的物品推荐给测试用户。
9.5SVD分解,例3SVD分解在基于物品推荐的协同过滤系统中的应用基于物品的协同过滤和基于用户的协同过滤(UserCF)在实现原理上非常相似,它从性能和复杂度上比UserCF更优,不同之处在于要计算物品之间的相似度。
算法实现和基于用户的协同过滤略有不同,直接使用V矩阵代替A矩阵。
结合一个电影推荐系统为例,首先寻找用户没有看过的电影,然后通过SVD降维,实现基于物品相似度的推荐。
其主要算法步骤如下:
寻找特定用户没有看过的电影,即在评分矩阵中寻找为0的电影;在没有评价的所有影片中,对每个影片估计一个可能的评分:
利用SVD算法分解原始矩阵为三个参数,T;计算包含了原始矩阵90%信息的奇异值个数r;计算待评分影片在降维空间下的向量;计算待评影片与其他影片间的余弦相似度,对相似度和评分值的乘积求和;归一化相似度乘积和,使得预估评分在0和5之间。
对这些影片按分数从高到底进行排序,返回前N个影片。
9.5SVD分解,实例代码,9.5SVD分解,(9,4.1039196647197578),(6,4.077571965028409),(4,4.0607093807694685),运行结果如下,表示按照影片相似度,优先推荐第9个、第6个、第4个影片。
9.5综合实例,作为无监督学习的一种应用,如果碰到特征维度较高的训练样本,可以考虑使用PCA特征降维方法获取低维度的样本特征,从而实现数据降维和压缩的目的。
接下来以手写体数字图像识别为例来说明PCA算法的使用。
9.6.1PCA主成分分析,9.6综合实例,实现代码,9.6综合实例,实现代码(续上),9.6综合实例,手写体数字图像识别实现过程首先,使用sklearn中自带的手写数字数据集load_digits获得手写数字图像数据并存于digits变量中。
利用train_test_split方法分割数据,并随机选取80%数据作为训练样本x_train,20%作为测试样本y_train;从sklearn.preprocessing里导入数据标准化模块StandardScaler,对训练和测试的特征数据进行标准化。
然后,分别训练两个以支持向量机分类器SVC为基础的手写数字图像识别模型,其中一个模型使用原始维度即64维的像素特征识别,另一个采用PCA降维重构之后的低维特征来识别图像特征,其中n_components设置为10,也就是将64维降到10维。
预测出分类结果后,分别比较两个模型的准确率评分以及分类报告。
最后,展示前100个测试样本数据以及PCA降维后的SVC分类结果,9.6综合实例,TheAccuracyofSVCis0.988888888889classificationreportofSVCprecisionrecallf1-scoresupport01.001.001.002910.981.000.994621.000.970.993731.001.001.003940.961.000.982550.970.970.973760.981.000.994171.001.001.002981.000.980.994491.000.970.9833avg/total0.990.990.99360,运行结果如下,TheAccuracyofPCA_SVCis0.95classificationreportofPCA_SVCprecisionrecallf1-scoresupport01.001.001.002910.980.980.984621.001.001.003730.910.820.863941.000.960.982550.920.950.933760.981.000.994170.971.000.982980.890.910.904490.880.910.9033avg/total0.950.950.95360,9.6综合实例,PCA降维后的SVC分类结果,从结果中可以看到,
- 配套讲稿:
如PPT文件的首页显示word图标,表示该PPT已包含配套word讲稿。双击word图标可打开word文档。
- 特殊限制:
部分文档作品中含有的国旗、国徽等图片,仅作为作品整体效果示例展示,禁止商用。设计者仅对作品中独创性部分享有著作权。
- 关 键 词:
- 机器学习及应用 第9章 降维 机器 学习 应用
![提示](https://static.bingdoc.com/images/bang_tan.gif)