• 04 数据降维


    04 数据降维

    • 降维: 降低特征的数量
    • 特征选择
    • 主成分分析

    特征选择:

    特征选择的原因

    • 冗余:部分特征的相关度高,容易消耗计算性能
    • 噪声:部分特征对计算结构有影响

    特征选择是什么?

    1. 定义: 特征选择就是单纯地从提取到的所有特征中选择部分特征作为训练集特征,特征在选择前和选择后可以改变值,也可以不改变值,但是选择后的特征维数肯定比选择前小。因为我们只选择了其中的一部分特征。

    2. 主要方法:

      • Filter (过滤式):Variance Threshold (方差的过滤)
      • Embedded (嵌入式):正则化、决策树
      • Wrapper (包裹式)
    3. VarianceThreshold 模块

    from sklearn.feature_selection import VarianceThreshold
    
    
    def var():
        """
        特征选择-删除低方差的特征
        :return: None
        """
        var = VarianceThreshold(threshold=0.0)  #取值根据实际情况
        data = var.fit_transform([[0,2,0,3],[0,1,4,3],[0,1,1,3]])
        print(data)
        return None
    
    
    if __name__ == '__main__':
        var()
    

    主成分分析(PCA Principal Component Analysis)

    PCA是什么

    1. 本质: 一种分析、简化数据集的技术
    2. 目的: 是数据维度压缩,尽可能降低原有数据的维度(复杂度),损失少量信息
    3. 作用:可以削减回归分析或者聚类分析中特征的数量 (特征数量上百)

    高维度数据容易出现的问题

    • 特征之间通常是相关的

    PCA语法

    1. Decomposition
    2. PCA(n_components = None)
    • n_components - 小数: 保留特征维度的比例 90%~95%
    • n_components - 整数: 保留特征维度的数量
    from sklearn.decomposition import PCA
    
    def pca():
        """
        主成分分析进行特征降维
        :return: None
        """
        pca = PCA(n_components=0.9)
        data = pca.fit_transform([[2,8,4,5],[6,3,0,8],[5,4,9,1]])
        print(data)
    
        return None
    
    
    if __name__ == '__main__':
        pca()
    

    降维案例

    instacart 把用户分成几个类别

    1. 探究: 用户对物品类别的喜好细分降维
    • products.csv 商品信息
    • order_products_prior.csv 订单与商品信息
    • orders.csv 用户订单信息
    • aisles.csv 商品所属的具体物品类别
    1. 合并信息到一张表中
      信息合并

    2. 主成分分析
      Kaggle instacart database 网页链接

    import pandas as pd
    from sklearn.decomposition import PCA
    
    # 读取4张表的数据
    prior = pd.read_csv('./order_products__prior.csv')
    products = pd.read_csv('./products.csv')
    orders = pd.read_csv('./orders.csv')
    aisles = pd.read_csv('./aisles.csv')
    
    # 合并4张表到一张表(用户-物品)
    _mg = pd.merge(prior,products, on=['product_id','product_id'])
    _mg = pd.merge(_mg, orders, on=['order_id','order_id'])
    mt = pd.merge(_mg, aisles, on=['aisle_id','aisle_id'])
    
    # 交叉表(特殊的分组工具)
    cross = pd.crosstab(mt['user_id'],mt['aisle'])
    
    # 进行主成分分析
    pca = PCA(n_components=0.9)
    data = pca.fit_transform(cross)
    
  • 相关阅读:
    Linux下安装MySql8
    root与alias主要区别
    TCP/UDP 常用端口列表
    kafka文档
    kafka监测工具(可视化)
    Kafka消息队列
    postgresql
    gulp babel 配置不报错也没有输出结果的原因
    gulp中常用的模块
    判断浏览器标签页是隐藏或者显示状态
  • 原文地址:https://www.cnblogs.com/hp-lake/p/11831224.html
Copyright © 2020-2023  润新知