Python之主成分分析

多元统计分析的过程包括:

第一类:多变量分析过程,包括princomp(主成分分析)、factor(因子分析)、cancorr(典型相关分析、multtest(多重检验)、prinqual(定性数据的主分量分析)及corresp(对应分析);
第二类:判别分析过程,包括discrim(判别分析)、candisc(典型判别)、stepdisc(逐步判别)
第三类:聚类分析过程,包括cluster(谱系聚类)、fastclus(K均值快速聚类)、modeclus(非参数聚类)、varclus(变量聚类)及tree(画谱系聚类的结果图);

原理简介

引言:在实际中,为了全面分析问题,往往提出很多与此相关的变量(或因素),且每个变量都能在不同程度上反映这个问题的某些信息。但统计分析方法研究多变量问题时,变量个数太多容易增加问题的复杂性。人们希望变量个数减少时,也能得到较多的信息。
功能:主成分分析是数学上处理降维的一种方法,它设法将初始变量重新组合成一组新的互相无关的几个综合变量,同时可根据实际需要从中取出较少的几个综合变量,尽可能多反映原来变量的信息。在这里,信息的大小用离差平方和或方差来表示。
主分量分析的目的是从原始的多个变量中取若干线性组合,并尽可能多地保留原始变量的信息。设有p 个指标x1,x2…xp ,找 m个综合指标 y1,y2…ym,且 ,使得 Python之主成分分析_第1张图片
式中y1 包含x1,x2…xp的信息最多, y2包含x1,x2…xp的信息次之,依次类推,则称 为 的第i个主成分, aij 为第i个主成份在第j个变量上的载荷。

性质:(1)各主成分之间互不相关,且 在这里插入图片描述
(2)记向量X的协方差阵Σ(或相关系数阵R)的特征值为
在这里插入图片描述
和特征向量为在这里插入图片描述
,则是第i个主成分的方差 ,载荷 ;
(3)p个原始指标的方差之和 =p个主成分的方差之和 = =p
(4)第i个主成分的贡献率为 ,前m个主成分的累计贡献率是 ,实际应用中,主成分的个数选取依据累计贡献率达到或超过80%,或取特征根 ,常常结合两者确定主成分个数。(注:累积贡献率标明的是前m个主成分提取了原始变量 的多少信息)
(5)前m个主成分对原始变量Xi 的贡献率为Xi与 的复相关系数的平方,表明了前m个主成分包含了第i个变量的多少信息。
(6)由于主分量计算中,方差越大的变量越会被优先保留,所以实际中为了消除各变量的数值大小相关较大或者是量纲的影响,通常会将原始变量进行标准化

显然,标准化后的向量X*的协方差阵Σ即为原始向量X的相关矩阵R。实际中从相关系数阵出发进行主成分分析的较多。
(7)主成分得分公式为:
协方差阵Σ出发:
相关系数阵R出发:
其中 为第i个原始变量xi的均值. 为第i个原始变量xi减去均值除以标准差.后的标准化值。

主成分分析的步骤:

(1) 求协方差阵Σ(或相关系数阵R)的特征根与特征向量
(2) 提取前m个主成份,并写出其表达式
(3) 对主成分进行解释
(4) 计算主成分得分并分析

案例:探究用户对物品类别的喜好细分

Python之主成分分析_第2张图片

1)需要将user_id和aisle放在同一个表中 - 合并
2)找到user_id和aisle - 交叉表和透视表
3)特征冗余过多 -> PCA降维
代码:

import pandas as pd
order_products= pd.read_csv('C:/Users/57616/Desktop/pca/order_products__prior.csv')
products= pd.read_csv('C:/Users/57616/Desktop/pca/products.csv')
orders= pd.read_csv('C:/Users/57616/Desktop/pca/orders.csv')
aisles= pd.read_csv('C:/Users/57616/Desktop/pca/aisles.csv')

#合并数据
tab1=pd.merge(aisles,products,on=('aisle_id','aisle_id'))
tab2=pd.merge(tab1,order_products,on=('product_id','product_id'))
tab3=pd.merge(tab2,orders,on=('order_id','order_id'))
tab4 = tab3[:20000]
#tab2.columns.values
#tab1.columns.values

table = pd.crosstab(tab4["user_id"],tab4["aisle"])

#pca降维
from sklearn.decomposition import PCA
transfer = PCA(n_components=0.95)
data_new = transfer.fit_transform(table)
data_new.shape

结论:100个字段,利用主成分分析,降维到25个字段

你可能感兴趣的:(机器学习,python)