主成分分析,因子分析 python, sklearn

六月份似乎太忙,将近一个月没有写博客,于是挑一个多元统计分析中的方法写一篇 python 操作实现的。

主成分分析

主成分分析(Principle Component Analysis, PCA)是数据降维的一个方法:原始数据中有很多特征变量,可以采用主成分分析方法

  • 将原始数据降维为少数几个变量,同时尽可能保持原始数据的信息(体现在方差上);
  • 主成分就是降维后各原始变量的线性组合系数。

主成分分析的求解一般采用特征根分解,即求解原始数据协方差矩阵或相关系数矩阵最大特征根对应的特征向量,即为第一主成分,第二主成分为第二大特征根对应的特征向量,其他的主成分可以依次得出。主成分贡献率为对应特征根占所有特征根加和的比例。(特征向量使得降维后数据的方差最大,因此保留了原始变量尽可能多的信息,数学原理中用到了瑞利定理的结论)

采用 python 主成分分析时,常用的包为 Sklearn,其他一些包也能做(例如 matplotlib.mlab.PCA)。需要注意的是

  • 最好对原始数据进行标准化
  • sklearn 计算主成分时使用的是协方差矩阵,而不是相关系数矩阵

举例,下面一个统计数据:

食品衣着居住家庭设备交通通讯文教娱乐医疗保健其他
北 京1736379854327615797504103
天 津117125761411732832917940
河 北88815639910122222613539
山 西8302022016916028010333
内蒙古10541503358429330917644
辽 宁112722137810030137723468
吉 林10031682578228526119456
黑龙江9241845277425727725449
上 海26843661320458748937562204
江 苏156919151216836447919985
浙 江2061319914260618723416121
安 徽100011734510619725713441
福 建1518187457154366357154100
江 西12211253269623027615556
山 东108816044613729437718846
河 南8591323188316017812339
湖 北119212531011022327213562
湖 南143312830711421932916858
广 东1789144530152412361204116
广 西1187793809521422612344
海 南113566146921781999360
重 庆1130962319616325014333
四 川124411623410217222514436
贵 州8208023662991617224
云 南976802266710018312235
西 藏1185182848179284439
陕 西8131242128416329716638
甘 肃859922417415525811427
青 海8931563298420811015243
宁 夏9231433467717817819951
新 疆8041713336818315916936

对其主成分分析的 Python 代码为:

from sklearn.decomposition import PCA
from sklearn.preprocessing import scale
import pandas as pd

df = pd.read_excel(r'/Users/zhenchen/Downloads/git/Statistics-book/datas/data-pca.xlsx', index_col=0)  # 读取数据
data = scale(df.values)  # 标准化,标准化之后就自动根据协方差矩阵进行主成分分析了
pca = PCA(n_components=3)  # the number of principal components
pca.fit(data)  # fit the data by PCA
print(
    f"explained variance of each principal component: {pca.explained_variance_ratio_}"
)  # output the explained variance ratio

principal_components = pca.fit_transform(data)
print(f"principal components shown the first 10 rows:\n {principal_components[0:10]}")
  • 输出特征根用 pca.singular_values_
  • 通过 fit() 对数据应用主成分分析
  • 通过 fit_transform() 得到主成分得分,即降维后的数据

输出结果:

explained variance of each principal component: [0.88630543 0.05673211 0.01960694]
principal components shown the first 10 rows:
[[ 6.15730299 1.50580702 -0.24358303]
[ 0.6584214 1.12711694 0.50454916]
[-1.00494186 0.43604681 -0.02179728]
[-1.49665533 0.84460379 0.51878362]
[-0.54983004 0.2663682 -0.21121333]
[ 0.51041752 0.61976593 0.23667515]
[-0.57584909 0.31359856 0.11823377]
[-0.12918681 0.93587395 -0.29813732]
[ 9.8916323 -0.83011997 -0.08360848]
[ 1.64543386 -0.49026241 0.09447958]]

  • 主成分分析通常是数据分析中的一个中间步骤,常用于降维,为后续的聚类、分类或可视化等任务做准备。

因子分析

评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包

打赏作者

心态与习惯

你的鼓励将是我创作的最大动力

¥1 ¥2 ¥4 ¥6 ¥10 ¥20
扫码支付:¥1
获取中
扫码支付

您的余额不足,请更换扫码支付或充值

打赏作者

实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

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

余额充值