利用PCA实现绿萝数据的降维_第1页
利用PCA实现绿萝数据的降维_第2页
利用PCA实现绿萝数据的降维_第3页
利用PCA实现绿萝数据的降维_第4页
利用PCA实现绿萝数据的降维_第5页
已阅读5页,还剩7页未读, 继续免费阅读

付费下载

下载本文档

版权说明:本文档由用户提供并上传,收益归属内容提供方,若内容存在侵权,请进行举报或认领

文档简介

1、基于PCA的绿萝数据降维 姓名:韩潇 学号:2171404 指导教师:李大威1 .作业任务 对已有的六维的绿萝植株的数据进行降维,要求将数据降低到两维和三维,其中二维数据是由第一、二主元确定,三维数据由第一、二、四主元确定。降维方法要求采用PCA平台推荐采用MATLAB 2 .实现平台及配置 由于第一次作业采用MATLAB实现,所以本次实验改为采用Python实现。设备为MacbookAir,系统版本为macOSHighSierra编辑工具采用Sublime,终端进行调试。Python环境为系统自带的Python2.7,以及后来自行安装的 Python3.6.3。 本次实现涉及到的Python

2、库包括numpy和matplotlib。 3 .算法分析 主成分分析(PCA也称主分量分析,旨在利用降维的思想,把多指标转化为少数几个综合指标。 在统计学中,主成分分析是一种简化数据集的技术。它是一个线性变换。这 个变换把数据变换到一个新的坐标系统中,使得任何数据投影的第一大方差在第一个坐标(称为第一主成分)上,第二大方差在第二个坐标(第二主成分)上,依次类推。主成分分析经常用减少数据集的维数,同时保持数据集的对方差贡献最大的特征。这是通过保留低阶主成分,忽略高阶主成分做到的。这样低阶成分往往能够保留住数据的最重要方面。 PCA的实现主要包含以下几个步骤: 去除数据平均值 计算协方差矩阵 计算

3、协方差矩阵的特征值和特征向量 将特征值进行排序 保留需要的N个主元(特征向量)将数据映射到上述选取的N个主元构建的新空间中 4 .材料分析 观察所给的材料可得,绿萝的数据是一个六维的数据。首先需要做的是对所给的绿萝数据进行读取,并通过有效的分割等将其转换为矩阵的形式以便于后续对其进行求协方差矩阵的操作。在这里可知所求得的协方差矩阵为一个6x6的矩 阵,numpy提供了一系列可以解决计算的函数,直接调用即可。通过合适的排序 取特征值,再取到对应的特征向量即可完成降维。 在降维后数据的绘制方面,采用了matplotlib这个库,可以对降维后的二维、三维数据进行绘制,只要编写好绘制的函数即可。 5

4、.实现步骤 5.1 数据的读取和矩阵化 在Python中对绿萝txt文件的读取可以先采用open()函数打开,再调用readlines()进行遍历,但是遍历过后的数据都默认是字符串类型,再通过map()函数将其转换为float类型,再将其矩阵化即可。编写的函数如下。 fromnumpyimport* defloadData(fileName): plants=open(fileName)#读取文件 plantsArr=line.strip().split()forlineinplants.readlines()#分割遍历 finalArr=list(map(float,line)forline

5、inplantsArr returnmat(finalArr) 在终端进行检查,结果如下图shape(所到所得的结果是符合要求的#矩阵化 5.1所示,绿萝植株的数据为test.txto通过 PytnorPytnor- -aashaash- -Pr&Pr&EDxEDx2424 Troceback(moTroceback(mo与七recentcalllasQrecentcalllasQ:FileFileM Mstdir&fromrurpyimport*shapeshape,isnotdefinedfromrurpyimport*shapefinalMot)C23073,6)finalMot)C23

6、073,6) 图5.1数据矩阵化结果 5.2 数据的降维 在上一步骤中已经将数据矩阵化了,这一步需要对其进行降维。根据算法,先计算各个维度的均值并在原基础上将其减去,即中心化操作。通过mean()函 数即可完成需求,将参数axis设置为0,确保是对每一列求均值。通过cov()求取协方差矩阵,设置参数rowvar为0,确保每一行为一个样本。后面再求取相应的特征值、特征向量进行相关的操作即可。编写的函数如下。 defpca(finalMat): avgVals=mean(finalMat,axis=0)#均值 argRemoved=finalMat-avgVals#中心化 covMat=cov(a

7、rgRemoved,rowvar=0)#协方差矩阵eigVals,eigVects=linalg.eig(mat(covMat)#特征值、特征向量eigValInd=argsort(eigVals)#排序,默认为从小到大 eigValInd1=eigValInd:-3:-1取前两个特征值得索引值 eigValInd2=eigValInd5,eigValInd4,eigValInd2#取1、2、4索引值 newEigVects=eigVects:,eigValInd1#取1、2主元fsnawngwpnyijunfsnawngwpnyijun:*-kncll2SScdmlkncll2SScdml

