目录
主成分分析
1、简介
2、帮助理解
3、API调用
4、案例
本文介绍主成分分析的概述以及python如何实现算法,关于主成分分析算法数学原理讲解的文章,请看这一篇:
探究主成分分析方法数学原理_逐梦苍穹的博客-CSDN博客https://blog.csdn.net/qq_60735796/article/details/132339011
感谢大家支持!您的一键三连,就是我创作的最大动力!
主成分分析
1、简介
主成分分析(Principal Component Analysis,PCA)是一种常用的数据降维和特征提取技术,用于将高维数据转化为低维表示,同时保留数据的主要特征。
它通过线性变换将原始特征投影到新的坐标轴上,使得投影后的特征具有最大的方差,从而达到降低数据维度的目的。
PCA 的主要思想是寻找数据中的主要方向,即数据的主成分,这些主成分是数据变化最大的方向。通过保留最重要的主成分,可以将数据的维度减少,从而减少存储和计算的成本,同时可以降低数据中的噪声和冗余信息,提高模型的泛化能力。
PCA 的工作步骤如下:
- 标准化数据
- 计算数据的协方差矩阵。
- 对协方差矩阵进行特征值分解,得到特征值和特征向量。
- 将特征值按从大到小的顺序排列,选择前几个特征值对应的特征向量作为主成分。
- 将原始数据投影到选定的主成分上,得到降维后的数据。
PCA 在许多领域中有广泛的应用,包括数据可视化、特征工程、模式识别、图像处理等。它可以帮助我们理解数据的内在结构,去除冗余信息,提高模型的效果和效率。
需要注意的是,PCA 假设数据分布在高维空间中呈线性关系,因此在存在非线性关系的情况下,PCA 可能效果不佳。在这种情况下,可以考虑使用非线性降维技术,如核主成分分析(Kernel PCA)。
2、帮助理解
如何使用最少的特征,保留原始的主成分,如图所示:
3、API调用
sklearn.decomposition.PCA(n_components=None)
将数据分解为较低维数空间
n_components:
小数:表示保留百分之多少的信息
整数:减少到多少特征
PCA.fit_transform(X) X:numpy array格式的数据[n_samples,n_features]
返回值:转换后指定维度的array
# -*- coding: utf-8 -*-
# @Author:︶ㄣ释然
# @Time: 2023/8/16 15:42
from sklearn.decomposition import PCA'''
sklearn.decomposition.PCA(n_components=None)将数据分解为较低维数空间n_components:小数:表示保留百分之多少的信息整数:减少到多少特征PCA.fit_transform(X) X:numpy array格式的数据[n_samples,n_features]返回值:转换后指定维度的array
'''
def pca_demo():"""对数据进行PCA降维"""data = [[2, 8, 4, 5], [6, 3, 0, 8], [5, 4, 9, 1]]# 1、实例化PCA, 小数——保留多少信息transfer = PCA(n_components=0.9)# 2、调用fit_transformdata1 = transfer.fit_transform(data)print("保留90%的信息,降维结果为:\n", data1)# 1、实例化PCA, 整数——指定降维到的维数transfer2 = PCA(n_components=3)# 2、调用fit_transformdata2 = transfer2.fit_transform(data)print("降维到3维的结果:\n", data2)if __name__ == '__main__':pca_demo()
输出结果:
4、案例
案例:探究用户对物品类别的喜好细分降维
数据如下:
order_products__prior.csv
:订单与商品信息
字段:order_id, product_id, add_to_cart_order, reordered
products.csv
:商品信息
字段:product_id, product_name, aisle_id, department_id
orders.csv
:用户的订单信息
字段:order_id,user_id,eval_set,order_number,….
aisles.csv
:商品所属具体物品类别
字段: aisle_id, aisle
步骤:
合并表,使得user_id与aisle在一张表当中
进行交叉表变换
进行降维
代码:
from sklearn.decomposition import PCA
import pandas as pddef data_demo():# 1、获取数据集# ·商品信息- products.csv:# Fields:product_id, product_name, aisle_id, department_id# ·订单与商品信息- order_products__prior.csv:# Fields:order_id, product_id, add_to_cart_order, reordered# ·用户的订单信息- orders.csv:# Fields:order_id, user_id,eval_set, order_number,order_dow, order_hour_of_day, days_since_prior_order# ·商品所属具体物品类别- aisles.csv:# Fields:aisle_id, aisleproducts = pd.read_csv("data/instacart/products.csv")order_products = pd.read_csv("data/instacart/order_products__prior.csv")orders = pd.read_csv("data/instacart/orders.csv")aisles = pd.read_csv("data/instacart/aisles.csv")# 2、合并表,将user_id和aisle放在一张表上# 1)合并orders和order_products on=order_id tab1:order_id, product_id, user_idtab1 = pd.merge(orders, order_products, on=["order_id", "order_id"])# 2)合并tab1和products on=product_id tab2:aisle_idtab2 = pd.merge(tab1, products, on=["product_id", "product_id"])# 3)合并tab2和aisles on=aisle_id tab3:user_id, aisletab3 = pd.merge(tab2, aisles, on=["aisle_id", "aisle_id"])# 3、交叉表处理,把user_id和aisle进行分组table = pd.crosstab(tab3["user_id"], tab3["aisle"])# 4、主成分分析的方法进行降维# 1)实例化一个转换器类PCAtransfer = PCA(n_components=0.95)# 2)fit_transformdata = transfer.fit_transform(table)print(data.shape)if __name__ == '__main__':data_demo()
结果: