特征工程 - 你不知道的特征筛选

不管是在机器学习,还是深度学习场景中,特征决定了模型效果的天花板。在互联网公司中,总会有那么些团队专门去做用户画像,他们提取用户落下的日志,转化成能够精准描述用户的特征,这部分特征可以自己组内提出,也可以是算法组提出,将用户用一连串的特征去表示,来达到某种特定模型上线最好的效果。

做特征,需要紧紧围绕目标去做特征,而不是为了做特征而做特征,不合适的特征后续的存储、维护问题很多,以信息流推荐场景为例,目标是希望推给用户的内容都是用户喜欢的。我们可以通过用户对推荐的某篇文章或视频的点击、点赞、评论、转发、收藏、浏览播放时长等数据来综合衡量用户对该文章或视频的喜欢程度;可以通过用户打开APP的次数、用户返回APP的时间间隔、用户一次停留时长等来衡量用户对APP的满意程度。

知道了目标,确定了衡量目标的标准,我们围绕这些标准来做特征。这部分特征包括:用户画像,用户的历史行为、用户所处的环境、文章的内容和属性等因素相关。

上线的模型并不是用了所有特征,针对不同的场景,会增加特定特征。例如,序列化推荐会添加用户历史交互信息特征 hist_item, 时序预测项目中,添加了过去m天的滑窗特征增加对未来N天的预测效果等。
 
 

在获得了诸多的特征后,如何进行特征筛选,或者类别特征和连续特征如何进行处理?

1 特征筛选方法

按照传统统计学上面的回答:

  • 基于统计量筛选:选择方差大的特征、皮尔逊相关系数(与target相关系数高,数据正态且连续)、覆盖率、假设检验。

假设检验;假设特征变量和目标变量之间相互独立,选择适当检验方法计算统计量,然后根据统计量做出统计推断。例如,对于特征变量为类别变量而目标变量为连续数值变量的情况,可以使用方差分析,对于特征变量和目标变量都为连续数值变量的情况,可以使用皮尔森卡方检验。卡方统计量取值越大,特征相关性越高。(方差分析所要研究的是分类自变量对数值因变量的影响。卡方检验分析两个变量间的关系:是否相互独立,是否来自一个总体。)

  • 基于模型选择:
    1. 基于模型参数;LR 系数
    2. 树模型;最开始分裂特征,重要的特征更有可能出现在树生成早期的节点,作为分裂节点的次数也越多。
    3. L1正则;L1可以得到稀疏解,也就是可以对特真进行降维
  • AutoML:
    1. AutoML 在推荐系统中的应用

这里再解释几种特征筛选的方法:
(1) 对于类别特征 计算单特征的 AUC

意思就是说,将所有离散特征与target离散label,计算单值特征的AUC;再进行特征重要性排序,取出单值特征AUC较高的特征。

REF: AUC 理解与应用

单特征的AUC和 训练集与验证集划分划分有关,因为拿的是训练集中特征值的占比作为预测值,划分大小不一样,映射到验证集上也不一样吧。那这样是给了数据集了 就可以手算出来了。

(2) 树模型
XGBoost, lightGBM树模型都可以用来特征筛选;运用 plot_importance() 可以得到所有特征的 score, 然后进行排序。

 
 


ps:2. 类别特征和连续特征处理方法(sparse feature, dense feature).

(1)sparse feature
离散特征是非常常见的一类特征,如性别、标签等等。

  • one-hot
  • 散列编码 (类似于 mutil-hot)
    https://www.jianshu.com/p/9c40b8dc60bf
  • 离散特征之间交叉 (男-北京,男-上海)
  • 离散特征与连续特征交叉
    将离散特征a对连续特征进行groupby,取连续特征的sum, mean, max, min;然后 to 到 离散特征后面。

(2)dense feature

  • 离散化
    分桶(等距,等频,模型分桶(聚类K类))
  • 特征交叉
    这里通过 z=f(x,y)的形式。
  • 滑窗特征
    一般用在时序数据上,通过统计过去N天同连续特征值下的mean, max, min等。
