首页 欧洲联赛正文

草房子,一个能够进行机器学习特征挑选的python东西,马油的功效与作用

作者:Will Koehrsen
编译:ronghuaiyang

导读

用这个东西可以高效的构建机器学习作业流程。一起来了解一下这个东西吧。

特征挑选是在数据会集寻觅和挑选最有用的特征的进程,是机器学习pipeline中的一个要害步骤。不必要的特征降低了练习速度,降低了模型的可解释性,最重要的是,降低了测验集的泛化功用。

我发现自己一遍又一遍地为机器学习问题运用特别的特征挑选办法,这让我感到懊丧,所以我在Python中构建了一个特征挑选类可在GitHub上找到。 FeatureSelector包括一些最常见的特征挑选办法:

  1. 缺失值百分比高的特征
  2. 共线性(高相关性)的特征
  3. 在依据树的模型中零重要性的特征
  4. 低重要性的特征
  5. 具有单一仅有值的特征

在本文中,咱们将在一个样例机器学习数据集上运用 FeatureSelector。咱们将无痛起床法看到它怎样答应咱们快速完成这些办法,然后完成更有用的作业流。

完好的代码可在GitHub上取得,我鼓舞任何奉献。 Feature Selector正在开发中,并将依据社区的需求不断改进!

样例数据集

在肖艺能本例中,咱们将运用Kaggle上的Home Credit Default Risk machine learning competition数据。(要开端竞赛,请拜见本文)。整个数据集可下载,这儿咱们将运用一个例子来演示。

样例数据,TARGET是分类的标签

这个竞赛是一个监督分类问题,这是一个很好的数据集,因为它有许多缺失的值,许多高度相关(共线)的特征,和一些不相关的特征,这对机器学习模型没有协助。

创立实例

要创立 FeatureSelector类的实例,咱们需求传入一个结构化数据集,其间包括行和列中的特征。咱们可以运用一些只要特征的办法,可是依据重要性的办法也需求练习标签。因为咱们有一个监督分类使命,咱们将运用一组特征和一组标签。

(保证在与feature_selector.py相同的目录中运转这个脚本)

办法

特征挑选器有五种办法来查找要删去的特征。咱们可以拜访任何已辨认的特征并手动从数据中删去它们,或许运用特征挑选器中的“remove”函数。

在这儿,咱们将具体介绍每种辨认办法,并展现怎样一起运转一切5种办法。 FeatureSelector还具有一些绘图功用,因为可视化查看数据是机器学习的要害组件。

缺失值

查hotmovies找要删去的特征的榜首种办法很简单:看看哪些特征的缺失值的份额大于某个阈值。下面的调用标识了缺失值超越60%的特征。

fs.identify_missing(missing_threshold = 0.6)
17 features with greater t草房子,一个可以进行机器学习特征挑选的python东西,马油的成效与效果han 0.60 missing values奸女.

咱们可以看到dataframe中每一列缺失值的份额:

fs.missing_stats.head()

要查看要删去的特征,咱们拜访 FeatureSelector的 ops特点,这是一个Python字典,值为特征列表。

missing_features = fs.ops['missing']
missing_features[:5]
['OWN_CAR_AGE',
'YEARS_赵文琪不文雅相片BUILD_AVG',
'COMMONAREA_AVG',
'FLOORSMIN_AVG',
'LIVINGAPARTMENTS_AVG']

最终,咱们制作了一切特征缺失值的分布图:

fs.plot_missing()

共线性的特征

共线性特征是互相高度相关的特征。在机器学习中,因为方差大、模型可解释性差,导致测验集泛化功用下降。

办法 identify_collin苍白国际ear依据指定的相关系数值查找共线特征。关于每一对相关的特征,它辨认出要性感背影删去的特征之一(因为咱们只需求删去一个):

fs.identify_collinear(correlation_threshold = 0.98)
21 features with a correlation magnitude greater than 0.98.

咱们可以用相关做出一个明晰的可视化,那就是热图。这显现了在阈值以上至少有一个相关性特征的一切特征:

fs.plot_collinear()

如前所述,咱们可以拜访即将删去的相关特征的整个列表,或许查看dataframe中高度相关的特征对。

# list of collinear features to remove
collinear_features = fs.ops['collinear']
# dataframe of collinear features
fs.record_collinear.head()

假如咱们想要研讨咱们的数据集,咱们还可以经过将 plot_all=True传递给调用来制作数据中一切相关的图表:

零重要性特征

前两种办法可以运用于任何结构化数据集,并且是确认性的——关于给定的阈值,每次成果都是相同的。下一种办法只适用于有监督的机器学习问题,在这种问题中,咱们有练习模型的标签,并且是不确认的。 identify_zero_importance函数依据梯度提升机(GBM)学习模型查找不重要的特征。

运用依据树的机器学习模型,例如增强集成草房子,一个可以进行机器学习特征挑选的python东西,马油的成效与效果,咱们可以找到特征重要性。重要性的绝对值没有相对值重要,相对值可以用来确认使命的最相关的特征。咱们还可以经过删去零重要性的特征来进行特征挑选。在依据树的模型中,不运用零重要性的特征来切割任何节点,因而咱们可以在不影响模型功用的情况下删去它们。

FeatureSelector聂鑫怎样强撑的一年半运用LightGBM库中的梯度提升机查找特征重要性。为了削减方差,将GBM的10次练习的特征重要性核算均匀值。此外,运用带有验证集的early stop(可以挑选封闭验证集)对模型4007070102进行练习,以避免对练习数据的过拟合。

下面的代码调用该办法,提取零重要性特征:

咱们传入的参数如下:

使命:对应问题的“分类”或“回归”

eval_metric:用于前期中止的目标(假如禁用了前期中止,则没有必要运用该目标)

