前往小程序,Get更优阅读体验!
立即前往
首页
学习
活动
专区
工具
TVP
发布
社区首页 >专栏 >竞赛大师自研特征重要性秘籍!

竞赛大师自研特征重要性秘籍!

作者头像
炼丹笔记
发布2021-10-26 13:31:48
4610
发布2021-10-26 13:31:48
举报
文章被收录于专栏:炼丹笔记

↑↑↑关注后"星标"炼丹笔记

炼丹笔记干货

作者:杰少

Kaggle GM分享自研特征重要性工具包--LOFO

简 介

LOFO是Kaggle GM自研的一种特征重要性绘制的方案,相较于其它的特征重要性方法,其特点在于:

  • 它并不favor granular的特征;
  • 它可以较好地泛化到未知的测试集;
  • 它是模型agnostic的;
  • 对于带来负面效果的特征模型会给予它一个负的值;
  • 它可以对特征进行分组。特别适用于高维特征,如TFIDF或OHE特征。
  • 它可以自动对高度相关的特征进行分组,以防止低估其重要性。

LOFO和我们平时的建模策略思路是非常类似的,作者也是Kaggle GM,非常值得学习一下。

LOFO

01

基本思路

LOFO(Leave one Feature Out)的重要性通过:

  • 迭代地从特征集合中删除一个特征,并基于选择的度量,使用选择的验证方案评估模型的性能来计算一组集合特征的重要性。

02

基本步骤

LOFO的基本步骤为:

  1. 先输入所有的特征,LOFO基于所有的特征评估包含全部特性的模型的效果;
  2. 一次迭代删除一个特性,重新训练模型,并在验证集上评估其效果;
  3. 然后记录每个特征重要性的平均值和标准偏差。

注意,如果我们不传入任何模型,LOFO默认运行的模型是LightGBM。

03

FastLOFO

因为枚举的关系,LOFO工具包会相对耗时间,如果希望快速得到特征重要性,可以使用Fast LOFO.

  • Fast LOFO会使用已经训练好的模型,以及一个验证集合,对每个特征的值进行随机伪随机数扰动,然后使用训练好的模型对其进行预测,FLOFO的特征重要性就是在验证集合上面模型的预测结果与之前不扰动结果的差值。该思路和Permutation Feature Importance非常相似,但其还有一个特点:扰动是在groups内进行的,这么做的好处在于(参见作者的描述):

The permutations on a feature's values are done within groups, where groups are obtained by grouping the validation set by k=2 features. These k features are chosen at random n=10 times, and the mean and standard deviation of the FLOFO importance are calculated based on these n runs. The reason this grouping makes the measure of importance better is that permuting a feature's value is no longer completely random.

In fact, the permutations are done within groups of similar samples, so the permutations are equivalent to noising the samples. This ensures that:

  • The permuted feature values are very unlikely to be replaced by unrealistic values.
  • A feature that is predictable by features among the chosen n*k features will be replaced by very similar values during permutation. Therefore, it will only slightly affect the model performance (and will yield a small FLOFO importance). This solves the correlated feature overestimation problem.

Code

案例摘自:https://github.com/aerdem4/lofo-importance

代码语言:javascript
复制
import numpy as np
import pandas as pd
from sklearn.linear_model import LinearRegression
from sklearn.ensemble import RandomForestClassifier
from sklearn.model_selection import KFold
from lofo import LOFOImportance, FLOFOImportance, Dataset, plot_importance

from data.test_data import generate_test_data, generate_unstructured_test_data

df = generate_test_data(1000)
df.head()

lr = LinearRegression()
lr.fit(df[["A", "B", "C", "D"]], df["target"])

fi = FLOFOImportance(lr, df, ["A", "B", "C", "D"], 'target', scoring="neg_mean_absolute_error")

importances = fi.get_importance()
importances

适用情况

LOFO目前适用于所有的模型,而且也十分符合我们的直观建模策略。

参考文献

  1. https://github.com/aerdem4/lofo-importance
本文参与 腾讯云自媒体同步曝光计划,分享自微信公众号。
原始发表:2021-10-16,如有侵权请联系 cloudcommunity@tencent.com 删除

本文分享自 炼丹笔记 微信公众号,前往查看

如有侵权,请联系 cloudcommunity@tencent.com 删除。

本文参与 腾讯云自媒体同步曝光计划  ,欢迎热爱写作的你一起参与!

评论
登录后参与评论
0 条评论
热度
最新
推荐阅读
领券
问题归档专栏文章快讯文章归档关键词归档开发者手册归档开发者手册 Section 归档