想象一下,你是一个营养学家试图探索食物的营养成分。什么是区分食品的最佳方式?通过维生素含量?蛋白水平?或者两者的组合?那么,你需要这个——主成分分析
以下内容译自Algobeans
区分识别一个整体里有什么成分,最直观的就是可视化以及揭示集群,例如,在食品中,我们可以识别广泛的类别,如肉类和蔬菜,以及子类别,如蔬菜类型。
但是如何找出这些成分呢?
💡💡💡
主成分分析定义
主成分分析(PCA)是在大型数据集中找出少量基础变量(被称为“主成本”)的技术。主要思想为降维,把多指标转化为几个综合指标。
主成分可以由一个或多个现有变量表示。
举例来说:
我们可以用单一变量「维生素C」来区分食物,因为维生素C只在蔬菜中但不存在于肉类中。 但是用这样的变量,肉类将全部聚集在一起(因为所有肉类对维生素C的反应都为0,无法分开)(👇图一最左所示👇)
图一:用变量分类
为了把肉类的子类也表示出来,我们可以用多个变量「维生素C-脂肪」来表示,因为不同的肉类脂肪含量不同,而且蔬菜中不含有脂肪,这样我们就把蔬菜和肉类以及所含有的子类也分别开来了。(👆图一中间👆)
如果想要得到更精细的分类,我们可以用「维生素C+纤维-脂肪」这样的变量来把蔬菜的子类更好的展开。(👆图一最右👆)
以上就是我们用重复的实验和脑子获得主成分,但这用来应付「天朝食物」还远远不够。但是你还有强大的电脑啊!
接下来就厉害了,我们可以通过主成分分析法来分析一个随机的食物样品。
ps:样本来自美国农业部数据,以100g生食物为标准测试,分析四个营养变量:维生素C、脂肪、纤维、蛋白质。
数据发现,某些营养素的存在似乎相关。脂肪和蛋白质似乎在一同增长,而纤维和维生素C一同增长。
为了证实我们的假设,我们可以用相关性分析检查营养变量之间的相关性。正如所料,脂肪和蛋白质水平(r= -0.56)之间以及纤维和维生素C水平之间存在大的正相关(r= 0.57)。
在发现了这样的关系之后,我们可以把高度相关的变量看作一个变量,我们就可以把四个维度降维成两个维度来考虑。那么对食物集做主成分分析就可得以下结果:
数字表示用于组合变量以导出主成分的权重。例如,为了得到特定食品的最高主成分(PC1)值,我们加上它包含的纤维和维生素C的量,稍微强调纤维,然后从中减去脂肪和它含有的蛋白质,与蛋白质抵消的程度较大。
我们观察到,主要成分(PC1)总结了我们的目前为止的研究结果 - 它已配对脂肪与蛋白质和纤维与维生素C.它还考虑到对之间的反向关系。因此,PC1可能用于区分肉类和蔬菜。第二主成分(PC2)是两个不相关的营养变量 - 脂肪和维生素C的组合。它用于进一步区分肉(使用脂肪)和蔬菜(使用维生素C)中的子类别。
用这样两个变量在做食物分组的话,将得到最为详细的分类:
肉类项目(蓝色)具有低PC1值,因此集中在图的左侧,与蔬菜项目(橙色)相对的一侧。在肉类中,海产品(深蓝色)具有较低的脂肪含量,因此它们具有较低的PC2值,并且位于图的底部。几种具有较低维生素C含量的非叶状素食物(深橙色)也具有较低的PC2值,并出现在底部。
主成分分析好像很厉害的样子,但是,是个算法就有他的局限性,PCA就有不少局限:
最大化传播:PCA的主要假设是,显示数据点之间最大差异的维度是最有用的。但是,这可能不是真的。例如,识别技术堆中数据点的个数。为了计算数量,沿纵轴将每个数据点分开,但是如果堆栈很短,PCA会错误地识别水平轴为任务的有效成分,因为这是具有最大扩展的维度。
解释组件:PCA需要用具体的变量组合来表示组件,但是通常在现实中是很难实现的。
正交变量:PCA的一个主要缺点是其生成的主分量必须不在空间中重叠,否则称为正交分量。这意味着组件总是彼此以90度定位。为了解决这个问题,我们可以使用一种称为独立分量分析(ICA)的替代技术。
(喜欢的话请关注我哦~ 微信公众号:kuairobot)
-相关阅读-