0Pricing
Learn AI with Python · 课时

特征选择方法

过滤法(方差、相关性)、封装法(RFE)和嵌入法(L1 正则化)

特征选择方法 是 CoddyKit 上的免费 Learn AI with Python 课时。 这是第 1 节课,共 4 节。 你可以在下方免费阅读本课时的完整内容 — 然后在浏览器中使用内置代码编辑器和全天候 AI 导师进行实践。 这是 Learn AI with Python 学习路径的一部分,你的进度在网页和 CoddyKit 应用中同步。 Learn AI with Python 课程共包含 4 节课。

为何要选择特征

特征选择只保留最有用的列。特征更少意味着训练更快、过拟合更少,也更容易解释。移除噪声通常还能提升准确率。

三类方法

选择方法分为三组:

  • 过滤式根据统计量对特征进行排序(速度快,不依赖模型)
  • 包裹式通过训练模型搜索特征子集(速度慢,但准确)
  • 嵌入式在模型拟合过程中完成选择

VarianceThreshold

最简单的过滤方法:VarianceThreshold 会删除方差低于截断值的特征。近似恒定的列不包含任何信息。

from sklearn.feature_selection import VarianceThreshold

sel = VarianceThreshold(threshold=0.01)
X_reduced = sel.fit_transform(X)
print("Kept:", X_reduced.shape[1], "of", X.shape[1])

使用 f_classif 的 SelectKBest

SelectKBest 会保留得分最高的 K 个特征。结合 f_classif 时,它会使用 ANOVA F 检验,衡量每个特征与类别标签的关联强度。

from sklearn.feature_selection import SelectKBest, f_classif

sel = SelectKBest(score_func=f_classif, k=10)
X_best = sel.fit_transform(X, y)
print(sel.get_support(indices=True))

互信息

mutual_info_classif 会衡量特征与目标之间的任意依赖关系,包括非线性依赖。与 F 检验不同,它能够捕捉 ANOVA 无法发现的非线性关系。

from sklearn.feature_selection import SelectKBest, mutual_info_classif

sel = SelectKBest(score_func=mutual_info_classif, k=10)
X_mi = sel.fit_transform(X, y)

f_classif 与 mutual_info 的对比

f_classif 速度快,可以检测线性关系;mutual_info_classif 速度较慢,但能够捕捉非线性关系。如果您怀疑存在复杂关系,应优先使用互信息。

import numpy as np
from sklearn.feature_selection import f_classif, mutual_info_classif

f_scores, _ = f_classif(X, y)
mi_scores = mutual_info_classif(X, y)
print("F-test top:", np.argsort(f_scores)[::-1][:5])
print("MI top:", np.argsort(mi_scores)[::-1][:5])

递归特征消除

RFE 是一种包裹式方法:它先训练模型,移除最弱的特征,然后重复这一过程。它利用模型自身的重要性信号对特征进行排序。

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

rfe = RFE(estimator=LogisticRegression(max_iter=1000), n_features_to_select=10)
rfe.fit(X, y)
print(rfe.support_)

RFECV:自动选择特征数量

RFECV 为 RFE 增加了交叉验证,因此它会根据验证分数找到最佳的特征数量,而不是依赖固定猜测。

from sklearn.feature_selection import RFECV
from sklearn.ensemble import RandomForestClassifier

rfecv = RFECV(
    estimator=RandomForestClassifier(),
    cv=5,
    scoring="accuracy",
)
rfecv.fit(X, y)
print("Optimal features:", rfecv.n_features_)

使用套索回归的 SelectFromModel

嵌入式选择:套索回归(L1)会将不重要的系数压缩到恰好为零。SelectFromModel 随后只保留非零系数对应的特征。

from sklearn.feature_selection import SelectFromModel
from sklearn.linear_model import Lasso

sel = SelectFromModel(Lasso(alpha=0.01))
sel.fit(X, y)
X_lasso = sel.transform(X)
print("Kept:", X_lasso.shape[1])

使用树模型重要性的 SelectFromModel

SelectFromModel 也适用于任何提供 feature_importances_ 的估计器,例如随机森林。可以设置 threshold,如 "mean" 或 "median"。

from sklearn.feature_selection import SelectFromModel
from sklearn.ensemble import RandomForestClassifier

sel = SelectFromModel(
    RandomForestClassifier(n_estimators=200),
    threshold="median",
)
sel.fit(X, y)

选择合适的方法

先使用廉价的过滤方法(VarianceThreshold、SelectKBest)删除明显无用的特征。使用嵌入式的 SelectFromModel 可以取得良好平衡。只有在准确率最重要且计算资源允许时,才使用 RFECV。

快速检查

测试您对特征选择的掌握情况。

总结

总结:特征选择包括过滤式方法(VarianceThreshold、使用 f_classif 或 mutual_info_classif 的 SelectKBest)、包裹式方法(RFECV)和嵌入式方法(使用套索回归或树模型重要性的 SelectFromModel)。过滤方法速度最快;RFECV 最准确。对于非线性关系,应使用互信息。

常见问题解答

「特征选择方法」课时是免费的吗?

是的 — 「特征选择方法」的完整文本可在网页上免费阅读。要进行交互式练习(内置代码编辑器和全天候 AI 导师)并解锁 Learn AI with Python 课程的其余内容,请升级到 CoddyKit PRO。 Learn AI with Python 课程共包含 4 节课。

「特征选择方法」这节课中我会学到什么?

过滤法(方差、相关性)、封装法(RFE)和嵌入法(L1 正则化) 你通过在浏览器中直接运行的动手代码来练习 Learn AI with Python,全天候 AI 导师会在你学习这节课的过程中回答你的问题。

学习 Learn AI with Python 需要有经验吗?

无需任何先前经验。CoddyKit 上的 Learn AI with Python 课程适合初学者到高级学习者,你可以从这里开始或从头开始,按照自己的节奏学习。 这是第 1 节课,共 4 节。

「特征选择方法」课时需要多长时间?

大多数 CoddyKit 课程大约需要 5–10 分钟。每节课都很精短且互动,所以你能稳步进步,并在网页和应用中从离开的地方继续。

我能在这节 Learn AI with Python 课中编写并运行代码吗?

能。每节 Learn AI with Python 课都包含内置代码编辑器,你可以在浏览器中直接编写并运行真实代码,并获得即时 AI 反馈 — 无需本地设置。

此课程中的所有课时

  1. 特征选择方法
  2. 创建交互特征与多项式特征
  3. 目标编码与高级分类变量处理
  4. 使用 Featuretools 自动进行特征工程
← 返回 Learn AI with Python