高效便捷的特征筛选工具——Powershap

教育   科技   2024-07-22 18:00   湖北  

点击“算法数据侠”,“星标”公众号
阅读今日所有推文,汇聚好运召唤神龙
Fighting,小侠客们好呀,今天的侠客主题是高效便捷的特征筛选工具——Powershap。在机器学习和统计学中,特征选择(feature selection)也被称为变量选择、属性选择或变量子集选择 。它是指:为了构建模型而选择相关特征(即属性、指标)子集的过程。使用特征选择技术主要有三个原因:
1、简化模型,使之更易于被研究人员或用户理解;
2、缩短训练时间;
3、改善通用性、降低过拟合。
要使用特征选择技术的关键假设是:训练数据包含许多冗余或无关的特征,因而移除这些特征并不会导致丢失信息。冗余或无关特征是两个不同的概念。如果一个特征本身有用,但如果这个特征与另一个有用特征强相关,且那个特征也出现在数据中,那么这个特征可能是冗余的。特征选择技术与特征提取有所不同。特征提取是从原有特征的功能中创造新的特征,而特征选择则只返回原有特征中的子集。来吧,涨涨姿势~

01

特征选择算法

特征选择算法可以被视为搜索技术和评价指标的结合。前者提供候选的新特征子集,后者为不同的特征子集打分。最简单的算法是测试每个特征子集,找到究竟哪个子集的错误率最低。这种算法需要穷举搜索空间,难以算完所有的特征集,只能涵盖很少一部分特征子集。选择何种评价指标很大程度上影响了算法。而且,通过选择不同的评价指标,可以把特征选择算法分为三类:包装类、过滤类和嵌入类方法

A、包装类方法使用预测模型给特征子集打分。每个新子集都被用来训练一个模型,然后用验证数据集来测试。通过计算验证数据集上的错误次数(即模型的错误率)给特征子集评分。由于包装类方法为每个特征子集训练一个新模型,所以计算量很大。不过,这类方法往往能为特定类型的模型找到性能最好的特征集。
B、过滤类方法采用代理指标,而不根据特征子集的错误率计分。所选的指标算得快,但仍然能估算出特征集好不好用。常用指标包括互信息、逐点互信息、皮尔逊积矩相关系数、每种分类/特征的组合的帧间/帧内类距离或显著性测试评分。过滤类方法计算量一般比包装类小,但这类方法找到的特征子集不能为特定类型的预测模型调校。由于缺少调校,过滤类方法所选取的特征集会比包装类选取的特征集更为通用,往往会导致比包装类的预测性能更为低下。
C、嵌入类方法包括了所有构建模型过程中用到的特征选择技术。这类方法的典范是构建线性模型的LASSO方法。该方法给回归系数加入了L1惩罚,导致其中的许多参数趋于零。任何回归系数不为零的特征都会被LASSO算法“选中”。计算复杂度往往在过滤类和包装类之间。
02

Powershap介绍

本文所介绍的Powershap是一种新的包装器特征选择方法,该方法利用统计假设测试,结合Shapley值进行快速直观的特征选择。Powershap的基本假设是:与随机特征相比,信息特征将对预测结果产生更大的影响。基准测试和仿真表明,Powershap优于其它过滤类的方法,预测性能与包装器方法相当,但速度明显更快,通常甚至达到执行时间的一半或三分之一。

Shapley值是一种博弈论解决方案概念,它要求将利润和成本公平地分享给联盟中的众多代理人。当两个或更多参与者或组件参与策略以获得期望的结果或支出时,这被称为博弈论。Shapley值最适用于每个参与者的贡献不均,但每个人共同努力实现收益或支出的情况。Shapley值可确保每个参与者获得的收益与单独操作时相同或更多。获得的价值至关重要,因为参与者没有动机进行其他交互。

下面是Powershap的算法伪代码:

整个算法可以分为以下3个步骤:
1、Powershap在不同的数据子集上使用不同的随机种子训练多个模型。每次迭代它都会向数据集添加一个随机均匀分布特征进行训练;
2、在训练模型后的单次迭代中,Powershap计算所有特征的绝对Shapley值,包括增加的随机特征。然后将这些值对每个特征进行平均,以象征该特征在此迭代中的影响;
3、在执行所有迭代之后,每个特征都会产生一系列影响。然后使用百分位数公式将每个特征的影响数组与随机特征影响数组的平均值进行比较,以提供p值。这将测试该特征是否比随机特征具有更大的影响,如果为真则输出较低的p值。Powershap然后输出p值低于提供的阈值的所有特征,阈值默认为0.01。

03

使用示例

Powershap提供的构建非常直观,它支持各种模型,包括用于分类和回归任务的线性、基于树甚至深度学习模型。作为一个即插即用的开源sklearn组件,Powershap可以轻松地与传统的数据科学管道进行整合。通过提供自动模式,自动调整powershap算法的超参数,允许使用该算法而不需要任何配置,从而进一步增强了用户体验。下面以catboost分类模型作为使用示例:

from powershap import PowerShap
from catboost import CatBoostClassifier

X, y = ... # your classification dataset

selector = PowerShap(
model=CatBoostClassifier(n_estimators=250, verbose=0, use_best_model=True)
)

selector.fit(X, y) # Fit the PowerShap feature selector
selector.transform(X) # Reduce the dataset to the selected features
from powershap import PowerShap
from catboost import LinearRegression

X, y = ... # your classification dataset

selector = PowerShap(
model=LinearRegression(n_estimators=250, verbose=0, use_best_model=True)
)

selector.fit(X, y) # Fit the PowerShap feature selector
selector.transform(X) # Reduce the dataset to the selected features

04

结果展示

05

结束语

以上就是高效便捷的特征筛选工具——Powershap的所有内容了。通过包装特征方法的Shapley值和统计检验用于确定特征的相关性,实验结果是显著的。为了实现快速、强大和可靠的特征选择,Powershap执行高效计算以在自动模式下优化所需的迭代次数。最后,感兴趣的小侠客可以点击文末左下角“阅读原文”进入Powershap官方项目深度学习,查看更多test experiments的算法细节。今天的内容到此结束,我们下次再见咯~

算法数据侠
Hi, 今日的你比昨日更优秀!算法数据侠致力于最全最优质的AI算法与数据集分享,不定期更新AI算法/数据集、竞赛TOP方案和前沿学术速递,期待各位小侠客共勉!
 最新文章