一文讲清楚人工智能特征工程--特征选择

356 阅读5分钟

前言

在前文笔者为大家讲解了在机器学习和深度学习模型中普遍运用的数据预处理技术--数据清洗,以此来帮助我们的模型更好地学习到特征和数据。但是大家有没有想过,我们在清洗数据特征的同时,有没有想过有些特征其实是干扰项,需要我们去掉,有些特征其实是强特征,需要我们着重关注,怎么筛选出这些特征呢 ? 特征选择应运而生。

一、定义和类型

1. 定义

特征选择是人工智能特征工程中的关键步骤,它涉及从原始数据集中挑选出对模型预测任务最有用的特征。这个过程可以帮助提高模型的准确性,减少训练时间,降低过拟合的风险,并提高模型的可解释性。以下是特征选择的一些主要方法:

2. 特征选择结构图

image.png

3. 不同类型的方法

为了帮助大家更好地理解,笔者直接把例子穿插在每个方法当中:

想象一下,你现在是世界级厨艺大师,准备参加一个烹饪比赛。你的冰箱里有各种各样的食材,但你只需要用其中的一部分来制作一道能够赢得评委青睐的菜肴。这就像是特征选择的过程。

例子:烹饪比赛

目标:制作一道美味的意大利面。

食材库(原始数据集):

  • 意大利面(必须有)
  • 番茄酱(推荐)
  • 洋葱(可选)
  • 胡萝卜(可选)
  • 辣椒(可选)
  • 奶酪(可选)
  • 橄榄油(必须有)
  • 盐和胡椒(必须有)

3.1 过滤方法(Filter Methods)

过滤方法是基于统计技术来选择特征,不考虑模型的。常见的过滤方法包括:

  • 相关系数:选择与目标变量相关性高的特征。
  • 卡方检验(Chi-squared test):评估特征和目标变量之间的独立性。
  • 互信息和最大信息系数(Mutual Information):评估特征对目标变量的信息增益。

例子讲解: 你决定只使用那些在传统意大利面中常见的食材,所以你排除了辣椒(因为它可能不适合所有评委的口味)。这就像是通过过滤方法移除不相关或不太重要的特征。

3.2 包装方法(Wrapper Methods)

包装方法将特征选择过程视为搜索问题,直接针对模型性能来评估特征子集。

  • 前向选择(Forward Selection):从空集开始,逐步添加特征,直到模型性能不再提升。
  • 后向消除(Backward Elimination):从全集开始,逐步删除特征,直到模型性能不再下降。
  • 递归特征消除(Recursive Feature Elimination, RFE):递归地构建模型并选择最佳或最差的特征。

例子讲解: 你尝试了几种不同的食材组合,发现每次使用番茄酱、洋葱和奶酪时,评委的反馈最好。这就像是通过包装方法,基于模型性能来选择特征。

3.3 嵌入方法(Embedded Methods)

嵌入方法在模型训练过程中进行特征选择。

  • L1正则化(Lasso):通过惩罚项将不重要特征的系数压缩至零。
  • 决策树:基于树模型的特征重要性评分来选择特征。

例子讲解: 你决定使用一个已经证明在类似比赛中有效的食谱,这个食谱强调了番茄酱和奶酪的重要性。你决定根据这个食谱来选择你的食材,这就像是嵌入方法,其中模型训练过程中的特征选择。

3.4 特征重要性评估和交叉验证

一些模型如随机森林和梯度提升树可以提供特征重要性评分,这些评分可以用来选择特征。为了确保特征选择的稳定性和可靠性,可以使用交叉验证来评估不同特征子集的性能。笔者比较常用的就是K折交叉验证。

最终选择 :

你选择了意大利面、番茄酱、洋葱、奶酪、橄榄油、盐和胡椒。你没有选择胡萝卜,因为它虽然有营养,但在这个特定的菜肴中并不增加价值。

结果 :

你的意大利面在比赛中获得了高度评价,你赢得了冠军。通过精心选择食材(特征),你制作了一道既美味又符合评委期望的菜肴。真厉害!!!!!!!

总之,在上面这个例子中,食材就像是数据集中的特征,而你的菜肴(模型)的性能取决于你选择的食材(特征)。特征选择帮助你剔除了那些不会增加菜肴价值的食材,确保了最终的菜肴既美味又符合评委的期望。

二、实战代码

以下是我使用递归特征消除(RFE)和逻辑回归的特征选择:

from sklearn.datasets import load_iris
from sklearn.linear_model import LogisticRegression
from sklearn.feature_selection import RFE

# 加载数据集
iris = load_iris()
X, y = iris.data, iris.target

# 创建逻辑回归模型
model = LogisticRegression()

# 使用RFE进行特征选择,选择3个最重要的特征
rfe = RFE(model, n_features_to_select=3, step=1)
X_rfe = rfe.fit_transform(X, y)

# 打印被选择的特征
selected_features = iris.feature_names[rfe.support_]
print("Selected features:", selected_features)

在这个例子中,我使用逻辑回归作为基础模型,通过递归地考虑越来越小的特征集来选择特征。在后面一篇文章中,笔者会给出利用机器学习随机森林模型进行特征选择的实战项目,大家可以尽情关注。

三、Reference

blog.csdn.net/Datawhale/a…

以上就是笔者关于人工智能特征工程中特征选择技术的详解,欢迎大家点赞,收藏,交流和关注,O(∩_∩)O谢谢!