8、ferxaxirxgiftenyijun;nlhxllZBSudpeaferxaxirxgiftenyijun;nlhxllZBSudpea fengkuangwenyljun:pcohxllZStpython3fengkuangwenyljun:pcohxllZStpython3 Python3.6,3(v3.63:2cSfcd86efl,Oct32617,Python3.6,3(v3.63:2cSfcd86efl,Oct32617,%:襄闻2 2 CGCC4.2.1CAppleInc.buildCGCC4.2.1CAppleInc.build5666156661(dbt(dbt幼ondar

9、winondarwin Typehelp,copyrightTypehelp,copyright1111,credits,credits1 1or*Hcenseor*HcenseF Fformareinformcrticri,iirportpeaformareinformcrticri,iirportpea FinalMcitFinalMcit- -pcpcaJoadDataJoadDat口(七乜txt)txt) finalMatmatrix(finalMatmatrix(酊电5gg5gg73,73, 6,6,0642690642691 1 L L另45gs45gs6%6% 配2 2聊5,0,

10、122989,5,0,122989,0.124539,0.124539, 0.56700.5670,567,567丸567567 , ,- -0.374667,0.374667,-配3Z6633Z663, , ,5245,5245蚪- -0.582343,0.582343, , ,- -037W2037W2f f253346,253346, -0,877191J - -04775629,04775629, .0657.0657砥 0,07971,0,07971,电埼侬%wshapeCfinolMat)wshapeCfinolMat) 0 0.契1116,1116,03122031221 11.

11、1. 3U433U43 丸MS0.82MS0.8240.8?440.8?4 .。.214745,.214745, 也85428J,85428J, , ,0.34*90.34*9. .0.8302S3,0.8302S3, ,。力54ft54ft41,41,。8 8部3 3跳, - -0.473377,0.473377, - -0.447S1L0.447S1L 电41774177旃1)1) newEigVects2=eigVects:,eigValInd2#取1、2、4主元 newDataMat=argRemoved*newEigVects#降维 newDataMat2=argRemoved*ne

12、wEigVects2#降维 returnnewDataMat,newDataMat2 在终端中对降维的结果进行验证查看,结果如下图5.2所示。可以看到数据 的维度已经被降到2维和3维 - -ym|/pcaym|/pcaPythonPythonbashbashProProBO24BO24 SyntdiErrorSyntdiError: :invalidcharorterinvalidcharorterininidentifierrewOatidentifierrewOat岫七,七岫tNtN- -pea.paKfinalMat)pea.paKfinalMat)llMrtOatMrtOat业上 vt

13、rix(C0,3vtrix(C0,379B80S79B80St t比M31875LM31875LC C乱2323痴哭即0.5BW349J,C0.0.5BW349J,C0.招185185口*。,2691W242691W24, , C C- -0.1S31WSB,0.1S31WSB,匚 0.293+860.293+86f f4h4hdpKmw(WtaMat)C23073,2)dpKmw(WtaMat)C23073,2) lnewOatcMjtZmatrixlnewOatcMjtZmatrix(匚0,37913888,0,37913888, :%23&6%23&6例3,3,C9.381851141C

14、9.381851141 - -0.896824Z5,0.896824Z5, 9.9051433Z)9.9051433Z) 也M031875,0,1690597,M031875,0,1690597,蜕兜圾349,0.1X23431349,0.1X23431机269100Z4,269100Z4,016723069016723069 C C- -0.0.1S3WS6.1S3WS6.910848910848次匚3232躺0707码-叽8968289682但,C C- -0.0.293+36,293+36,- -0,90514332,0,90514332, C23C73C23C73, ,力 0.1377

15、4429,0.13774429,0:40:42 2浓町:0.14111+34)0.14111+34) 图5.2降维后的数据 5.3降维后数据的可视化 在完成了上述两个步骤以后,数据的降维操作已经完成了,接下来就是对降维后的数据进行可视化操作。在这一步中采用matplotlib这个库,matplotlib是 Python中一个可以实现强大的绘图功能的库,本次作业中只需要使用2维和3 维的散点图绘制功能。在终端通过Python的pip方法将库install。 在本次作业的实现中,编写了两个函数去分别绘制两种类型的图,其中二维 图像的绘制函数如下。 defplotPCAI(newDataMat):

16、importmatplotlib importmatplotlib.pyplotaspltnewDataMat=array(newDataMat) xcord1=;ycord1=#构建两个空的列表以存储横纵坐标 foriinrange(n1):#遍历,取出坐标轴的值 xcord1.append(newDataMati,0);ycord1.append(newDataMati,1) plt.scatter(xcord1,ycord1,s=0.1,c=blue,marker=A) plt.title(PCA-2D) plt.show() 在调整绘制的过程中,将scatter。的s的值调至较小的值,

17、这样使得点比较 小,可视化效果更好,颜色设置为蓝色,用A”去标记点的位置。在终端中调用 函数,过程如下图5.3,得到的图像如图5.4 一/门/口已口PythonPython- -hashhash- - -ProPro SyntaxErrorrinvalidchcrocteriniderttifierSyntaxErrorrinvalidchcrocteriniderttifierll七2 2- -pcapca(RnalMat)pcapca(RnalMat) neMDaUMitmatnixCtCg.37913neMDaUMitmatnixCtCg.37913跚8,0318751,8,031875

18、1, 10.2386410.23864骊3,3,& &583293491,583293491, 0 0,38155114,38155114,0,0,2691002426910024h h*1 1 ai5ai5型做58,58, C C- -0.280e773,0.280e773,- -e.89682423,e.89682423,乱293486,293486,- -0.90514332J)0.90514332J)shqpeneiMJatcMat)C23073,2)shqpeneiMJatcMat)C23073,2) triKtriKW31875037913fi8B,8,W31875, ,0.160

19、5970.160597, , C0.23864983,C0.23864983,.5812A349,.5812A349,吼74dzM74dzM为, Cg.381E5U4,Q.26910024Cg.381E5U4,Q.269100241 10.16723590.1672359; - -Q.919S04&3,0.1J77+4Z9,Q.919S04&3,0.1J77+4Z9,- -0.23007763,0.23007763,- -fi.89682423,0.1fi.89682423,0.1- -W22033,W22033,匚-心293486,293486,- -0,%0,%”4332,0.U111W)

20、lshcpeCnew”4332,0.U111W)lshcpeCnewDatrWatQ3073,DatrWatQ3073,笏llpeaplatPCAl(nwDatcWfft)peaplatPCAl(nwDatcWfft)n1=shape(newDataMat)0 #获取样本的个数 图5.4二维数据的可视化 三维数据的绘制和二维数据的绘制基本一致,有变化的地方是需要导入三维绘图的模块,同时需要取出三个坐标轴的数据用于绘制。三维数据的可视化函数如下。 defplotPCA2(newDataMat2): importmatplotlib importmatplotlib.pyplotasplt fro

21、mmpl_toolkits.mplot3dimportAxes3D frommatplotlibimportstyle style.use(ggplot) fig=plt.figure() ax1=fig.add_subplot(111,projection=3d)#添力口3D子图 newDataMat2=array(newDataMat2) n2=shape(newDataMat2)0#取数据个数 xcord2=;ycord2=;zcord2=foriinrange(n2): xcord2.append(newDataMat2i,0);ycord2.append(newDataMat2i,1

22、);zcord 2.append(newDataMat2i,2)#遍历,确定各个数据坐标 ax1.scatter(xcord2,ycord2,zcord2,c=g,marker=o,s=0.1) ax1.set_xlabel(xaxis) ax1.set_ylabel(yaxis) ax1.set_zlabel(zaxis) plt.title(PCA-3D) plt.show() 图像上的各个点用o”标记,颜色设置为绿色。终端命令如下图5.5,输出三 维图像如下组图5.6 - -Jrnl/pcaJrnl/pcaPythonPythonbahbahProPro8 8垃2424 0.137744

23、2900.137744290, e.ie.i- -wzzasfia10.141114343Jwzzasfia10.141114343J lshapeCnewDa2J(23073,3)lpcolshapeCnewDa2J(23073,3)lpco. .platPCAlCnpwOcitcMct)abjcplatPCAlCnpwOcitcMct)abjc1561iClcssFIFinderSyncExtensionHostisinplenentedinboth/Sys1561iClcssFIFinderSyncExtensionHostisinplenentedinboth/System/Librc

