[机器学习]特征工程:主成分分析

目录

主成分分析

1、简介

2、帮助理解

3、API调用

4、案例


本文介绍主成分分析的概述以及python如何实现算法,关于主成分分析算法数学原理讲解的文章,请看这一篇:

探究主成分分析方法数学原理_逐梦苍穹的博客-CSDN博客https://blog.csdn.net/qq_60735796/article/details/132339011

感谢大家支持!您的一键三连,就是我创作的最大动力!

主成分分析

1、简介

主成分分析(Principal Component Analysis,PCA)是一种常用的数据降维和特征提取技术用于将高维数据转化为低维表示,同时保留数据的主要特征。

它通过线性变换将原始特征 投影到新的坐标轴上,使得投影后的特征具有最大的方差 ,从而达到降低数据维度的目的。

PCA 的主要思想是寻找数据中的主要方向,即数据的主成分,这些主成分是数据变化最大的方向。通过保留最重要的主成分,可以将数据的维度减少,从而减少存储和计算的成本,同时可以降低数据中的噪声和冗余信息,提高模型的泛化能力。

PCA 的工作步骤如下:

  1. 标准化数据
  2. 计算数据的协方差矩阵。
  3. 对协方差矩阵进行特征值分解,得到特征值和特征向量。
  4. 将特征值按从大到小的顺序排列,选择前几个特征值对应的特征向量作为主成分。
  5. 将原始数据投影到选定的主成分上,得到降维后的数据。

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

python 复制代码
# -*- 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_transform
    data1 = transfer.fit_transform(data)
    print("保留90%的信息,降维结果为:\n", data1)
    
    # 1、实例化PCA, 整数------指定降维到的维数
    transfer2 = PCA(n_components=3)
    # 2、调用fit_transform
    data2 = 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在一张表当中

进行交叉表变换

进行降维

代码:

python 复制代码
from sklearn.decomposition import PCA
import pandas as pd


def 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, aisle
    products = 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_id
    tab1 = pd.merge(orders, order_products, on=["order_id", "order_id"])
    # 2)合并tab1和products on=product_id tab2:aisle_id
    tab2 = pd.merge(tab1, products, on=["product_id", "product_id"])
    # 3)合并tab2和aisles on=aisle_id tab3:user_id, aisle
    tab3 = pd.merge(tab2, aisles, on=["aisle_id", "aisle_id"])

    # 3、交叉表处理,把user_id和aisle进行分组
    table = pd.crosstab(tab3["user_id"], tab3["aisle"])

    # 4、主成分分析的方法进行降维
    # 1)实例化一个转换器类PCA
    transfer = PCA(n_components=0.95)
    # 2)fit_transform
    data = transfer.fit_transform(table)

    print(data.shape)

if __name__ == '__main__':
    data_demo()

结果:

相关推荐
查理零世10 分钟前
算法竞赛之差分进阶——等差数列差分 python
python·算法·差分
查士丁尼·绵2 小时前
面试-字符串1
python
机器懒得学习2 小时前
如何用Python和Dash打造一个智能股票筛选与可视化系统
信息可视化·dash
好评笔记2 小时前
AIGC视频生成模型:Stability AI的SVD(Stable Video Diffusion)模型
论文阅读·人工智能·深度学习·机器学习·计算机视觉·面试·aigc
算家云2 小时前
TangoFlux 本地部署实用教程:开启无限音频创意脑洞
人工智能·aigc·模型搭建·算家云、·应用社区·tangoflux
小兜全糖(xdqt)3 小时前
python中单例模式
开发语言·python·单例模式
Python数据分析与机器学习3 小时前
python高级加密算法AES对信息进行加密和解密
开发语言·python
noravinsc3 小时前
python md5加密
前端·javascript·python
唯余木叶下弦声3 小时前
PySpark之金融数据分析(Spark RDD、SQL练习题)
大数据·python·sql·数据分析·spark·pyspark
程序媛徐师姐4 小时前
Python基于Django的社区爱心养老管理系统设计与实现【附源码】
python·django·社区爱心养老·社区爱心养老管理系统·python社区养老管理系统·社区养老·社区养老管理系统