文章目录
前言
FeatureSelector是用于降低机器学习数据集的维数的工具。
本篇主要介绍一个基础的特征选择工具feature-selector,feature-selector是由Feature Labs的一名数据科学家williamkoehrsen写的特征选择库。feature-selector主要对以下类型的特征进行选择:
1.具有高missing-values百分比的特征
2.具有高相关性的特征
3.对模型预测结果无贡献的特征(即zero importance)
4.对模型预测结果只有很小贡献的特征(即low importance)
5.具有单个值的特征(即数据集中该特征取值的集合只有一个元素)
从上面可以看出feature-selector确实是非常基础的特征选择工具,正因为非常的基础,所以才非常的常用(这也是为什么williamkoehrsen要写这个特征选择库的原因),在拿到一个数据集的时候,往往都需要将上述类型的特征从数据集中剔除掉。针对上面五种类型的特征,feature-selector分别提供以下五个函数来对此处理:
1.identify_missing()
2.identify_collinear()
3.identify_zero_importance()
4.identify_low_importance()
5.identify_single_unique(*)
1.数据集选择
在这里使用自己的训练数据集。文章末尾附上链接。数据集采样代码如下:
import pandas as pd
import numpy as np
data = pd.read_csv('base_train_sum.csv')
data
2.feature-selector用法
导入数据并创建feaure-selector实例
注意:
作者并没有把feature-selector发布到pypi上,所以不能使用pip和conda进行安装,只能手动从github下载下来,然后把feature_selector.py文件放到当前工作目录,然后再进行import操作。
# feature-selector用法
# 导入数据并创建feaure-selector实例
import pandas as pd
from feature_selector import FeatureSelector
# 数据集中TARGET字段为对应样本的label
train_labels = data.flag
# 获取all features
train_features = data.drop(columns='flag')
# 创建 feature-selector 实例,并传入features 和labels
# fs = FeatureSelector(data = train_features,lables = train_labels)
fs = FeatureSelector(data = train_features, labels = train_labels)
3.具有高missing-values百分比的特征
该方法用于选择出missing value 百分比大于60%的特征用于选择missing value 百分比大于指定值(通过missing_threshold指定百分比)的feature。该方法能应用于监督学习和非监督学习的特征选择。
fs.identify_missing(missing_threshold=0.6)
# 查看选择出的特征
# fs.ops['missing']
missing_features = fs.ops['missing']
print(missing_features[:10])
# 绘制所有特征missing value百分比的直方图
fs.plot_missing()
说明咋没有属性缺失值达到 60%以上
该方法内部使用pandas 统计数据集中所有feature的missing value 的百分比,然后选择出百分比大于阈值的特征,详见feature-selector.py的114-136行。
https://github.com/WillKoehrsen/feature-selector/blob/master/feature_selector/feature_selector.py#L114-L136
For detailed information on the missing fractions, we can access the missing_stats attribute, a dataframe of the missing fractions for all features.
fs.missing_stats.head(10)
4.具有高相关性的特征
该方法用于选择相关性大于指定值(通过correlation_threshold指定值)的feature。该方法同样适用于监督学习和非监督学习。