04 数据降维
- 降维: 降低特征的数量
- 特征选择
- 主成分分析
特征选择:
特征选择的原因
- 冗余:部分特征的相关度高,容易消耗计算性能
- 噪声:部分特征对计算结构有影响
特征选择是什么?
定义: 特征选择就是单纯地从提取到的所有特征中选择部分特征作为训练集特征,特征在选择前和选择后可以改变值,也可以不改变值,但是选择后的特征维数肯定比选择前小。因为我们只选择了其中的一部分特征。
- 主要方法:
- Filter (过滤式):Variance Threshold (方差的过滤)
- Embedded (嵌入式):正则化、决策树
- Wrapper (包裹式)
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是什么
- 本质: 一种分析、简化数据集的技术
- 目的: 是数据维度压缩,尽可能降低原有数据的维度(复杂度),损失少量信息
- 作用:可以削减回归分析或者聚类分析中特征的数量 (特征数量上百)
高维度数据容易出现的问题
- 特征之间通常是相关的
PCA语法
- Decomposition
- 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 把用户分成几个类别
- 探究: 用户对物品类别的喜好细分降维
- products.csv 商品信息
- order_products_prior.csv 订单与商品信息
- orders.csv 用户订单信息
- aisles.csv 商品所属的具体物品类别
合并信息到一张表中
- 主成分分析
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)