主成分分析

主成分分析

什么是主成分分析(PCA)

定义:高维数据转化为低维数据的过程,在此过程中可能会舍弃原有数据、创造新的变量

作用:是数据维数压缩,尽可能降低原数据的维数(复杂度),损失少量信息。

应用:回归分析或者聚类分析当中

API

sklearn.decomposition.PCA(n_components=None)

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

数据计算

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

[[2,8,4,5],
[6,3,0,8],
[5,4,9,1]]
from sklearn.decomposition import PCA
def pca_demo():
    """
    PCA降维
    :return:
    """
    data = [[2,8,4,5], [6,3,0,8], [5,4,9,1]]

    # 1、实例化一个转换器类
    transfer = PCA(n_components=0.95)

    # 2、调用fit_transform
    data_new = transfer.fit_transform(data)
    print("data_new:\n", data_new)
    return None
if __name__ == "__main__":
    # 代码11:PCA降维
    pca_demo()

 

 

  • 小数:表示保留百分之多少的信息
  • 整数:减少到多少特征

 

 

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

 

数据网盘链接:

链接:https://pan.baidu.com/s/1gJIegOiAAYhK3dtcpVr4Mw 
提取码:irg9

数据如下:

  • 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在一张表当中
  • 进行交叉表变换
  • 进行降维

完整代码

import pandas as pd
# 1、获取数据
order_products = pd.read_csv("../../instacart/order_products__prior.csv")
products = pd.read_csv("../../instacart/products.csv")
orders = pd.read_csv("../../instacart/orders.csv")
aisles = pd.read_csv("../../instacart/aisles.csv")
# 2、合并表
# 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

# 合并aisles和products aisle和product_id
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"])
print("tab3:\n",tab3.head())
# 3、找到user_id和aisle之间的关系
table = pd.crosstab(tab3["user_id"], tab3["aisle"])
data = table[:10000]
print("data:\n",data.head())
# 4、PCA降维
from sklearn.decomposition import PCA
# 1)实例化一个转换器类
transfer = PCA(n_components=0.95)

# 2)调用fit_transform
data_new = transfer.fit_transform(data)
print("data_new:\n",data_new)

返回结果:

 

 

 

 

 

 

 

 

posted @ 2021-02-01 17:39  ziyuliu  阅读(373)  评论(0编辑  收藏  举报