特征选择
选择特征就是单纯地从提取到的所有特征种选择部分特征作为训练集特征,特征在选择前和选择后可以改变值,也不改变值,但是选择后的特征维度肯定比选择前小,毕竟我们只选择了其中的一部分特征。
主要方法(三大武器):Filter(过滤器):VarianceThreshold
嵌入式(嵌入式):正则化,决策树
包装(包裹式)
sklearn特征选择API:sklearn.feature_selection.VarianceThreshold
- VarianceThreshold(阈值= 0.0)
删除所有低方差特征
- Variance.fit_transform(X)
X:numpy数组格式的数据[n_samples,n_features]
返回值:训练集差异低于阈值的特征将被删除
默认值是保留所有非零方差特征,即删除所有样本中具有相同值的特征
下面代码实现:
from sklearn.feature_selection import VarianceThreshold
def var():
"""
特征选择-删除低方差的特征
return:
"""
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()
阈值默认为0.0表示删除相同特征
运行效果如下:
PCA
特征数量达到上百的时候考虑使用PCA
本质:PCA是一种分析,简化数据集的技术
目的:是数据维度压缩,尽可能降低原数据的维度(复杂度),损失少量信息。
作用:可以削减回归分析或者聚类分析中特征的数量
PCA(n_components =无)
将数据分解为较低维度空间
PCA.fit_transform(X)
X:numpy数组格式的数据[n_samples,n_features]
返回值:转换后指定维度的阵列
下面使用代码实现:
from sklearn.decomposition import PCA
def pac():
"""
主成分分析进行特征降维
:return:
"""
pac= PCA(n_components=0.9)
data=pac.fit_transform([[2,8,4,5],[6,3,0,8],[5,4,9,1]])
print(data)
return None
if __name__=="__main":
pac()
运行结果如下:
案例演示
探究用户对物品类别的喜欢细分降维
数据:
- products.csv 商品信息
- order_products_prior.csv 订单与商品信息
- ordes.csv 用户的订单信息
- aisles.csv 商品所属具体物品类别
下面是部分数据截图如下:
如果想要数据的话留言私聊小文
代码运行结果如下(读取表的时候注意数据大小):
import pandas as pd
from sklearn.decomposition import PCA
#读取四张表的数据
prior=pd.read_csv("./all/order_products__prior.csv")
products=pd.read_csv("./all/products.csv")
orders=pd.read_csv("./all/orders.csv")
aisles=pd.read_csv("./all/aisles.csv")
#合并四张表到一张表(用户-物品类别)
_mg=pd.merge(prior,products,on=['product_id','product_id'])
_mg=pd.merge(_mg,orders,on=['order_id','order_id'])
_mg=pd.merge(_mg,aisles,on=['aisle_id','aisle_id'])
_mg.head(10)
cross=pd.crosstab9_mg['user_id'],_mg['aisle'])
corss.head(10)
pca=PCA(n_components=0.9)
data=pca.fit_transform(cross)
print(data)
运行结果如下: