数据降维
维度: 特征的数量
降维:减少特征数量
主要的方式:
1、特征选择
特征选择的原因:
冗余:部分特征的相关的高,容易消耗算性能
噪声:部分特征对预测结果有影响
特征选择就是单纯的从提取到的所有特征中选择部分特征作为训练集特征,特征在选择前和选择后可以改变值、也可以不改变值,但是选择后的特征位数肯定比选择前小,毕竟我们只选择了其中的一部分特征
主要方法(三大武器):
Filter(过滤式):Variance Threshole
Embedded(嵌入式):正则化、决策树
Wrapper(包裹式)
过滤式
API :Sklearn.feature_selection.VarianceThreshold
from sklearn.feature_selection import VarianceThreshold
def var():
"""
特征选择-删除低方差的特征
"""
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()
运行结果如下:
2、主成分分析
PCA
本质:PCA是一种分析、简化数据集的技术
目的:是数据维度压缩,尽可能降低原数据的维数(复杂度),损失多少信息。
作用:可以削弱回归分析或者聚类分析中特征的数量
当PCA特征数量达到上百的时候,考虑数据的简化
数据会改变,数量也会减少
pca流程
from sklearn.decomposition import PCA
def pca():
"""
主成分分析,进行特征降维
"""
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市场篮子分析
import pandas as pd
from sklearn.decomposition import PCA
#读取四张表的数据
prior=pd.read_csv(".anaconda/order_prodacts_prior.csv")
products=pd.read_csv(".anaconda/products.csv")
order=pd.read_csv(".anaconda/order.csv")
aisles=pd.read_csv(".anaconda/aisles.csv")
#合并四张表的数据
_mg=pd.merge(prior,products,on=['product_id','product_id'])
_mg=pd.merge(_mg,orderm,on=['order_id','order_id'])
mt =pd,merge(_mg,aisles,on=['aisle_id','aisle_id'])
mt.head(10)#产看前十行的数据
#交叉表(特殊的分组工具)
pd.crosstab(mt['user_id'],mt['aisle'])
cross.head(10)
#进行主成分分析(降维)
pca=PCA[n_conponents=0.9]
data=pca.fit_transfrom[cross]
data
data.shape
结果为(206209,27)
降维后远远小于上面没降维前的数据