数据分析 | PCA(主成分分析)从入门到数学

目录

简单介绍

如何进行降维

数据描述:

基本原理和步骤:

关注我【生物海洋计算机支线】,获得更多生物海洋学,数据处理,作图等相关知识


主成分分析是一种降维方法

把多指标转化为几个综合指标

其目的在于通过较少的变量解释大部分的信息

首先啊

先进行简单的介绍

不求甚解 理解就好

之后

以鸢尾花数据为例观察主成分分布

并指出如何使用sklearn进行主成分分析

最后

来点数学

(该部分来自于司守奎老师的《python数学实验及建模》)


简单介绍

假如我们遇到一组数据,其中的数据仅有0和1两种

由于数据过于集中方差则很

说明数据离散程度低,携带有效信息少

PCA使用方差衡量信息量,实际的应用协方差矩阵进行判别

如何进行降维

假设有如下a、b两组数据,我们希望用一组数据来进行描述

ab
13
24
35

a的S²(方差)为 1 | b的S²(方差)也为 1 方差和为2

选择一组方差为2的数据进行描述

从图像的角度上来讲

原始的a、b数据表示为二维图像

将坐标轴进行旋转之后,就可以用一条线段来进行表示


数据描述:

现使用sklearn中自带的鸢尾花数据进行描述:

三个品种的鸢尾花在两两维度上的分布情况如图所示:

import plotly.express as px

df = px.data.iris()
# 数据中包含的特征向量
features = ["sepal_width", "sepal_length", "petal_width", "petal_length"]

fig = px.scatter_matrix(
    df,
    dimensions=features,    #选择特征向量进行多维可视化
    color="species"         #选择需要进行分类的数据
)
fig.update_traces(diagonal_visible=False)   #设置对角线不可见,有兴趣的可删掉后观察
fig.show()

进行PCA操作之后追踪结果,按照各个主成分查看区分类群结果

import plotly.express as px
from sklearn.decomposition import PCA

df = px.data.iris()
features = ["sepal_width", "sepal_length", "petal_width", "petal_length"]

pca = PCA()     #实例化一个PCA方法
components = pca.fit_transform(df[features])    #对特征向量数据进行PCA操作
labels = {
    str(i): f"PC {i+1} ({var:.1f}%)"      #输出字符串第i个主成分的贡献率
    for i, var in enumerate(pca.explained_variance_ratio_ * 100)
}

fig = px.scatter_matrix(
    components,
    labels=labels,         #将贡献率设置为行列的标签 
    dimensions=range(4),     
    color=df["species"]    
)
fig.update_traces(diagonal_visible=False)  #设置对角线不显示,有兴趣可删除查看
fig.show()

可以发现PC1可以较好的区分物种,其他的均不能明显的进行分类

于是能得出PC1主成分可以很好的描述整组数据的结论

import plotly.express as px
from sklearn.decomposition import PCA

# 获取数据
df = px.data.iris()
features = ["sepal_width", "sepal_length", "petal_width", "petal_length"]

pca = PCA()     #实例化一个PCA方法
md = pca.fit(df[features])    #对特征向量数据进行建模
print("查看各个主成分的贡献率",md.explained_variance_ratio_)
print("查看各个主成分的特征值",md.explained_variance_)
print("各个主成分的系数",md.components_)

------------------------------------------------------------------------------
查看各个主成分的贡献率 [0.92461621 0.05301557 0.01718514 0.00518309]
查看各个主成分的特征值 [4.22484077 0.24224357 0.07852391 0.02368303]
各个主成分的系数 [[-0.08226889  0.36158968  0.35884393  0.85657211]
 [ 0.72971237  0.65653988 -0.07470647 -0.1757674 ]
 [ 0.59641809 -0.58099728  0.54906091  0.07252408]
 [-0.32409435  0.31725455  0.75112056 -0.47971899]]

通过查看主成分的系数

可以发现第2-4组数据起到了关键的作用


基本原理和步骤:

(来自于司守奎老师《python数学实验与建模》ppt课件)

或者简单的说,通过计算数据的协方差/相关系数矩阵的特征值和特征向量就可以得出前文结论

其中特征值的比值即是各主成分的贡献率

特征向量是各主成分的系数

关注我【生物海洋计算机支线】,获得更多生物海洋学,数据处理,作图等相关知识

评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值