n_iteration:练习次数,用来对特征重要性取均匀

early ly_stop:是否运用early stop来练习模型

这次咱们得到了两个带有 plot_feature_importances的图:

# plot the feature importances
fs.plot_feature_importances(threshold = 0.99, plot_n = 12)
124 features required for 0.99 of cumulative importance成功88规律

在左面,咱们有 plot_吕会贤n最重要的特征(依照归一化重要性制作,总和为1),在右边,咱们有相关于特征数量的累积重要性。垂直线是在累积重要性的“阈值”处制作的,在本例中是99%。

关于依据重要性的办法,有两个注意事项值得记住:

  • 梯度提升机的练习是随机的,这意味着每次运转模型时特征输入都会发生改动

这陈俊宇父亲应该不会发生严重影响(最重要的特征不会忽然变得最不重要)草房子,一个可以进行机器学习特征挑选的python东西,马油的成效与效果,可是它会改动一些特征的次序。它还可以影响辨认的零重要性特征的数量。假如特征的重要性每次都发生改动,不要感到惊奇!

  • 为了练习机器学习模型,首要对特征进行“独热编码”。这意味着一些重要性为0的特征可能是在建模进程中增加的独热编码特征。

当咱们抵达特征删去阶段时,有一个选项可以删去任何增加的独热编码特征。但是,假如咱们在特征挑选之后进行机器学习,咱们仍是要对特征进行一次独热编码!

低重要性特征

下一个办法建立在零重要性函数的基础上,运用模型的特征输入进行进一步的挑选。函数 identify_low_importance查找对总重要性没什么奉献的最低重要性的特征。

例如,下面的调用找到了最不重要的特征,这些特征关于99%的总重要性是不需求的:

fs.identify_low_importance(cumulative_importanc亹亹e = 0.99)
123 features required for cumulative importance of 0.99 af艾敬为什么被禁ter one hot encoding.
116 features do not contribute to cumulative importance of 0.99.

依据累积重要性图和这些信息,梯度提升机以为许多特征与学习开嗓针无关。相同,这种办法的成果将在每次练习运转时发生改动。立岛夕子

要查看dataframe中的一切重要特征:

fs.feature_importances.head(10)

low_importance办法学习了运用主成分剖析(PCA)的一种办法,这种办法一般只保存需求保存必定百分比的方差(如95%)的PC。占总重要性的百分比是依据相同的思维。

依据特征重要性的办法只要在咱们运用依据树的模型进行预测时才真实适用。除了随机性之外,依据重要性的办法是一种黑盒办法,因为咱们不知道为什么模型以为这些特征是无关的。假如运用这些办法草房子,一个可以进行机器学习特征挑选的python东西,马油的成效与效果,请屡次运转它们以查看成果的改动,或许还可以创立具有不同参数的多个数据集进行测验!

单一仅有值的特征

最终一个办法是适当根本的:找到任何只要一个专一值的列。只要一个专一值的特征对机器学习没有用途,因为这个特征的方差为零。例如,依据树的模型永久不能对只要一个值的特征进行切割(因为没有分组来区分调查成果)。

这儿没有参数挑选,不像其他办法:

fs.identify_singl王丽坤老公及二个儿子e_unique()
4 features with a single unique value.

咱们可以制作每个类别中仅有值的数量直方图:

fs.plot_unique()

需求记住的一点是,在默许情况下核算panda中的专一值之前先删去 NaNs 。

去除特征

一旦咱们确认了要丢掉的特征,咱们有两个选项来删去它们。一切要删去的特征都存储在 FeatureSelector的 ops字典中,咱们可以运用列表手动删去特征。另一个选项是运用“remove”内置函数。

关于这个办法,咱们传入用于删去特征的 办法。假如咱们想运用一切完成的办法,咱们只需传入 methods='all'。


# Remove the features from all methods (returns a df)
train_removed = fs.remove(methods = 'all')
['missing', 'single_unique', 'collinear', 'zero_importance', 'low_importance'] methods have been run

Removed 140 features.

此办法返草房子,一个可以进行机器学习特征挑选的python东西,马油的成效与效果回一个删去了特征的dataframe。还可以删去机器学习进程中创立的独热编码特征:

train_removed_all = fs.remove(methods = 侠影神剑'all', keep_one_hot=False)
Removed 187 features including one-hot features.

在持续操作之前,查看将被删去的特征可能是一个好主意!原始数据集存储在 FeatureSelector的 data 特点中作为备份!

一北田共是什么字次运转一切办法

咱们可以运用 identify_all而不是独自运用这些办法。这需求每个办法的参数字典:

请注意,因为咱们从头运转了模型,总特征的数量将发生改动。然后可以调用“remove”函数草房子,一个可以进行机器学习特征挑选的python东西,马油的成效与效果来删去这些特征。

总结

在练习机器学习模型之前,Feature Selector类完成了几个常见的删去特征的操作。它供给了辨认要删去的特征以及可视化功用。办法可以独自运转,也可以一次悉数运转,以完成高效的作业流。

missing、 collinear和 s草房子,一个可以进行机器学习特征挑选的python东西,马油的成效与效果ingle_unique办法是确认的,而依据特征重要性的办法将跟着每次运转而改动。特征挑选,就像机器学习范畴,很大程度上是经验主义的,需求测验多个组合来找到最佳答案。在pipeline中测验几种装备是最佳实践,特征挑选器供给了一种快速评价特征挑选参数的办法。

英文原文:https://towardsdatascience.com/a-feature-selection-tool-for-machine-learning-in-python-b64dd23710f0

请长按或扫描二维码重视本大众号

版权声明

本文仅代表作者观点,不代表本站立场。
本文系作者授权发表,未经许可,不得转载。