登陆

极彩在线-一个能够进行机器学习特征挑选的python东西

admin 2019-12-04 215人围观 ,发现0个评论
作者: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类的实例,我们需要传入一个结构化数据集,其中包含行和列中的特征。我们可以使用一些只有特征的方法,但是基于重要性的方法也需要训练标签。由于我们有一个监督分类任务,我们将使用一组特极彩在线-一个能够进行机器学习特征挑选的python东西征和一组标签。

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

方法

特征选择器有五种方法来查找要删除的特征。我们可以访问任何已识别的特征并手动从数据中删除它们,或者使用特征选择器中的“remove”函数。

在这里,我们将详细介绍每种识别方法,并展示如何同时运行所有5种方法。 FeatureSelector还具有一些绘图功能,因为可视化检查数据是机器学习的关键组件。

缺失值

查找要删除的特征的第一种方法很简单:看看哪些特征的缺失值的比例大于某个阈值。下面的调用标识了缺失值超过60%的特征。

fs.identify_missing(missing_threshold =桂平挖蛇事件 0.6)
17 features with great极彩在线-一个能够进行机器学习特征挑选的python东西er than 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_collinear根据指定的相关系数值查找共线特征。对于每一对相关的特征,它识别出要删除的特征之一(因为我们只需要删除一个):

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)学习模型查找不重要的特征。

使用基于树的机器学习模型,例如增强集成,我们可以找到特征重要性。重要性的绝对值没有相对值重要,相对值可以用来确定任务的最相关的特征。我们还可以通过删除零重要性的特征来进行特征选择。在基于树的模型中,不使用零重要性的特征来分割任何节点,因此我们可以在不影响模型性能的情况下删除它们。

FeatureSelector使用LightGBM库中的梯度极彩在线-一个能够进行机器学习特征挑选的python东西提升机查找特征重要性。为了减少方差,将GBM的10次训练的特征重要性计算平均值。此外,使用带有验证集的early stop(可以选择关闭验证集)对模型进行训练,以防止对训练数据的过拟合。

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

我们传入的参数如下:

任务:对应问题的“分类”或“回归”

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

在左边,我们有 plot_n最重要的特征(按照归一化重要性绘制,总和为1),在右边,我们有相对于特征数量的累积重要性。垂直线是在累积重要性的“阈值”处绘制的,在本例中是99%。

对于基于重要性的方法,有两个注意事项值得记住:

  • 梯度提升机的训练是随机的,这意味着每次运行模型时特征输入都会发生变化

这应该不会产生重大影响(最重要的特征不会突然变得最不重要),但是它会改变一些特征的顺序。它还可以影响识别的零重要性特征的数量。如果特征的重要性每次都发生变化,不要感到惊讶!

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

当我们到达特征删除阶段时,有一个选项可以删除任何添加的独热编码特征。然而,如果我们在特征选择之后进行机器学习,我们还是要对特征进行一次独热编码!

低重要性特征

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

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

fs.identify_low_importance(cumulative_importance = 0.99)
123 features required for cumulative importance of 0.99 after 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_single_unique()
4 features with a single unique value.

我们可以绘制每个类别中唯一值的数量直方图:

fs.plot_unique()

需要记住的一点是,在默认情况下计算panda中的惟一值之前先删除 NaNs 。

去除特征

一旦我们确定了要丢弃的特征,我们有两个选项来删除它们。所有要删除的特征都存储在 FeatureSelector的 ops字典中,我们可以使用列表手动删除特征。另一个选项是使用“remove”内置函数。

对于这个方法,我们传入用于删除特征的 方极彩在线-一个能够进行机器学习特征挑选的python东西法。如果我们想使用所有实现的方法,我们只需传入 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.

此方法返回一个删除了特征的dataframe。还可以删除机器学习过程中创建的独热编码特征:

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

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

一次运行所有方法

我们可以使用 identify_all而不是单独使用这些方法。这需要每个方法的参数字典:

请注意,由于我们重新运行了模型,总特征的数量将发生变化。然后可以调用“remove”函数来删除这些特征。

总结

在训练机器学习模型之前,Feature Sel极彩在线-一个能够进行机器学习特征挑选的python东西ector类实现了几个常见的删除特征的操作。它提供了识别要删除的特征以及可视化功能。方法可以单独运行,也可以一次全部运行,以实现高效的工作流。

missing、 collinear和 single_unique方法是确定的,而基于特征重要性的方法将随着每次运行而改变。特征选择,就像机器学习领域,很大程度上是经验主义的,需要测试多个组合来找到最佳答案。在pipeline中尝试几种配置是最佳实践,特征选择器提供了一种快速评估特征选择参数的方法。

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

请长按或扫描二维码关注本公众号

我国绝不搞量化宽松 各方需协力应对全球性应战

