雷锋网AI科技评论编者按:特征选择的方法你了解多少?这篇文章的作者将带领我们认识一种新颖的特征选择方法—排列重要性,它可以帮助我们找到任何BlackBox模型的特征重要性,那么它又是怎么起作用的以及又是如何使用ELI5对其进行编码的呢?这篇文章给你答案。
本文来自数据科学家Rahul Agarwal的文章《How to find Feature importances for BlackBox Models?
》在不改变原文意思的基础上雷锋网(公众号:雷锋网)AI科技评论的编译如下:
数据科学是对算法进行的研究。我每天都要处理很多的算法,因此我想把一些最常见和最常用的算法列出来,这些算法将会在新的DS算法系列中使用。
有多少次,当你创建了很多特征的时候,但接下来你还需要想尽方法减少特征的数量?
上次我写了一篇名为《每个数据科学家都应该知道的5种特征选择算法》的文章,其中谈到了使用相关性或基于树类结构的方法,并在特征选择的过程中添加了一些结构。
最近我接触了另一种新颖的特征选择方法,叫做排列重要性。
因此,这篇文章将介绍排列重要性是如何起作用的以及如何使用ELI5对其进行编码。
什么是排列重要性
简单地说,如果我们从数据集中删除一个特定的特征,我们可以根据我们的评估指标(F1、精度AUC等)的变化来给这个特征赋予重要性。
要做到这一点可就太简单了,我们从数据集中删除了一个特征,然后训练分类器,接着查看评估指标是如何变化的。我们要对所有的特征都这样操作。
所以我们至少要拟合n次模型,其中n是模型中的特征的数量。 这意味着非常多的计算和工作量。我们是否能在这样的条件下做到更好呢?
Source:我们使用更新的数据集对特征进行排序和预测。直观地讲,如果我们的准确性或任何评估指标都没有受到影响,那我们就可以说这个特征并不重要。但如果我们的准确性受到了影响,那我们也得承认该特征确实很重要。
我们当然是可以做到的。为了计算排列的重要性,我们对单个特征的值进行改组、排列,并使用所得的数据集进行预测。
然后将这些预测用于计算我们的评估指标。直观地讲,如果我们的准确性或任何评估指标都没有受到影响,那我们就可以说这个特征并不重要。但如果我们的准确性受到了影响,那我们也得承认该特征确实很重要。
数据集
我们尝试使用数据集来更好的理解它。
我将使用一个足球运动员数据集来说明,并尝试通过用它来找出最重要的特征。
如果你不懂足球术语,也不用担心,我尽量减少使用专业术语。
你可以在这个Kaggle核心内容中查看完整的代码(https://www.kaggle.com/mlwhiz/permutation-feature-selection-using-football-data)。
简单的数据预处理
我们已经完成了一些基本的预处理任务,例如删除空值和独热码。我们还使用以下方法将问题转换成分类问题:
在这里,我们使用“高素质水平”作为优秀球员的代表。我们的数据集(X)如下所示,有223列。
训练数据X
实操
1.sklearn 模型
有了ELI5库使我们很容易就能将特征重要性应用于sklearn模型。 首先,我们要开始训练模型。
然后使用eli5 sklearn模块中的PermutationImportance函数。
结果如下:
在这里,我们注意到反应,拦截和控球是决定球员素质的最重要的特征。
2.针对BlackBox模型或非sklearn模型
我们还可以使用eli5来计算非机器学习模型的特征重要性。在这里我们训练了一个LightGBM模型。
我们需要为评分函数创建一个包装器,以计算我们的评估指标。
现在我们可以使用eli5.permutation_importance中的get_score_importances函数以获得最终的特征函数。
我们可以使用以下内容查看榜单排名前五的特征:
结论:
特征工程和特征选择是任何机器学习通道的关键部分。
我们追求模型的准确性,如果不反复查看这些模型,就不可能获得良好的准确性。
在这篇文章中,我试图将排列重要性解释为一种特征选择方法。它可以帮助我们找到任何BlackBox模型的特性重要性,这与我之前关于特征选择的文章中的技术表达不同。
如果你想了解更多关于特征工程、选择的信息,那我想告诉你“如何赢得数据科学竞赛:从Kazanova的高级机器学习专业中的顶级Kagglers课程中学习”。这个课程讨论了很多有用的特征工程、选择技术来改进模型的直观方法。绝对值得推荐。
原文链接(雷锋网注):https://towardsdatascience.com/how-to-find-feature-importances-for-blackbox-models-c418b694659d
。
原创文章,作者:ItWorker,如若转载,请注明出处:https://blog.ytso.com/industrynews/137367.html