python机器学习之特征选择(过滤法、嵌入法、包装法案例详解)

特征选择

特征工程:
1、特征提取 :从文字,图像等数据中提取信息作为特征
2、特征创造 :把现有特征进行组合,或仙湖计算,得到新的特征
3、特征选择 :从所有的特征种,选择出有意义的,对模型有帮助的特征,避免所有特征都导图模型取训练的情况。在特征选择之前,跟数据提供者开会。

下面案例所用到的数据获取地址——>这里下载

1.过滤法

首先导入数据

import pandas as pd 
data = pd.read_csv("../数据/digit recognizor.csv")
data.head()

在这里插入图片描述

这个数据亮较大,如果使用支持向量机和神经网络,可能会直接跑不出来,使用KNN跑一次大概需要半个小时,用这个数据更能体现特征工程的重要性。

过滤法:

全部特征—> 最佳特征子集->算法->模型评估

方差过滤

无论接下来的特征工程要做什么,都要优先消除方差为0的特征。

from sklearn.feature_selection import VarianceThreshold
selector = VarianceThreshold()#实例化,默认方差为0
x_var0 = selector.fit_transform(x)
x_var0.shape#查看数据维度
pd.DataFrame(x_var0).head()#查看数据前五行

在这里插入图片描述

删除了方差为0的特征,但是还剩下708个特征,明显还需要进一步选择,可以设置方差阈值

import numpy as np
x_fsvar =VarianceThreshold(np.median(x.var().values)).fit_transform(x)
#将中位数设置为阈值,砍掉一般的特征
x.var().values

在这里插入图片描述

np.median(x.var().values)#中位数
x_fsvar.shape#利用中位数过滤后的维度

在这里插入图片描述

当特征时二分类时,特征的取值就是伯努利随机变量。
若特征时伯努利随机变量,假设p=0.8,即二分类特征种某种分类占到80%以上的时候删除特征

x_bvar = VarianceThreshold(0.8*(1-0.8)).fit_transform(x)
x_bvar.shape

在这里插入图片描述
差过滤对模块的影响

KNN VS 随机森林在不同方差过滤效果下的对比

导入库

from sklearn.ensemble import RandomForestClassifier as RFC
from sklearn.neighbors import KNeighborsClassifier as KNN
from sklearn.model_selection import cross_val_score
import numpy as np

提取数据

x = data.iloc[:,1:]
y = data.iloc[:,0]

使用中位数过滤特征

x_fsvar = VarianceThreshold(np.median(x.var().values)).fit_transform(x)

**KNN 方差过滤前 **


35分钟才能运行完

 cross_val_score(KNN(),x,y,cv=5).mean()

在这里插入图片描述

4小时才能运行完
%%timeit   可以用来计算运行这个cell种代码所需的时间,一般是运行7次取平均值
 cross_val_score(KNN(),x,y,cv=5).mean()

在这里插入图片描述

方差过滤后

20分钟
cross_val_score(KNN(),x_fsvar,y,cv=<
  • 12
    点赞
  • 98
    收藏
    觉得还不错? 一键收藏
  • 打赏
    打赏
  • 4
    评论
评论 4
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包

打赏作者

黎明之道

你的鼓励将是我创作的最大动力

¥1 ¥2 ¥4 ¥6 ¥10 ¥20
扫码支付:¥1
获取中
扫码支付

您的余额不足,请更换扫码支付或充值

打赏作者

实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值