24、ry/PrivateFraiewrk/FinderKit.frxwework/tem/Librcry/PrivateFraiewrk/FinderKit.frxwework/FincterKitFincterKit(板Ube7fUbe7f。花 )and/Systefn/Library/PrivateFrameworks/FilePrwand/Systefn/Library/PrivateFrameworks/FilePrwLder.frcmework/OverridSurdles/FinderSyncCollabartztionder.frcmework/OverridSurdles/Find

25、erSyncCollabartztionFi1ePraviderOverride.bundla/Corrtents/MacQS/FinderSyrcCollaixirationFiLeProvitterCkerride0nlliaalcd8JFi1ePraviderOverride.bundla/Corrtents/MacQS/FinderSyrcCollaixirationFiLeProvitterCkerride0nlliaalcd8JT TOneofth*twowillbauOneofth*twowillbau号WhichisundWhichisund总fifined.lpeaned.l

26、pea platPCAl(newOsU*kHplatPCAl(newOsU*kH; lpea,platPCA2CneiACatc*tat2)lpea,platPCA2CneiACatc*tat2)00.1500.15打0458,0458,-凯潮IA7IA7加, - -0.2934860.293486, ,shapeCnershapeCnerfkitfWatfkitfWat)(23073,2)(23073,2) matrix(Ematrix(Ea a.37913888,.37913888, L L部23864983,ft.Bfi23864983,ft.BfilflflSlU,lSlU, - -0

27、 0田1g1g孙3 3刃,4 4.前6 6柩423L0.905143323423L0.905143323 0.0.34d31875,34d31875,0.0.58120349,58120349,凡词00弭 0.165905971,0.0.165905971,0.1742343Jj1742343Jj乱36723672黜汨, 9.153359.15335瓦 - -0.2007763,0.2007763, - -0.91080483,0.91080483,4.8968Z4Z3,-%男514332,514332, 簧G中Q三胤x-0.769347ry-1.19168 Figure1 PCA-3D Fi

28、gure1 PCA-3D 簧a中Q三EI x-0.775734.y-0.663285,z-0.2fl501 z-0.25993 飞髅25c;蕾 x=x=- -0.2334880.233488, ,y=1.y=1.13526,13526,z=z=- -0 0282843282843 FQLre1 PCA-3D PCA-3D _0,2 台66中Q三图 x-1.17354y-0.e32899,z-0.367247 图5.6三维数据的可视化组图 6.实现过程中遇到的问题 在本次降维作业的实现过程中,问题主要出现在后续的图像绘制方面, 统自带的Python2.7的环境下,只能绘制出二维图像,在绘制三维图

29、像时,出现 如下图6.1所示的错误。 LastLoginLastLogin:TueDec519:35:41TueDec519:35:41ononttyQttyQ fenqkuingwenyijin:fenqkuingwenyijin:- -hx11281cdmlhx11281cdml fenqkuingwenyijixifenqkuingwenyijixi:mlhx!12SScdpeamlhx!12SScdpea fengkuwenyijinfengkuwenyijin:peaMUpeaMU驾3python3python Python2.7.10defaulPython2.7.10defaul七,Jul152017,17:16:57)Jul152017,17:16:57) GCC4.2.1ConpatibleAppleLLVMGCC4.2.1ConpatibleAppleLLVM9.9.最。(clang(clang- -900.0431)ondanvin900.0

温馨提示

  • 1. 本站所有资源如无特殊说明,都需要本地电脑安装OFFICE2007和PDF阅读器。图纸软件为CAD,CAXA,PROE,UG,SolidWorks等.压缩文件请下载最新的WinRAR软件解压。
  • 2. 本站的文档不包含任何第三方提供的附件图纸等,如果需要附件,请联系上传者。文件的所有权益归上传用户所有。
  • 3. 本站RAR压缩包中若带图纸,网页内容里面会有图纸预览,若没有图纸预览就没有图纸。
  • 4. 未经权益所有人同意不得将文件中的内容挪作商业或盈利用途。
  • 5. 人人文库网仅提供信息存储空间,仅对用户上传内容的表现方式做保护处理,对用户上传分享的文档内容本身不做任何修改或编辑,并不能对任何下载内容负责。
  • 6. 下载文件中如有侵权或不适当内容,请与我们联系,我们立即纠正。
  • 7. 本站不保证下载资源的准确性、安全性和完整性, 同时也不承担用户因使用这些下载资源对自己和他人造成任何形式的伤害或损失。

最新文档

评论

0/150

提交评论