2.6 主成分分析

学习目标

2.6.1 什么是主成分分析(PCA)

  • 定义:高维数据转化为低维数据的过程,在此过程中可能会舍弃原有数据、创造新的变量
  • 作用:是数据维数压缩,尽可能降低原数据的维数(复杂度),损失少量信息。
  • 应用:回归分析或者聚类分析当中
    对于信息一词,在决策树中会进行介绍

那么更好的理解这个过程呢?我们来看一张图
如果更好的对一个立体的物体二维表示?
在这里插入图片描述
可以看出第四张二维图片更能还原水壶信息,损失的信息是最少的

1. 计算案例理解(了解,不记忆)

假设对于给定5个点,数据如下

(-1,-2)
(-1, 0)
( 0, 0)
( 2, 1)
( 0, 1)

在这里插入图片描述
要求:将这个二维的数据简化成一维? 并且损失少量的信息

  • 如果以横轴为基准,其他不在横轴的点做投影,那么五个点最后变成三个点,损失信息,而我们想要的是原来五个点,最后还是五个点
    在这里插入图片描述
  • 我们采用斜线为基准,进行投影,保留了五个点的全部信息
    在这里插入图片描述

可以看出上图斜线变换角度也可以保留五个点的信息,且距离和最小,那么这个过程如何计算的呢?找到一个合适的直线,通过一个矩阵运算得出主成分分析的结果(不需要理解)

在这里插入图片描述

2. API

sklearn.decomposition.PCA(n_components=None)

  • 将数据分解为较低维数空间
  • n_components:
    小数:表示保留百分之多少的信息
    整数:减少到多少特征
  • PCA.fit_transform(X) X:numpy array格式的数据[n_samples,n_features]
  • 返回值:转换后指定维度的array

3. 数据计算

先拿个简单的数据计算一下

[[2,8,4,5],
[6,3,0,8],
[5,4,9,1]]
  • 整数降维
from sklearn.decomposition import PCA
data =[[2,8,4,5],[6,3,0,8],[5,4,9,1]]
# 1.实例化一个转换器类,整数:将四个特征降到两个特征
transfer = PCA(n_components=2)
# 2.调用fit_transform
data_new = transfer.fit_transform(data)
print("data_new:\n",data_new)

输出:

降低到两个特征,降维结果为:
 [[ 1.28620952e-15  3.82970843e+00]
 [ 5.74456265e+00 -1.91485422e+00]
 [-5.74456265e+00 -1.91485422e+00]]
  • 小数降维
data =[[2,8,4,5],[6,3,0,8],[5,4,9,1]]
# 1.实例化一个转换器类,小数——保留95%的信息
transfer = PCA(n_components=0.95)
# 2.调用fit_transform
data_new = transfer.fit_transform(data)
print("data_new:\n",data_new)

输出结果

保留95%的信息,降维结果为:
 [[ 1.28620952e-15  3.82970843e+00]
 [ 5.74456265e+00 -1.91485422e+00]
 [-5.74456265e+00 -1.91485422e+00]]

2.6.2 案例:探究用户对物品列别的喜好细分降维

在这里插入图片描述
数据如下:

  • order_products__prior.csv:订单与商品信息
    o 字段:order_id, product_id, add_to_cart_order, reordered
  • products.csv:商品信息
    o 字段:product_id, product_name, aisle_id, department_id
  • orders.csv:用户的订单信息
    o 字段:order_id,user_id,eval_set,order_number,….
  • aisles.csv:商品所属具体物品类别
    o 字段: aisle_id, aisle

需求

在这里插入图片描述
用户和物品类别的关系
user_id   aisle

1. 获取数据集

import pandas as pd
order_products = pd.read_csv("./machine_learning/instacart/order_products__prior.csv")
products = pd.read_csv("./machine_learning/instacart/products.csv")
orders = pd.read_csv("./machine_learning/instacart/orders.csv")
aisles = pd.read_csv("./machine_learning/instacart/aisles.csv")

2. 合并表

# 合并aisle和products--->product_id和aisle在一起
# 按索引进行合并
tab1 = pd.merge(aisles,products,on=["aisle_id","aisle_id"])

# 合并tab1和order_products--->order_id和aisle在一起
tab2 = pd.merge(tab1,order_products,on=["product_id","product_id"]

# 合并tab2和orders--->user_id和aisle在一起
tab3 = pd.merge(tab2,orders,on=["order_id","order_id"])
tab3

tab3输出:
在这里插入图片描述

3. 交叉表,找到user_id和aisle的关系

# 3、交叉表处理,把user_id和aisle进行分组
table = pd.crosstab(tab3["user_id"], tab3["aisle"])
# 数据量太大了,运行时间太久,为了后续简单,我们减少数据量到10000
data = table[:10000]
data

data输出:
在这里插入图片描述

4. PCA降维

# 4、pca降维
from sklearn.decomposition import PCA
# 1)实例化一个转换器类PCA
transfer = PCA(n_components=0.95)
# 2)调用fit_transform
data_new = transfer.fit_transform(data)
data_new.shape
(10000, 42)
# 保留95的信息,从134个特征减少到42个特征
  • 0
    点赞
  • 0
    收藏
    觉得还不错? 一键收藏
  • 0
    评论
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

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

抵扣说明:

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

余额充值