<think>好的,用户想了解随机森林中的特征工程技术或方法。首先,我需要回忆一下随机森林的基本原理,因为特征工程通常和算法的工作机制紧密相关。根据引用[1],随机森林通过Bootstrap抽样生成多个决策树,并在每个节点随机选择特征进行划分。所以特征工程在这里可能涉及到如何选择和处理这些特征。 接下来,用户提到的“特征工程”可能包括特征选择、特征重要性评估、特征构造等方面。引用[2]提到,随机森林可以用于特征重要性评估,比如通过基尼系数或信息增益来判断。此外,引用[3]指出随机森林本身可以进行特征选择降维,这可能涉及到特征重要性的排序和筛选。 我需要先整理特征工程在随机森林中的常用方法。首先是特征重要性评估,这是随机森林自带的功能,通过计算每个特征在分裂时的贡献度,比如基尼纯度的减少或信息增益的平均值。然后是基于这些重要性进行特征选择,比如保留重要性高的特征,去除低贡献的特征,这有助于降维和提高模型效率。 另外,特征构造可能也是一个方面,比如在随机森林中,是否需要进行特征交叉或组合。过随机森林本身能够处理非线性关系,可能需要太多人工构造特征,但用户可能想知道是否有相关的方法。 还需要考虑如何处理缺失值和特征编码,比如类别型变量的处理,虽然随机森林可以处理类别型特征,但通常建议使用标签编码或独热编码,特别是当库的实现需要数值输入时。 然后,用户可能想知道具体的实现步骤,比如在Python中如何使用scikit-learn库中的随机森林来获取特征重要性,或者如何利用这些重要性进行特征筛选。引用[2]提到了回归分析和机器学习模型的应用,可能需要结合特征选择方法如递归特征消除(RFE)等。 还要注意,特征工程仅仅是选择,还包括预处理,比如标准化或归一化,过对于树模型来说,这些可能那么重要,因为分裂规则特征尺度影响。但用户可能还是需要了解这一点。 现在需要检查是否有遗漏的方法,比如基于随机森林的嵌入法特征选择,或者结合其他方法如PCA和随机森林的结合使用。引用[3]中提到的Matlab代码实现可能涉及特征选择的具体步骤,比如计算重要性分数后设定阈值筛选特征。 此外,用户可能关心实际应用中的注意事项,比如特征重要性的可靠性,是否需要交叉验证来验证选择后的特征效果,以及如何处理高维数据等问题。 总结下来,回答的结构应该是先介绍特征重要性评估的方法,然后是基于重要性的特征选择,接着可能涉及其他特征处理技术如缺失值处理、编码方法,最后提到实现工具和步骤,并给出相关的问题供用户进一步探索。</think>### 随机森林中的特征工程方法及实现 随机森林通过集成多棵决策树的预测结果实现高性能分类或回归[^1]。其核心特征工程技术主要包括以下方面: #### 1. 特征重要性评估 随机森林通过以下方法自动计算特征重要性: - **基尼重要性**:统计特征在分裂时减少基尼纯度的总和。基尼纯度降低越多,特征越重要 - **平均精度下降(MDI)**:通过袋外数据(OOB)评估特征缺失对预测精度的影响 - **置换重要性**:随机打乱特征值后观察模型性能下降幅度[^2] 数学表达式示例(基尼重要性): $$Gini_{importance}(f) = \frac{1}{N_{trees}} \sum_{t=1}^{N_{trees}} \sum_{s \in S_f^{(t)}} \Delta Gini(s)$$ 其中$S_f^{(t)}$表示第t棵树中使用特征f的分裂节点集合 #### 2. 特征选择方法 基于重要性评估的特征筛选流程: 1. 训练随机森林模型 2. 提取特征重要性得分 3. 设定阈值或选择Top-K特征 4. 验证筛选特征集的模型性能 ```python from sklearn.ensemble import RandomForestClassifier # 训练模型 model = RandomForestClassifier() model.fit(X_train, y_train) # 获取特征重要性 importances = model.feature_importances_ indices = np.argsort(importances)[::-1] # 选择Top 10特征 selected_features = X.columns[indices[:10]] ``` #### 3. 特征构造优化 - **交互特征检测**:通过分析特征分裂模式发现重要特征组合 - **分箱处理**:对连续特征进行离散化以增强非线性表达能力 - **缺失值处理**:利用随机森林的缺失值自动填充机制 #### 4. 实现注意事项 - 使用交叉验证确保特征选择稳定性 - 结合递归特征消除(RFE)进行迭代优化 -特征维度极高时(>10k),可采用特征哈希加速计算[^3]
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值