R语言实现常用的5种分析方法(主成分+因子+多维标度+判别+聚类

2023-11-17


来源 | R友舍

R语言多元分析系列之一:主成分分析

 

主成分分析(principal components analysis, PCA)是一种分析、简化数据集的技术。它把原始数据变换到一个新的坐标系统中,使得任何数据投影的第一大方差在第一个坐标(称为第一主成分)上,第二大方差在第二个坐标(第二主成分)上,依次类推。主成分分析经常用减少数据集的维数,同时保持数据集的对方差贡献最大的特征。这是通过保留低阶主成分,忽略高阶主成分做到的。这样低阶成分往往能够保留住数据的最重要方面。但是在处理观测数目小于变量数目时无法发挥作用,例如基因数据。

 

R语言中进行主成分分析可以采用基本的princomp函数,将结果输入到summary和plot函数中可分别得到分析结果和碎石图。但psych扩展包更具灵活性。

 

一 、选择主成分个数

 

选择主成分个数通常有如下几种评判标准:

 

根据经验与理论进行选择

 

根据累积方差贡献率 ,例如选择使累积方差贡献率达到80%的主成分个数。

 

根据相关系数矩阵的特征值,选择特征值大于1的主成分。

 

另一种较为先进的方法是平行分析(parallel analysis)。该方法首先生成若干组与原始数据结构相同的随机矩阵,求出其特征值并进行平均,然后和真实数据的特征值进行比对,根据交叉点的位置来选择主成分个数。我们选择USJudgeRatings数据集举例,首先加载psych包,然后使用fa.parallel函数绘制下图,从图中可见第一主成分位于红线上方,第二主成分位于红线下方,因此主成分数目选择1。

 

640?wx_fmt=jpeg

 

二 、提取主成分

 

640?wx_fmt=jpeg

从上面的结果观察到,PC1即观测变量与主成分之间的相关系数,h2是变量能被主成分解释的比例,u2则是不能解释的比例。主成分解释了92%的总方差。注意此结果与princomp函数结果不同,princomp函数返回的是主成分的线性组合系数,而principal函数返回原始变量与主成分之间的相关系数,这样就和因子分析的结果意义相一致。

 

三 、旋转主成分

 

旋转是在保持累积方差贡献率不变条件下,将主成分负荷进行变换,以方便解释。成分旋转这后各成分的方差贡献率将重新分配,此时就不可再称之为“主成分”而仅仅是“成分”。旋转又可分为正交旋转和斜交旋转。正交旋转的流行方法是方差最大化,需要在principal中增加rotate='varimax'参数加以实现。也有观点认为主成分分析一般不需要进行旋转。

 

四、计算主成分得分

 

主成分得分是各变量的线性组合,在计算出主成分得分之后,还可以将其进行回归等做进一步分析处理。但注意如果输入数据不是原始数据时,则无法计算主成分得分。我们需要在principal中增加score=T的参数设置,结果将存放在结果的score元素中。

 

R语言多元分析系列之二:探索性因子分析

 

探索性因子分析(Exploratory Factor Analysis,EFA)是一项用来找出多元观测变量的本质结构、并进行处理降维的技术。因而EFA能够将具有错综复杂关系的变量综合为少数几个核心因子。EFA和PCA的区别在于:PCA中的主成分是原始变量的线性组合,而EFA中的原始变量是公共因子的线性组合,因子是影响变量的潜在变量,变量中不能被因子所解释的部分称为误差,因子和误差均不能直接观察到。进行EFA需要大量的样本,一般经验认为如何估计因子的数目为N,则需要有5N到10N的样本数目。

 

虽然EFA和PCA有本质上的区别,但在分析流程上有相似之处。下面我们用ability.cov这个心理测量数据举例,其变量是对人的六种能力,例如阅读和拼写能力进行了测验,其数据是一个协方差矩阵而非原始数据。R语言中stats包中的factanal函数可以完成这项工作,但这里我们使用更为灵活的psych包。

 

一、选择因子个数

 

一般选择因子个数可以根据相关系数矩阵的特征值,特征值大于0则可选择做为因子。我们仍使用平行分析法(parallel analysis)。该方法首先生成若干组与原始数据结构相同的随机矩阵,求出其特征值并进行平均,然后和真实数据的特征值进行比对,根据交叉点的位置来选择因子个数。根据下图我们可以观察到特征值与红线的关系,有两个因子都位于红线上方,显然应该选择两个因子。

 

640?wx_fmt=jpeg

 

二、提取因子

 

psych包中是使用fa函数来提取因子,将nfactors参数设定因子数为2,rotate参数设定了最大化方差的因子旋转方法,最后的fm表示分析方法,由于极大似然方法有时不能收敛,所以此处设为迭代主轴方法。从下面的结果中可以观察到两个因子解释了60%的总方差。Reading和vocabulary这两个变量于第一项因子有关,而picture、blocks和maze变量与第二项因子有关,general变量于两个因子都有关系。

 

640?wx_fmt=jpeg

如果采用基本函数factanal进行因子分析,那么函数形式应该是factanal(covmat=correlations,factors=2,rottion='varimax'),这会得到相同的结果。此外,我们还可以用图形来表示因子和变量之间的关系

 

640?wx_fmt=jpeg

三、因子得分

 

得到公共因子后,我们可以象主成分分析那样反过来考察每个样本的因子得分。如果输入的是原始数据,则可以在fa函数中设置score=T参数来获得因子得分。如果象上面例子那样输入的是相关矩阵,则需要根据因子得分系数来回归估计。

 

640?wx_fmt=jpeg

参考资料:R in Action

 

R语言多元分析系列之三:多维标度分析

 

 

多维标度分析(MDS)是一种将多维空间的研究对象简化到低维空间进行定位、分析和归类,同时又保留对象间原始关系的数据分析方法。

 

设想一下如果我们在欧氏空间中已知一些点的座标,由此可以求出欧氏距离。那么反过来,已知距离应该也能得到这些点之间的关系。这种距离可以是古典的欧氏距离,也可以是广义上的“距离”。MDS就是在尽量保持这种高维度“距离”的同时,将数据在低维度上展现出来。从这种意义上来讲,主成分分析也是多维标度分析的一个特例。

 

一、距离的度量

 

多元分析中常用有以下几种距离,即绝对值距离、欧氏距离(euclidean)、马氏距离(manhattan)、 两项距离(binary)、明氏距离(minkowski)。在R中通常使用disk函数得到样本之间的距离。MDS就是对距离矩阵进行分析,以展现并解释数据的内在结构。

 

在经典MDS中,距离是数值数据表示,将其看作是欧氏距离。在R中stats包的cmdscale函数实现了经典MDS。它是根据各点的欧氏距离,在低维空间中寻找各点座标,而尽量保持距离不变。

 

非度量MDS方法中,“距离"不再看作数值数据,而只是顺序数据。例如在心理学实验中,受试者只能回答非常同意、同意、不同意、非常不同意这几种答案。在这种情况下,经典MDS不再有效。Kruskal在1964年提出了一种算法来解决这个问题。在R中MASS包的isoMDS函数可以实现这种算法,另一种流行的算法是由sammon函数实现的。

 

二、经典MDS

 

下面我们以HSAUR2包中的watervoles数据来举例。该数据是一个相似矩阵,表示了不同地区水田鼠的相似程度。首先加载数据然后用cmdscales进行分析。

 

640?wx_fmt=jpeg

下面计算前两个特征值在所有特征值中的比例,这是为了检测能否用两个维度的距离来表示高维空间中距离,如果达到了0.8左右则表示是合适的。

 

640?wx_fmt=jpeg

然后从结果中提取前两个维度的座标,用ggplot包进行绘图。

 

640?wx_fmt=jpeg

 

三、非度量MDS

 

第二例子中的数据是关于新泽西州议员投票行为的相似矩阵,这里我们用MASS包中的isoMDS函数进行分析

 

640?wx_fmt=jpeg

参考资料:

 

A Handbook of Statistical Analyses Using R

 

多元统计分析及R语言建模

 

R语言多元分析系列之四:判别分析

 

判别分析(discriminant analysis)是一种分类技术。它通过一个已知类别的“训练样本”来建立判别准则,并通过预测变量来为未知类别的数据进行分类。

 

判别分析的方法大体上有三类,即Fisher判别、Bayes判别和距离判别。Fisher判别思想是投影降维,使多维问题简化为一维问题来处理。选择一个适当的投影轴,使所有的样品点都投影到这个轴上得到一个投影值。对这个投影轴的方向的要求是:使每一组内的投影值所形成的组内离差尽可能小,而不同组间的投影值所形成的类间离差尽可能大。Bayes判别思想是根据先验概率求出后验概率,并依据后验概率分布作出统计推断。距离判别思想是根据已知分类的数据计算各类别的重心,对未知分类的数据,计算它与各类重心的距离,与某个重心距离最近则归于该类。

 

640?wx_fmt=jpeg

 

一.线性判别

 

当不同类样本的协方差矩阵相同时,我们可以在R中使用MASS包的lda函数实现线性判别。lda函数以Bayes判别思想为基础。当分类只有两种且总体服从多元正态分布条件下,Bayes判别与Fisher判别、距离判别是等价的。本例使用iris数据集来对花的品种进行分类。首先载入MASS包,建立判别模型,其中的prior参数表示先验概率。然后利用table函数建立混淆矩阵,比对真实类别和预测类别。

 

640?wx_fmt=jpeg

 

二.二次判别

 

当不同类样本的协方差矩阵不同时,则应该使用二次判别。

 

model2=qda(Species~.,data=iris,cv=T)

 

这里将CV参数设置为T,是使用留一交叉检验(leave-one-out cross-validation),并自动生成预测值。这种条件下生成的混淆矩阵较为可靠。此外还可以使用predict(model)$posterior提取后验概率。

 

在使用lda和qda函数时注意:其假设是总体服从多元正态分布,若不满足的话则谨慎使用。

 

参考资料:

 

Modern Applied Statistics With S

 

Data_Analysis_and_Graphics_Using_R__An_Example_Based_Approach

 

R语言多元分析系列之五:聚类分析

 

聚类分析(Cluster Analysis)是根据“物以类聚”的道理,对样品或指标进行分类的一种多元统计分析方法,它是在没有先验知识的情况下,对样本按各自的特性来进行合理的分类。

 

聚类分析被应用于很多方面,在商业上,聚类分析被用来发现不同的客户群,并且通过购买模式刻画不同的客户群的特征;在生物上,聚类分析被用来动植物分类和对基因进行分类,获取对种群固有结构的认识;在因特网应用上,聚类分析被用来在网上进行文档归类来修复信息。

 

聚类分析有两种主要计算方法,分别是凝聚层次聚类(Agglomerative hierarchical method)和K均值聚类(K-Means)。

 

一、层次聚类

 

层次聚类又称为系统聚类,首先要定义样本之间的距离关系,距离较近的归为一类,较远的则属于不同的类。可用于定义“距离”的统计量包括了欧氏距离(euclidean)、马氏距离(manhattan)、 两项距离(binary)、明氏距离(minkowski)。还包括相关系数和夹角余弦。

 

层次聚类首先将每个样本单独作为一类,然后将不同类之间距离最近的进行合并,合并后重新计算类间距离。这个过程一直持续到将所有样本归为一类为止。在计算类间距离时则有六种不同的方法,分别是最短距离法、最长距离法、类平均法、重心法、中间距离法、离差平方和法。

 

下面我们用iris数据集来进行聚类分析,在R语言中所用到的函数为hclust。首先提取iris数据中的4个数值变量,然后计算其欧氏距离矩阵。然后将矩阵绘制热图,从图中可以看到颜色越深表示样本间距离越近,大致上可以区分出三到四个区块,其样本之间比较接近。

 

640?wx_fmt=jpeg

然后使用hclust函数建立聚类模型,结果存在model1变量中,其中ward参数是将类间距离计算方法设置为离差平方和法。使用plot(model1)可以绘制出聚类树图。如果我们希望将类别设为3类,可以使用cutree函数提取每个样本所属的类别。

 

640?wx_fmt=jpeg

为了显示聚类的效果,我们可以结合多维标度和聚类的结果。先将数据用MDS进行降维,然后以不同的的形状表示原本的分类,用不同的颜色来表示聚类的结果。可以看到setose品种聚类很成功,但有一些virginica品种的花被错误和virginica品种聚类到一起。

 

640?wx_fmt=jpeg

二、K均值聚类

 

K均值聚类又称为动态聚类,它的计算方法较为简单,也不需要输入距离矩阵。首先要指定聚类的分类个数N,随机取N个样本作为初始类的中心,计算各样本与类中心的距离并进行归类,所有样本划分完成后重新计算类中心,重复这个过程直到类中心不再变化。

 

在R中使用kmeans函数进行K均值聚类,centers参数用来设置分类个数,nstart参数用来设置取随机初始中心的次数,其默认值为1,但取较多的次数可以改善聚类效果。model2$cluster可以用来提取每个样本所属的类别。

 

model2=kmeans(data,centers=3,nstart=10)

 

使用K均值聚类时需要注意,只有在类的平均值被定义的情况下才能使用,还要求事先给出分类个数。一种方法是先用层次聚类以决定个数,再用K均值聚类加以改进。或者以轮廓系数来判断分类个数。改善聚类的方法还包括对原始数据进行变换,如对数据进行降维后再实施聚类。

 

cluster扩展包中也有许多函数可用于聚类分析,如agnes函数可用于凝聚层次聚类,diana可用于划分层次聚类,pam可用于K均值聚类,fanny用于模糊聚类。

640?wx_fmt=png

本文内容由网友自发贡献,版权归原作者所有,本站不承担相应法律责任。如您发现有涉嫌抄袭侵权的内容,请联系:hwhale#tublm.com(使用前将#替换为@)

R语言实现常用的5种分析方法(主成分+因子+多维标度+判别+聚类 的相关文章

  • 社会中的学费

    上学期间 我们交学费是为了学习课本知识 我们也确实从中学到了很多有用的东西 这些学费我们觉得是物有所值的 当我们踏入社会的时候 我们也是要向社会交一定的学费 这种学费 我们能够学到的东西就是社会经验 这是东西是无形的 我们总会觉得自己的钱没
  • ImportError: /lib/x86_64-linux-gnu/libstdc++.so.6: version `GLIBCXX_3.4.29‘ not foun

    复现代码过程中 无意间出现这个问题 本以为很好解决 没想到还是花了我好几个小时的时间 总结一下趴 我的环境是cuda11 3 python3 9 pytoch1 10 问题如图 图1 bug示意图 在网上找了很多答案 要么就是没说清的 要么
  • HTTPS网络编程——S代表SSL协议也叫TLS协议

    参考 HTTPS简介以及SSL协议详解 地址 https qingmu blog csdn net article details 108209248 spm 1001 2014 3001 5502 目录 1 HTTPS简介 2 SSL协议
  • stm32 的 ESP8266 wifi 模块 (ESP - 12s) 的使用

    1 ESP8266 的器件介绍 2 ESP2866外设 的引脚 3 我所用的的ESP2866 的引脚图 4 代码 编程的串口 5 wifi 的指令 1 AT 测试指令 2 AT RST 重启模块 3 AT GMR 查看版本信息 4 AT R
  • 家政行业丨制作便捷高效的家政小程序

    随着现代生活节奏的加快和家庭需求的多样化 越来越多的人开始寻找一种更方便 更高效的方式来获取家政服务 而家政小程序的兴起为这一需求提供了理想的解决方案 本文将简要介绍家政小程序是什么 探讨家政小程序的好处 并提供一些制作搭建家政小程序的方法
  • 【Python】记录一次 Linux + Python + RocketMQ 辛酸历程

    文章目录 安装Python 准备环境 编译安装 遇到问题 安装openssl 重新编译 安装依赖库 准备代码 验证 这是记录一次辛酸的Linux Python RocketMQ使用历程 需求背景是需要验证线上一个RocketMQ服务和里面的
  • 2014.12.17笔记

    我记得科学松鼠会的姬十三曾在一篇文章中写到 开始干一件好事情就像拿着锣一敲 然后志同道合的人就从四面八方赶来 开源之美 仅在于此 不要问怎么入门 直接上路吧 您刚才那个问题是说大数据跟人工智能和深度学习怎么划等号 是这么一个关系 大数据是一
  • XML可扩展标记语言

    XML可扩展标记语言 XML ExtensibleMarkup Language 可扩展标记语言是一种基于文本的格式用于展示结构化的信息 主要用于传输和存储数据 属于W3C World Wide Web Consortium 标准 XML的
  • hdfs怎么处理小文件问题

    一 HAR文件方案 为了缓解大量小文件带给namenode内存的压力 Hadoop 0 18 0引入了Hadoop Archives HAR files 其本质就是在HDFS之上构建一个分层文件系统 通过执行hadoop archive 命
  • 递归下降算法语法分析c语言

    递归下降算法 自上而下文法的递归下降的预测分析 从根节点出发逐步构造分析树 所以被称作自上而下文法 在文法中有递归的函数 例如 E gt TE 所以叫做递归下降算法 使用的文法如下 E gt TE E gt TE e T gt FT T g
  • fcfs调度算法_使用C程序实现先到先服务(FCFS)CPU调度算法

    fcfs调度算法 CPU scheduling decides which of the available processes in the ready queue is to be allocated the CPU There are
  • ORACLE 序列sequence小结

    创建序列语法 需要获取相应的权限 create sequence NAME INCREMENT BY START WITH integer 初始值和递增间隔 MAXVALUE integer NOMAXVALUE 上界或无上界 MINVAL
  • python实训报告心得体会-Python学习心得体会

    首先最开始 我们要明确一点 学习编程不是一日之功 需要每天投入时间学习 也不可纸上谈兵 需要自己亲自操作 不动手就不会发现问题 动了手印象才会深刻 记得更靠 接下来我就稍微总结一下 我在学习中遇到的问题和一些心得体会 1 修改字符串大小写时
  • WPS插件开发流程(1)

    OneKey Lite是一款由 只为设计 独立开发的WPS演示免费插件 在开发过程中 感恩于网上那些无私分享代码的陌生人 给我这个开发小白提供了重要的借鉴参考 于是我决定把用C 和Visual Studio开发WPS插件的每一个具体步骤分享
  • 使用ffmpeg制作时光影集

    目前QQ 剪影等都有照片制作成视频的功能 研究一段时间 始终不得要点 目前能实现的方式有h5动感影集 webv格式视频以及传统的ffmpeg进行照片合成剪辑 H5动感影集没办法导出成视频 webv对于视频的编辑依托于js 因此最终选择了利用
  • 国产大模型顶流「讯飞星火」:图片生成、代码生成,支持插件等重磅上线

    8月12日 新华社研究院中国企业发展研究中心发布的 人工智能大模型体验报告2 0 报告中 讯飞星火以总分1013分 被评为国产卓越大模型之一 体验地址 https xinghuo xfyun cn ch 8tcbd7p 讯飞星火可基于自然文
  • VS配置QT及打开项目报错处理

    例如 1 No such file or directory 2 找不到 Windows SDK 版本 10 0 17763 0 解决方案 请在VS安装所需版本的 Windows SDK 或者在项目属性页中或通过右键单击解决方案并选择 重定
  • android多线程监控view,android 主线程消息队列更新View

    主线程消息队列提供的方法 基本上只要继承自View的控件 都具有消息队列或者handler的一些处理方法 下面是一些handler方法以及被View封装了的方法 其底层用的基本都是handler的api 举例 查看postDelay的定义
  • 硬盘分类详解

    一 按原理分类 机械硬盘 HDD 固态硬盘 SSD 以及混合硬盘 SSHD 1 机械硬盘 HDD 机械硬盘 HDD 是传统硬盘 为电脑主要的存储媒介之一 由一个或者多个铝制或者玻璃制成的磁性碟片 磁头 转轴 控制电机 磁头控制器 数据转换器
  • Tomcat500内部服务器错误,再刷新一下干脆不是公开的项目

    我找了两天原因 最后错误在目录上面 classes和lib要写对 然后就可以了

随机推荐

  • java实现文件读入、读出功能

    一 文档读取 1 将文件读取为String 2019 12 26 将文档打开 并将文档内容读入String中 public static String TxtToString File file String result try Buff
  • 创建透视表 - R语言实现

    创建透视表 R语言实现 透视表 Pivot Table 是一种数据汇总和分析工具 可以对数据进行多维度的聚合和汇总 以便更好地理解和分析数据的关系 在R语言中 我们可以使用多种包和函数来创建透视表 本文将介绍使用dplyr和tidyr包实现
  • 微信小程序 open-data 的使用

    微信小程序官方 open data 点击跳转 open data 用于展示微信开放的数据
  • flask_apscheduler

    在项目中需要用到 apscheduler 查了一些资料 大概知道其运行原理之后模拟实际运用场景来测试代码 运用场景 在项目中需要随机的插入job 相当与做一个回调一样 然后运行job 每个job做的事情基本上都是一样的 根据参数的不同来执行
  • 超链接标签以及应用

    a 顶部 a a href led 跳转到底部 a a href 1 我的第一个网页 html target blank 点击我跳转到页面一 a
  • 计算期货均线数据

    import tushare as ts import pandas as pd pro ts pro api 接口 df pro fut daily ts code FU2005 SHF start date 20190506 end d
  • Linux 多线程原理深剖

    目录 传统艺能 Linux 线程 phread 二级页表 线程优点 线程缺点 线程异常 进程与线程 多线程共享 Linux线程控制 POSIX线程库 线程的创建 获取线程id 线程等待 线程终止 线程分离 进程地址空间布局 传统艺能 小编是
  • 【技术经验分享】计算机毕业设计Hadoop+Spark知识图谱股票基金推荐与预测系统 股票基金可视化 股票基金推荐系统 股票基金可视化系统 股票基金数据分析 股票基金爬虫大数据

    开发技术 前端开发 vue js element ui echarts websocket 后端开发 springboot mybatis 数据库 mysql关系系数据库 neo4j图数据库 大数据分析 hadoop spark flink
  • applicationContext.xml解析

  • 单点登录--cookie技术实现

    第一种为自己实现的单点登录 未使用CAS 主要是cookie跨域实现 代码如下 package com bochy filter import java io IOException import java security NoSuchA
  • 多媒体技术复习题

    多媒体技术复习题 一 选择题 1 所谓媒体是指 b A 二进制代码 B 表示和传播信息的载体 C 计算机输入与输出的信息 D 计算机屏幕显示的信息 2 帧频率为25帧 秒的电视制式有 b A PAL NTSC B PAL SECAM C S
  • SURF算法原理

    1 先对图像进行高斯滤波 2 选用二阶标准高斯函数作为滤波器 通过特定核间的卷积计算二阶偏导数 计算出Hessian矩阵 3 计算判别式的值 根据判别式取值的正负 来判断该点是不是极值点 4 利用非极大值抑制初步确定的特征点 5 精确定位极
  • STM32单片机PT100温度采集控制系统

    实践制作DIY GC0030 PT100温度采集控制系统 一 功能说明 基于STM32单片机设计 PT100温度采集控制系统 功能介绍 STM32F103C系列最小系统班 PT100温度传感器 LCD1602显示器 12mA恒流源电路 继电
  • Failed to resolve import “element-plus/lib/theme-chalk/index.css“ from “src\...

    Failed to resolve import element plus lib theme chalk index css from src 学习vue3 ts中遇到的问题 vue3 ts搭建参考掘金文章 很详细 希望我能早日学会这套东
  • 最小二乘法求解圆方程圆形及半径

    ci最小二乘法定义 摘抄于百度百科 基本思路 摘抄于百度百科 简单的来说 最小二乘法为一类线性算法 将需要求解的系数当作未知数 f x 与x当作已知数 通过多组对应关系求得系数的方法 所以 最小二乘法仅适合系数为一次项方程式 例如 k与b作
  • 贝叶斯软件genle教程_贝叶斯网络可视化软件GeNIe使用说明

    实例简介 详细的介绍了贝叶斯网络可视化软件GeNIe使用说明 适合初学者 Table of contents 3 1 Read me first 2 Hello gentel 13 3 Introduction 31 3 1 Guide t
  • js替换所有的回车换行符

    替换所有的回车换行 function TransferString content var string content try string string replace r n g br string string replace n
  • Intelij IDEA 配置Tomcat时找不到 “Application Server”

    由于公司突然断电 再打开idea的时候 tomcat就消失了 然后在网上搜了一下 没搜到自己乱点了一下 如图 plugins gt gt application servers View 是报红色 所以我在搜索栏搜索了tomcat 如果箭头
  • Java的replaceAll()方法

    replaceAll 方法实际是采用正则表达式的规则去匹配的 在regex中 表示一个 在java中一个 也要用 表示 这样 前一个 代表regex中的 后一个 代表java中的 所以字符串转义一次 正则转义一次 那么一个斜扛要写4个 1
  • R语言实现常用的5种分析方法(主成分+因子+多维标度+判别+聚类

    来源 R友舍 R语言多元分析系列之一 主成分分析 主成分分析 principal components analysis PCA 是一种分析 简化数据集的技术 它把原始数据变换到一个新的坐标系统中 使得任何数据投影的第一大方差在第一个坐标