zoukankan      html  css  js  c++  java
  • 主成分分析

    主成分分析

    什么是主成分分析(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:
    ", 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:
    ",tab3.head())
    # 3、找到user_id和aisle之间的关系
    table = pd.crosstab(tab3["user_id"], tab3["aisle"])
    data = table[:10000]
    print("data:
    ",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:
    ",data_new)

    返回结果:

     

     

     

  • 相关阅读:
    常用正则表达式
    C语言的指针与二维数组
    【原创】datalist实现简单分页功能
    【原创】datalist的页脚访问和控制
    [原创]手动删除顽固病毒总结
    [zz]复杂指针解析
    极度郁闷的一次电脑维修经历
    武汉城市地铁规划图
    [转]objc_msgSend 的 ARM 汇编分析
    [转]Cydia and XCode Local App Testing
  • 原文地址:https://www.cnblogs.com/a155-/p/14357888.html
Copyright © 2011-2022 走看看