feature-selector
基于 LightGBM 的机器学习特征筛选工具,5 种策略自动识别需剔除的低价值特征
加载项目详情…
本应用为开源项目,仅供学习研究,请遵守其开源协议。
基于 LightGBM 的机器学习特征筛选工具,5 种策略自动识别需剔除的低价值特征
加载项目详情…
本应用为开源项目,仅供学习研究,请遵守其开源协议。
图1:特征共线性热力图示例

图2:缺失值分布直方图示例

图3:特征重要性数据框架图

想象一下:你拿到了一份客户数据,包含2000个特征维度——购买记录、浏览行为、人口统计学信息……模型训练跑了几小时,结果准确率只有62%。问题很可能不在算法本身,而在那些"沉默"的特征身上。
Feature Selector 是由数据科学家 Will Koehrsen 开发的一个 Python 工具,专门解决机器学习中的特征筛选问题。它不是什么复杂的深度学习框架,而是一个实打实的"特征过滤器"——帮你从海量特征中找出真正有用的那些,把没用甚至有害的特征剔除掉。
Feature Selector 的诞生背景非常实际。Koehrsen 在参加多个机器学习竞赛和实际项目中,发现一个普遍痛点:高维数据集的特征筛选是个体力活,而且很容易出错。 传统方法要么太简单(只剔除缺失值),要么太复杂(需要自己写代码计算共线性、特征重要性)。
作者 Koehrsen 是 Towards Data Science 的热门作者,以写高质量技术博客著称。这个工具在 GitHub 上获得了超过2200颗星,是该领域最受欢迎的特征筛选工具之一,印证了机器学习从业者对"简化特征筛选流程"的强烈需求。
Feature Selector 实现了五种互补的特征筛选方法,涵盖了从基础统计到机器学习模型的不同维度:
1. 缺失值筛选(Missing Values)
如果某个特征超过指定比例(比如50%)的值是缺失的,它对模型几乎没有任何贡献。Feature Selector 自动计算每个特征的缺失率,高于阈值的特征会被标记出来。这一步通常是最基础也最有效的清洗。
2. 单值特征筛选(Single Unique Values)
当一个特征只有唯一值时(如全部为1),它对区分样本毫无作用。工具自动检测这类"常数特征",直接剔除。
3. 共线性筛选(Collinear Features)
这是最体现领域知识的部分。当两个特征高度相关(比如"总收入"和"税后收入"),保留其中一个就足够了。工具计算完整的相关系数矩阵,用上三角矩阵方式检测冗余特征对,默认保留在数据集中出现较晚的那个特征。
4. 零重要性筛选(Zero Importance)
利用 LightGBM 梯度提升模型,计算每个特征对目标变量的信息增益。那些对模型预测毫无贡献的特征(重要性为0)会被识别出来。这一步需要提供训练标签,因此比纯统计方法更有针对性。
5. 低重要性筛选(Low Importance)
在零重要性基础上更进一步:可以设定一个累积重要性阈值(比如前95%的重要性),低于这个阈值的特征都被认为贡献不足。这一策略在 Kaggle 竞赛中被广泛验证是有效的。
整个项目的核心代码集中在一个约30KB的 Python 文件中,设计思路非常清晰。核心是 FeatureSelector 类,包含以下关键方法:
class FeatureSelector():
def __init__(self, data, labels=None)
def identify_missing(self, threshold)
def identify_single_unique(self)
def identify_collinear(self, threshold)
def identify_zero_importance(self, task, eval_metric, n_iterations)
def identify_low_importance(self, threshold)
def identify_all(self, params) # 一键运行所有筛选
def remove(self, methods, keep_none)
这种"数据类 + 方法链"的风格深受 scikit-learn 影响,对于熟悉 sklearn 的开发者来说几乎没有学习成本。依赖项也很克制:numpy、pandas、scikit-learn、lightgbm、matplotlib、seaborn——全是机器学习领域的标准库。
Feature Selector 不仅仅是删除特征的"黑箱",它内置了多个可视化方法,帮助数据科学家理解特征分布:
这些图表可以直接插入 Jupyter Notebook 报告,或者用在数据审查会议中。
值得肯定的是,这个项目也有一些明显的局限性:
版本老旧:requirements.txt 中 numpy 版本锁定在 1.22.0,pandas 在 0.23.1,与当前的 Python 3.10+ 生态环境存在兼容性问题。作者已长期未更新项目,最后一次提交已过去多年。
仅支持表格数据:无法处理文本、图像等非结构化数据的特征筛选。
特征重要性依赖单一模型:零重要性和低重要性筛选都依赖 LightGBM,若换成其他模型(如 XGBoost 或神经网络),结果可能有差异。
尽管有上述局限,Feature Selector 在机器学习工程化领域仍有其独特价值。它将特征筛选从"手工作坊"变成了"流水线作业",让数据科学家能够快速建立基准特征集,把更多精力放在模型调优和业务理解上。这个思路后来被许多 AutoML 框架借鉴——自动特征选择已成为现代 AutoML 工具链的标准环节。
如果你正在处理一个高维数据集,无论是 Kaggle 竞赛还是实际业务场景,Feature Selector 都值得加入你的工具箱。