【数据竞赛】五大100%奏效的特征筛选策略

作者:杰少

五大100%奏效的特征筛选策略

简 介

在一些问题中,我们拿到的数据特征列是几千甚至上万的,这个时候如果我们直接使用模型训练,会非常耗时间,如果我们知道有些特征100%对于后期的模型训练不会带来帮助,并且在输入模型训练之前就将其删除。

今天我们学习五个简单有效的特征筛选操作,这五个操作在竞赛中都可以直接使用,是100%有效的特征筛选策略,因为它们相对简单,所以我们就放在一起介绍了。

五大特征筛选策略

1. 全部为空值的特征列

如果特征列全部是缺失值,那么该列特征不会包含任何信息,所以可以直接删除。

2. 仅有一个值的特征

如果特征只包含唯一一个值的话,那么该列特征可以直接删除。

3. 相关性达到100%的特征

如果两个数值特征的pearson系数达到了1,那么可以直接删除其中一个。

4. 一一对应的无序类别特征

如果两个无序的类别特征是一一对应的,那么可以直接删除其中一个。

5. 梯度提升树模型给出重要性为0的特征

将所有的特征输入到梯度提升树模型进行训练,将梯度提升树模型返回的特征重要性为0的特征直接删除。

代 码

  • 构建数据集

import pandas as pd
import numpy as np
df = pd.DataFrame()
df['f1'] =  [1] * 100
df['f2'] =  list(range(100))
df['f3'] =  df['f2'].values * 10 + 1
df['f4'] = ['A'] * 30 + ['B'] * 40 + ['C'] * 30
df['f5'] = ['X'] * 30 + ['Y'] * 40 + ['Z'] * 30 
df['f6'] = None 
df['f7'] = np.random.rand(100)
df['f8'] = [1,0]*50
df['label'] = [0,1]*50

1. 特征列全部缺失的情况

null_col = df.columns[df.isnull().sum() == df.shape[0]]
null_col
Index(['f6'], dtype='object')
df = df[list(set(df.columns) - set(null_col))]
df.head()

2. 删除仅有一个值的特征

oneval_col = df.nunique().index[df.nunique() == 1]
df = df[list(set(df.columns) - set(oneval_col))]
df.head()

3. 删除相关性达到100%的特征

df.corr() == 1

labelf8f2f7f3
labelTrueFalseFalseFalseFalse
f8FalseTrueFalseFalseFalse
f2FalseFalseTrueFalseTrue
f7FalseFalseFalseTrueFalse
f3FalseFalseTrueFalseTrue
'''
    特征f2和f3相关性达到了1
'''
df = df[list(set(df.columns) - set(['f3']))]
df.head()

4. 寻找一一对应的无序类别特征

df.groupby('f4')['f5'].nunique()
f4
A    1
B    1
C    1
Name: f5, dtype: int64
df.groupby('f5')['f4'].nunique()
f5
X    1
Y    1
Z    1
Name: f4, dtype: int64
'''
    特征f4和f5两个无序类别特征是一一对应的
'''
df = df[list(set(df.columns) - set(['f5']))]
df.head()

5. 删除梯度提升树模型给出重要性为0的特征

import lightgbm as lgb
y = df['label']
dic = {'A':1, 'B':2, 'C':3}
df['f4'] = df['f4'].map(dic).values
fea_cols = [col for col in df.columns if col not in ['label']]
X = df[fea_cols]
model = lgb.LGBMClassifier(max_depth=5, n_estimators=100, learning_rate=0.005, )
model.fit(X,y,verbose=10)

importance_zero_col = np.array(model.feature_name_)[model.feature_importances_ == 0]
importance_zero_col

适用问题

上面物种特征筛选策略99.9%都是通用的,所有的数据问题都可以直接使用,算是一种通用的策略。

参考文献

  1. LightGBM Document

  2. 5 Feature Selection Method from Scikit-Learn you should know

往期精彩回顾



适合初学者入门人工智能的路线及资料下载机器学习及深度学习笔记等资料打印机器学习在线手册深度学习笔记专辑《统计学习方法》的代码复现专辑
AI基础下载机器学习的数学基础专辑温州大学《机器学习课程》视频
本站qq群851320808,加入微信群请扫码:

  • 0
    点赞
  • 2
    收藏
    觉得还不错? 一键收藏
  • 0
    评论

“相关推荐”对你有帮助么?

  • 非常没帮助
  • 没帮助
  • 一般
  • 有帮助
  • 非常有帮助
提交
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

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

余额充值