2020-01-24
  • 极彩在线-国资委寻求企业专家定见 三年举动计划抓住酝酿
  •   放眼全国,像小邱这样的大学毕业生,将是多个城市争抢的对象。教育部指出,2020届高校毕业生规模预计将达到874万人,比2019年增加40万。

      在近几年的人才争夺中,以新一线城市为代表的热点地区滕子萱,普遍将关注点放在了大学生身上,陆续放宽这一群体的落户门槛,有的还给予安居补贴、购房优惠等。

      这一定程度带动了大学生的就业地选择偏好。根据麦可思研究院今年6月发布的《2019年中国大学生就业报告(就业蓝皮书)》,相比于北上广深,新一线城市的吸引力在不断增强。

      正值秋招季,21世纪经济报道记者梳理了15座新一线城市最新的大学生落户政策。根据《2019城市商业魅力排行榜》,这15座城市分别为成都、杭州、重庆、武汉、西安、苏州、天津、南京、长沙、郑州、东莞、青岛、沈阳、宁波和昆明。

      今年以来,人才争夺的势头丝毫没有减弱。截至目前,15座城市均对大学生敞开了大门,一些城市已经将落户门槛放宽至大专乃至中职毕业。

      在落户政策趋于同质化之后,各个新一线城市几乎又站到了同一起点,对于即将毕业的大学生们而言,下一个有吸引力的点是什么?

      落户政策有进一步放松趋势

      今年以来,部分新一线城市的落户政策又有进一步放松之势。

      春节过后,西安率先打响第一枪,本科及以上学历落户不再受年龄限制。2018年,西安就曾率先推出“面向全国在校大学生仅凭学生证和身份证即可完成在线落户”,新政实施三天的时间里,吸引了超过1.5万人迁入。

      杭州在5月发布了大学生落户细则,交1个月社保即可。2018年,在杭州以学历落户的条件需交满1年社保,同时居住满1年。

      重庆针对一般人才的落户政策姗姗来迟,但颇有一步到位的气魄。今年5月重庆提出,所有人才落户均不受在渝务工、就业年限和缴纳社保年限的限制,甚至没有年龄限制,并且直系亲属可随迁。而大学专科或具有初级专业技术职称以上的在重庆就业人员,即可纳入人才范畴。

      6月,青岛将毕业生落户门槛放宽至专科学历。

      武汉曾在2017年年初启动了 “百万大学生留汉创业就业工程”,今年7月又出引才留才新政,对专科人才及其配偶、未成年子女落户均敞开了大门。

      宁波也在7月出台了《关于进一步放宽我市户口准入条件的通知》,放宽“先落户再就业”适用人群的范畴,从原来要求的“全日制大专以上应届毕业生”,改为“毕业15年内的全日制普通高校、中等职业学校(含技校)毕业生”;专科学历或中级技能职业资格人才的落户社保缴纳年限要求,从原先的1年改为6个月。

      总体而言,新一线城市大多已经将人才落户的门槛放宽至大专生,仅天津和南京除外;西安、长沙、郑州、沈阳等更将中等职业学校(含技校)毕业的学生也纳入了可凭学历入户的群体。

      截至目前,各地政策的差异主要体现在:落户是否需要先就业,需要多久的社保缴纳证明,是否有年龄上限的限制。

      从这些指标来看,郑州和昆明最为宽松,既没有年龄方面的限制,也没有就业、缴纳社保的要求。若针对应届毕业生,不考虑年龄因素,武汉、西安、青岛、沈阳等城市也都允许大专生直接落户。

      此外,大约2/3的城市对应届大学生给予无差别的补贴。单看补助金额,郑州称得上最慷慨,博士3年的生活补贴5.4万元,并且最高可享受10万元的购房补贴。

      就业机会牵引人才流动

      在强劲的人才政策之下,新一线城市普遍迎来了常住人口的快速增长。2018年,西安、杭州、成都、重庆、郑州、长沙、宁波和武汉的常住人口增量都超过了18万。除深圳、广州和佛山之外,新增人口数量靠前的,均由新一线城市包揽。

      具体到大学生群体,上述《2019年中国大学生就业报告(就业蓝皮书)》的数据显示,北上广深就业比例持续下降,从2014届的25%下降到了2018届的21%。而新一线城市吸引力不断增强,从2014届的22%上升到了2018届的26%。在新一线城市就业的应届本科毕业生中,外地毕业生占比从2014届的28%上升到了2018届的37%。

      此外,刚毕业时在北上广深就业的毕业生中,三年内离开的比例明显上升,从2011届的18%上升到了2015届的24%。

      小邱告诉21世纪经济报道记者,从落户政策来看,很多城市看上去都差不多,补贴大多在几万元以内,是相对短期的小利益,可能对一些人有吸引力,但很难单靠此驱动大家做长期的就业决策。他身边的同学里确实有不少人考虑毕业后去新一线城市,但主要是跟就业机会结合起来,比如想做互联网的同学会更倾向于去杭州。

      在深圳一家高科技企业从事研发工作的小钟,正在考虑举家搬迁到成都,他所在的公司有到成都建研发中心的计划,小钟觉得这是个不错的机会。

      

  • 新一线城市招引大学生方针透视:大专生直接落户之后 又瞄准职校生了

    2020-01-24
  • 极彩在线-静海将打造全球智能工业立异高地

    极彩在线-静海将打造全球智能工业立异高地

    2020-01-24
  • 请关注微信公众号
    微信二维码
    不容错过
    Powered By Z-BlogPHP