糖尿病康复,内容丰富有趣,生活中的好帮手!
糖尿病康复 > 主成分分析(PCA)算法实现iris数据集降维

主成分分析(PCA)算法实现iris数据集降维

时间:2022-03-08 02:57:24

相关推荐

主成分分析(PCA)算法实现iris数据集降维

主成分分析(PCA)算法

1.PCA简介:

PCA(Principal Component Analysis),主成分分析,是一种常用的数据降维算法。数据降维是指对高维度特征数据进行处理,保留重要的特征,去除噪声和不必要的特征,以达到提升 数据处理速度的目的。

PCA的主要思想是将原有数据的n维特征映射到k维上(k<n),这k维是全新的正交特征,也被称作主成分。PCA的工作是从原空间中找出一组相互正交的新坐标轴。新坐标轴的选择按照方差最大来进行选择。第一个坐标轴为原始数据中方差最大的方向,第二个坐标轴为与第一个坐标轴平面正交的方差最大的方向,第三个坐标轴为与一、二两个坐标轴平面正交的方差最大的方向,以此类推。可以发现,方差最大的基本包含在前k个坐标轴中,后面的基本方差为0,故我们保留前k个特征维度,以实现数据的降维。

2.方差、协方差、协方差矩阵

样本方差:

每个样本值与全体样本值的平均数之差的平方值的平均数,代表着样本数据的偏离程度。

样本X和样本Y的协方差:

协方差是用于衡量两个变量的总体误差。如果两个变量的变化趋势一致,如X大于自身期望值,Y也大于自身期望值,说明X和Y是正相关关系,则协方差大于0,反之,X和Y是负相关关系,协方差小于0。若协方差等于0,则说明X和Y相互独立。,方差是协方差的特殊情况,Cov(X,X)就是X的方差。

方差和协方差的除数是n-1,是为了得到方差和协方差的无偏估计。

协方差矩阵:

当样本为n维数据时,它的协方差实际就位协方差矩阵(对称方阵)。例如对于三维数据(X,Y,Z),它的协方差就是:

3.PCA算法的两种实现方法:

(1)基于特征值分解协方差矩阵实现PCA算法

输入:数据集X(n维),需要降到k维

1.原始数据进行标准化,均值为0,方差为1

2.计算协方差矩阵Cov

3.计算协方差矩阵的特征值和对应的特征向量

4.对特征值按大小进行排序,选择其中最大的k个。然后将其对应的特征向量分别作为行向量组成特征向量矩阵P

5.将数据转换到由k个特征向量构成的新空间中,即Y=PX

(2)基于SVD分解协方差矩阵实现PCA算法

输入:数据集X(n维),需要降到k维

1.去平均值,每一位特征减去自己的平均值

2.计算协方差矩阵Cov

3.通过SVD(奇异值分解)计算协方差矩阵的特征值和对应的特征向量

4.对特征值按大小进行排序,选择其中最大的k个。然后将其对应的特征向量分别作为列向量组成特征向量矩阵P

5.将数据转换到由k个特征向量构成的新空间中,即Y=PX

4.最大方差理论与最小平方误差理论

对于二维样本点,我们的目标是是求一条直线,并且尽可能使这条直线尽可能更好。

(1)最大方差理论

在信号处理中认为信号具有较大的方差,噪声有较小的方差,信噪比就是信号与噪声的方差比,越大越好。因此我们认为,最好的k维特征是将n维样本点变换为k维后,每一维上的样本方差都尽可能的大,也就是让数据在主轴上投影的方差最大(在我们假设中方差最大的有用信号最大化减少了噪声的影响)。

(2)最小平方误差理论

我们可以使用点到直线的距离d′来度量直线的好坏。

现在有m个样本点x(1),…,x(m),每个样本点为n维。将样本点x(i)在直线上的投影记为x(1)′,那么我们就是要最小化

这个公式称作最小平方误差(Least Squared Error),这样的话使点都尽可能聚集在新的坐标轴周围。

5.PCA算法实现iris数据集降维实例:

from sklearn.neural_network import MLPClassifierfrom sklearn.datasets import load_digitsfrom sklearn.datasets import load_irisfrom sklearn.model_selection import train_test_splitfrom sklearn.metrics import classification_report, confusion_matriximport numpy as npimport matplotlib.pyplot as pltiris = load_iris()x_data = iris.datay_data = iris.targetdef zeroMean(dataMat):meanVal = np.mean(dataMat, axis= 0)newData = dataMat - meanValreturn newData, meanValdef PCA(dataMat, top):#数据中心化newData, meanVal = zeroMean(dataMat)#cov用于求协方差矩阵,参数rowvar = 0说明数据一行代表一个样本covMat = np.cov(newData, rowvar=0)#np.linalg.eig用于求矩阵的特征值和特征向量eigVals, eigVects = np.linalg.eig(np.mat(covMat))#对特征值从小到大排列eigValIndice = np.argsort(eigVals)#得到最大的n个特征值的下标n_eigValIndice = eigValIndice[-1:-(top + 1): -1]#得到下标对应的特征向量n_eigVects = eigVects[:, n_eigValIndice]#低维特征空间的数据lowDDataMat = newData * n_eigVects# print(newData)print(n_eigVects)# print(lowDDataMat)#利用低维度数据来重构数据reconMat = (lowDDataMat * n_eigVects.T) + meanValreturn lowDDataMat, reconMat#将数据降至2维lowDDataMat, reconMat = PCA(x_data, 2)x = np.array(lowDDataMat)[:, 0]y = np.array(lowDDataMat)[:, 1]plt.scatter(x, y, c = y_data)plt.show()

降维后并可视化的结果为:

如果觉得《主成分分析(PCA)算法实现iris数据集降维》对你有帮助,请点赞、收藏,并留下你的观点哦!

本内容不代表本网观点和政治立场,如有侵犯你的权益请联系我们处理。
网友评论
网友评论仅供其表达个人看法,并不表明网站立场。