网站建设课程ppt模板,关于网站建设的书籍,源码网站免费,厦门市规划建设局网站数据降维就是一种对高维度特征数据预处理方法。降维是将高维度的数据保留下最重要的一些特征#xff0c;去除噪声和不重要的特征#xff0c;从而实现提升数据处理速度的目的。PCA算法有两种实现方法#xff1a; 基于特征值分解协方差矩阵实现PCA算法基于SVD分解协方差矩阵实…数据降维就是一种对高维度特征数据预处理方法。降维是将高维度的数据保留下最重要的一些特征去除噪声和不重要的特征从而实现提升数据处理速度的目的。PCA算法有两种实现方法 基于特征值分解协方差矩阵实现PCA算法基于SVD分解协方差矩阵实现PCA算法from sklearn.decomposition import PCApca PCA(n_components 2)X_pca pca.fit_transform(X)
LDA线性判别分析也是一种经典的降维方法LDA是一种监督学习的降维技术也就是说它的数据集的每个样本是有类别输出的。这点和PCA不同。PCA是不考虑样本类别输出的无监督降维技术。LDA的思想可以用一句话概括就是“投影后类内方差最小类间方差最大”。什么意思呢 我们要将数据在低维度上进行投影投影后希望每一种类别数据的投影点尽可能的接近而不同类别的数据的类别中心之间的距离尽可能的大。NMF非负矩阵分解: NMF的基本思想可以简单描述为对于任意给定的一个非负矩阵ANMF算法能够寻找到一个非负矩阵U和一个非负矩阵V使得满足 从而将一个非负的矩阵分解为左右两个非负矩阵的乘积。
from sklearn.decomposition import NMF
nmf NMF(n_components2,init nndsvda,max_iter1000)
# 降维之后的数据
W nmf.fit_transform(X) LLE局部线性嵌入降维算法: 在处理所谓流形降维的时候效果比PCA要好很多。首先所谓流形我们脑海里最直观的印象就是Swiss roll,在吃它的时候喜欢把它整个摊开成一张饼再吃其实这个过程就实现了对瑞士卷的降维操作即从三维降到了两维。 from sklearn.manifold import LocallyLinearEmbeddinglle LocallyLinearEmbedding(n_neighbors10,n_components2)lle.fit(X) 数据降维简介: 降维就是一种对高维度特征数据预处理方法。降维是将高维度的数据保留下最重要的一些特征去除噪声和不重要的特征从而实现提升数据处理速度的目的。
降维算法优点 减少所需的存储空间。加快计算速度(例如在机器学习算法中)更少的维数意味着更少的计算并且更少的维数可以允许使用不适合大量维数的算法。去除冗余特征例如在以平方米和平方公里在存储地形尺寸方面两者一起用没有意义(数据收集有缺陷)。将数据的维数降低到2D或3D可以允许我们绘制和可视化它可能观察模式给我们提供直观感受。太多的特征或太复杂的模型可以导致过拟合。较简单的模型在小数据集上有更强的鲁棒性。
一 降维算法适用性 在许多领域的研究与应用中通常需要对含有多个变量的数据进行观测收集大量数据后进行分析研究寻找规律。多变量大数据集无疑会为研究和应用提供丰富的信息但是也在一定程度上增加了数据采集的工作量。更重要的是在很多情形下多变量之间可能存在相关性从而增加了问题分析的复杂性。如果分别对每个指标进行分析分析往往是孤立的不能完全利用数据中的信息因此盲目减少指标会损失很多有用的信息从而产生错误的结论。 因此需要找到一种合理的方法在减少需要分析的指标同时尽量减少原指标包含信息的损失以达到对所收集数据进行全面分析的目的。由于各变量之间存在一定的相关关系因此可以考虑将关系紧密的变量变成尽可能少的新变量使这些新变量是两两不相关的那么就可以用较少的综合指标分别代表存在于各个变量中的各类信息。
二 数据降维方法
主要的方法是线性映射和非线性映射方法两大类。
线性映射方法的代表方法有PCAPrincipal Component AnalysisLDADiscriminant Analysis。非线性映射方法的代表方法有核方法KernelPCA、流形学习ISOMapLLE。非负矩阵分解NMF是在矩阵中所有元素均为非负数的约束条件之下的矩阵分解方法 。
三 PCA降维
PCAPrincipal Components Analysis即主成分分析是一种图像处理中使用最广泛的数据降维算法。它不仅仅是对高维数据进行降维更重要的是经过降维去除了噪声发现了数据中的模式。PCA把原先的n个特征用数目更少的m个特征取代新特征是旧特征的线性组合这些线性组合最大化样本方差尽量使新的m个特征互不相关。PCA方法通过消除数据的相关性找到一个空间使得各个类别的数据在该空间上能够很好地分离。在下图中有一些离散的二维分布点其中棕色表示一类集合黄色表示另一类集合假设这两个类别可以用特征X和特征Y进行描述由图可知在X轴和Y轴上这两个类别的投影是重叠的表明这些点的两个特征X和Y没有表现出突出的识别性。但是两个类的投影在Z轴上区分度较大显示出很好的识别性。PCA就是这样的一个工具它可以产生非常好的降维效果。PCA的主要思想是将n维特征映射到k维上这k维是全新的正交特征也被称为主成分是在原有n维特征的基础上重新构造出来的k维特征。PCA的工作就是从原始的空间中顺序地找一组相互正交的坐标轴新的坐标轴的选择与数据本身是密切相关的。其中第一个新坐标轴选择是原始数据中方差最大的方向第二个新坐标轴选取是与第一个坐标轴正交的平面中使得方差最大的第三个轴是与第1,2个轴正交的平面中方差最大的。依次类推可以得到n个这样的坐标轴。通过这种方式获得的新的坐标轴我们发现大部分方差都包含在前面k个坐标轴中后面的坐标轴所含的方差几乎为0。于是我们可以忽略余下的坐标轴只保留前面k个含有绝大部分方差的坐标轴。事实上这相当于只保留包含绝大部分方差的维度特征而忽略包含方差几乎为0的特征维度实现对数据特征的降维处理。通过计算数据矩阵的协方差矩阵然后得到协方差矩阵的特征值特征向量选择特征值最大(即方差最大)的k个特征所对应的特征向量组成的矩阵。这样就可以将数据矩阵转换到新的空间当中实现数据特征的降维。
由于得到协方差矩阵的特征值特征向量有两种方法特征值分解协方差矩阵、奇异值分解协方差矩阵所以PCA算法有两种实现方法基于特征值分解协方差矩阵实现PCA算法、基于SVD分解协方差矩阵实现PCA算法。 四 PCA降维原理
4.1. 协方差和散度矩阵
样本均值:
样本方差:
样本X和样本Y的协方差: 由上面的公式我们可以得到以下结论 方差的计算公式是针对一维特征即针对同一特征不同样本的取值来进行计算得到而协方差则必须要求至少满足二维特征方差是协方差的特殊情况。 方差和协方差的除数是n-1,这是为了得到方差和协方差的无偏估计。 协方差为正时说明X和Y是正相关关系协方差为负时说明X和Y是负相关关系协方差为0时说明X和Y是相互独立。Cov(X,X)就是X的方差。 当样本是n维数据时它们的协方差实际上是协方差矩阵(对称方阵)。如: 对于3维数据(x,y,z)。 对于数据X的散度矩阵为Scatter matrix。其实协方差矩阵和散度矩阵关系密切散度矩阵就是协方差矩阵乘以总数据量n-1。因此它们的特征值和特征向量是一样的。这里值得注意的是散度矩阵是SVD奇异值分解的一步因此PCA和SVD是有很大联系。
import numpy as np
A np.random.randint(0,10,size (3,3))
# 协方差
cov np.cov(A,rowvarTrue)
# 散度矩阵
B (A - A.mean(axis 1).reshape(-1,1))
scatter B.dot(B.T)
display(A,cov,scatter)
4.2.特征值分解矩阵原理 特征值与特征向量: 其中λ是特征向量v对应的特征值一个矩阵的一组特征向量是一组正交向量 特征值分解矩阵对于矩阵A有一组特征向量v将这组向量进行正交化单位化就能得到一组正交单位向量。特征值分解就是将矩阵A分解为如下式 其中P是矩阵A的特征向量组成的矩阵则是一个对角阵对角线上的元素就是特征值。
五 SVD分解矩阵原理
是一种因子分解运算将一个矩阵分解为3个矩阵的乘积 3个矩阵: U, Σ 和 V其中U和V是正交矩阵分别称为左奇异值、右奇异值Σ 为奇异值 奇异值分解是一个能适用于任意矩阵的一种分解的方法对于任意矩阵A总是存在一个奇异值分解 full_matrices True 时表示U和V是全矩阵 假设A是一个的矩阵那么得到的U是一个的方阵U里面的正交向量被称为左奇异向量。Σ是一个 的矩阵Σ除了对角线其它元素都为0对角线上的元素称为奇异值。v的转置矩阵是一个 的矩阵它里面的正交向量被称为右奇异值向量。而且一般来讲我们会将Σ上的值按从大到小的顺序排列。 full_matricesFalse 时表示U和V不是全矩阵 假设A是一个的矩阵那么得到的U是一个的方阵U里面的正交向量被称为左奇异向量。Σ是一个的矩阵Σ除了对角线其它元素都为0对角线上的元素称为奇异值。v的转置矩阵是一个的矩阵它里面的正交向量被称为右奇异值向量。而且一般来讲我们会将Σ上的值按从大到小的顺序排列。
六 PCA算法两种实现方式
6.1.基于特征值分解协方差矩阵实现PCA算法 去平均值(即去中心化)即每一位特征减去各自的平均值 计算协方差矩阵 用特征值分解方法求协方差矩阵的特征值与特征向量 对特征值从大到小排序选择其中最大的k个。然后将其对应的k个特征向量分别作为行向量组成特征向量矩阵ev 将数据转换到k个特征向量构建的新空间中即 X_pca
# 1、去中心化
# B X - X.mean(axis 0)
# B[:5]# 2、协方差
# 方差是协方差特殊形式
# 协方差矩阵
V np.cov(B,rowvarFalse,bias True)# 3、协方差矩阵的特征值和特征向量
# 特征值和特征向量矩阵的概念
eigen,ev np.linalg.eig(V)
display(eigen,ev)# 4、降维标准2个特征选取两个最大的特征值所对应的特征的特征向量
# 百分比计算各特征值占权重累加可以
cond (eigen/eigen.sum()).cumsum() 0.98
index cond.argmax()
ev ev[:,:index 1]# 5、进行矩阵运算
pca_result B.dot(ev)# 6、标准化
pca_result (pca_result -pca_result.mean(axis 0))/pca_result.std(axis 0)
pca_result[:5]
6.2.基于SVD分解协方差矩阵实现PCA算法 去平均值 (即去中心化)即每一位特征减去各自的平均值 通过SVD对第一步结果进行奇异值分解 特征值默认从大到小排列选择k个作为降维特征对左奇异值矩阵进行切片即可U[:,:k] 归一化处理无偏差、偏差 无偏估计 总体标准差 样本标准差
from scipy import linalg
from sklearn import datasetsn_components_ 3
X,y datasets.load_iris(return_X_y True)# 1、去中心化
mean_ np.mean(X, axis0)
X - mean_# 2、奇异值分解
U, S, Vt linalg.svd(X, full_matricesFalse)# 3、符号翻转如果为负数那么变成正直
max_abs_cols np.argmax(np.abs(U), axis0)
signs np.sign(U[max_abs_cols, range(U.shape[1])])
U * signs# 4、降维特征筛选
U U[:, :n_components_]# 5、归一化
# U (U - U.mean(axis 0))/U.std(axis 0)
U * np.sqrt(X.shape[0] - 1)
U[:5]
七 LDA线性判别
LDA线性判别分析也是一种经典的降维方法LDA是一种监督学习的降维技术也就是说它的数据集的每个样本是有类别输出的。这点和PCA不同。PCA是不考虑样本类别输出的无监督降维技术。LDA的思想可以用一句话概括就是“投影后类内方差最小类间方差最大”。什么意思呢 我们要将数据在低维度上进行投影投影后希望每一种类别数据的投影点尽可能的接近而不同类别的数据的类别中心之间的距离尽可能的大。 给定训练集样例设法将样例投影到一条直线上使得同类样例的投影尽可能接近异类样例的投影点尽可能原理在对新的样本进行分类时将其投影到同样的这条直线上再根据投影点的位置来确定新样本的类别。
LDA算法实现方式: 计算数据总的散度矩阵 计算数据类内散度矩阵 计算类间散度矩阵 特征值和特征向量计算 筛选特征向量进行矩阵运算返回输出结果
import numpy as np
from sklearn.discriminant_analysis import LinearDiscriminantAnalysis
from sklearn import datasets
# scipy这个模块下的线性代数子模块
from scipy import linalg# 加载数据
X,y datasets.load_iris(return_X_yTrue)# 1、总的散度矩阵
# 协方差
St np.cov(X.T,bias 1)# 2、类内的散度矩阵
# Scatter散点图within内
Sw np.full(shape (4,4),fill_value0,dtypenp.float64)
for i in range(3):Sw np.cov(X[y i],rowvar False,bias 1)
Sw/3# 3、计算类间的散度矩阵
# Scatter between
Sb St - Sw# 4、特征值和特征向量
eigen,ev linalg.eigh(Sb,Sw)
ev ev[:, np.argsort(eigen)[::-1]][:,:2]# 5、删选特征向量进行矩阵运算
X.dot(ev)[:5] 八 NMF非负矩阵分解
NMF的基本思想可以简单描述为对于任意给定的一个非负矩阵ANMF算法能够寻找到一个非负矩阵U和一个非负矩阵V使得满足 从而将一个非负的矩阵分解为左右两个非负矩阵的乘积。 解前后可理解为原始矩阵V的列向量是对左矩阵W中所有列向量的加权和而权重系数就是右矩阵对应列向量的元素故称W为基矩阵H为系数矩阵。
原矩阵V中的一列向量可以解释为对左矩阵W中所有列向量(称为基向量)的加权和而权重系数为右矩阵H中对应列向量中的元素。这种基于基向量组合的表示形式具有很直观的语义解释它反映了人类思维中“局部构成整体”的概念。 虽然NMF是一个很厉害的算法但其实质是加权和我们可以在原理上等效为基本的线性方程。
import numpy as np
from sklearn import datasets
from sklearn.decomposition import NMF# 加载数据
X,y datasets.load_iris(return_X_yTrue)# 声明算法
nmf NMF(n_components2,init nndsvda,max_iter1000)# 降维之后的数据
W nmf.fit_transform(X)
display(W[:5])# NMF另一半矩阵H
H nmf.components_# X ≈ W • H
九 LLE局部线性嵌入降维算法
所谓LLE局部线性嵌入即”Locally Linear Embedding”的降维算法在处理所谓流形降维的时候效果比PCA要好很多。首先所谓流形我们脑海里最直观的印象就是Swiss roll,在吃它的时候喜欢把它整个摊开成一张饼再吃其实这个过程就实现了对瑞士卷的降维操作即从三维降到了两维。降维前我们看到相邻的卷层之间看着距离很近但其实摊开成饼状后才发现其实距离很远所以如果不进行降维操作而是直接根据近邻原则去判断相似性其实是不准确的。
和传统的PCALDA等关注样本方差的降维方法相比LLE关注于降维时保持样本局部的线性特征保持原有拓扑结构由于LLE在降维时保持了样本的局部特征它广泛的用于图像识别高维数据可视化等领域。LLE是非线性降维技术可以说是流形学习方法最经典的算法之一。很多后续的流形学习、降维方法都与LLE有密切联系。 LLE算法认为每一个数据点都可以由其近邻点的线性加权组合构造得到LLE算法主要步骤 寻找每个样本点的k个近邻点 由每个样本点的近邻点计算出该样本点的局部重建权值矩阵 由该样本点的局部重建权值矩阵和其近邻点计算出该样本点的输出值。 # 降维高维数据降成低维的数据# manifold 流形from sklearn.manifold import LocallyLinearEmbeddingfrom sklearn.decomposition import PCAfrom sklearn import datasetsimport matplotlib.pyplot as plt%matplotlib inlinefrom mpl_toolkits.mplot3d.axes3d import Axes3DX,t datasets.make_swiss_roll(n_samples1500,noise0.05,random_state 1024)fig plt.figure(figsize(12,9))# axes3D Axes3D(fig)axes3D fig.add_subplot(projection 3d)axes3D.view_init(7,-80)axes3D.scatter(X[:,0],X[:,1],X[:,2],c t)pca PCA(n_components 2)X_pca pca.fit_transform(X)plt.scatter(X_pca[:,0],X_pca[:,1],c t)lle LocallyLinearEmbedding(n_neighbors10,n_components2)lle.fit(X)X_lle lle.transform(X)plt.scatter(X_lle[:,0],X_lle[:,1],c t)