【特征选择】嵌入法(Embedded)

特征选择核心方法:嵌入法(Embedded)|原理+代码+可视化全攻略

嵌入法是机器学习里最高效、最常用、最适合论文与工程 的特征选择方式。它把特征选择直接嵌在模型训练里,一边训练一边自动筛选,不用单独跑特征筛选流程,速度快、效果稳。


一、什么是嵌入法?一句话看懂

嵌入法 = 训练模型时自动做特征选择,一步到位。

它不像过滤法(先筛选再训练)、包裹法(反复训练筛选),而是:

  • 模型训练
  • 特征打分
  • 特征筛选
    三件事同时完成

二、最通俗的比喻:边学边划重点

你在复习考试:

  • 过滤法:先划重点 → 再背书
  • 包裹法:背一遍 → 划重点 → 再背一遍
  • 嵌入法边背书边自动划重点

嵌入法就是模型自带特征筛选功能,训练完直接告诉你:哪些特征有用。


三、嵌入法靠什么实现?(两大核心)

嵌入法主要依靠正则化(Regularization)实现:

  1. L1 正则化(Lasso) → 直接把不重要特征的权重变成 0(真正删除)
  2. L2 正则化(Ridge) → 把不重要特征权重压缩变小(不删但减弱)

另外树模型(随机森林、XGBoost)也属于嵌入法。


四、嵌入法的 4 大优势(必背)

  1. 一步到位:训练 + 筛选同时完成
  2. 速度快:不用反复训练模型
  3. 减少过拟合:正则化本身就是防过拟合
  4. 高维数据友好:特征几百上千也能跑

五、核心公式(简单看懂)

1. Lasso(L1)嵌入法公式

Loss=MSE+λ∑∣w∣ Loss = MSE + \lambda \sum|w| Loss=MSE+λ∑∣w∣

  • 后面那项就是惩罚
  • λ 越大 → 惩罚越强 → 越多特征权重变 0

2. Ridge(L2)嵌入法公式

Loss=MSE+λ∑w2 Loss = MSE + \lambda \sum w^2 Loss=MSE+λ∑w2

  • 权重被压缩,但不会变成 0

六、嵌入法完整流程(超清晰)

  1. 选择带正则化的模型(Lasso、Ridge、树模型)
  2. 训练模型
  3. 模型自动给特征权重/重要性
  4. 权重=0 或 权重小 → 删除
  5. 用筛选后的特征建模

七、Python 完整实战(房价预测)

直接复制可运行!

1. 导入库

python 复制代码
import numpy as np
import pandas as pd
import matplotlib.pyplot as plt
import seaborn as sns

from sklearn.datasets import load_boston
from sklearn.model_selection import train_test_split, GridSearchCV
from sklearn.linear_model import Lasso
from sklearn.preprocessing import StandardScaler
from sklearn.feature_selection import SelectFromModel
from sklearn.metrics import mean_squared_error, r2_score

2. 加载数据

python 复制代码
# 波士顿房价(经典回归数据集)
data = load_boston()
X = pd.DataFrame(data.data, columns=data.feature_names)
y = data.target

print("特征数量:", X.shape[1])
print("样本数量:", X.shape[0])
X.head()

3. 查看特征相关性

python 复制代码
plt.figure(figsize=(12, 8))
corr = pd.concat([X, y], axis=1).corr()
sns.heatmap(corr, annot=True, cmap='coolwarm', fmt='.2f')
plt.title('特征相关性热力图')
plt.show()

4. 标准化(Lasso 必须做)

python 复制代码
scaler = StandardScaler()
X_scaled = scaler.fit_transform(X)

X_train, X_test, y_train, y_test = train_test_split(
    X_scaled, y, test_size=0.2, random_state=42
)

5. Lasso 嵌入法训练(自动特征选择)

python 复制代码
# Lasso 自带嵌入特征选择
lasso = Lasso(alpha=0.1, random_state=42)
lasso.fit(X_train, y_train)

# 查看特征系数
coef_df = pd.DataFrame({
    'feature': X.columns,
    'coef': lasso.coef_
}).sort_values(by='coef', ascending=False)

print("=== 特征权重(越大越重要)===")
print(coef_df)

6. 可视化特征权重

python 复制代码
plt.figure(figsize=(12, 5))
sns.barplot(x='feature', y='coef', data=coef_df)
plt.xticks(rotation=45)
plt.title('Lasso 特征权重(嵌入法筛选)')
plt.tight_layout()
plt.show()

7. 自动筛选重要特征

python 复制代码
# 自动选重要特征
sfm = SelectFromModel(lasso, threshold='mean')
X_train_selected = sfm.fit_transform(X_train, y_train)
X_test_selected = sfm.transform(X_test)

# 查看哪些被选中
selected = X.columns[sfm.get_support()]
print("=== 嵌入法筛选后的特征 ===")
print(selected.tolist())
print(f"从 {X.shape[1]} 个 → 筛选到 {len(selected)} 个")

8. 用筛选后的特征建模

python 复制代码
# 重新训练
lasso_final = Lasso(alpha=0.1)
lasso_final.fit(X_train_selected, y_train)

y_pred = lasso_final.predict(X_test_selected)

mse = mean_squared_error(y_test, y_pred)
r2 = r2_score(y_test, y_pred)

print("===== 模型效果 =====")
print(f"MSE: {mse:.4f}")
print(f"R2: {r2:.4f}")

9. 真实值 vs 预测值

python 复制代码
plt.figure(figsize=(10, 5))
plt.scatter(y_test, y_pred, alpha=0.7)
plt.plot([y.min(), y.max()], [y.min(), y.max()], 'r--')
plt.xlabel('真实房价')
plt.ylabel('预测房价')
plt.title('嵌入法筛选后模型效果')
plt.show()

10. 自动找最优 α

python 复制代码
param = {'alpha': np.logspace(-4, 0, 30)}
grid = GridSearchCV(Lasso(), param, cv=5, scoring='neg_mean_squared_error')
grid.fit(X_train, y_train)

print("最优 alpha:", grid.best_params_['alpha'])

八、嵌入法的优点

  1. 训练+筛选一步完成
  2. 自动防过拟合
  3. 高维数据非常好用
  4. 工业界最常用
  5. 可解释性强(看权重就知道谁重要)

九、嵌入法的缺点

  1. 依赖模型
  2. Lasso 只适合线性关系
  3. 必须标准化
  4. 多重共线性下会随机删特征

十、三种特征选择方法对比(必考)

方法 方式 速度 效果
过滤法 Filter 先统计筛选 → 再训练 最快 一般
包裹法 Wrapper 反复训练筛选 最慢 最好
嵌入法 Embedded 训练时自动筛选 很好

十一、什么时候必须用嵌入法?

  • 特征多、维度高
  • 希望训练+筛选一步完成
  • 做论文、做实验、写报告
  • 工程上线模型(速度快、稳定)
  • 需要可解释特征

十二、最简单总结(背诵版)

  • 嵌入法 = 模型训练时自动筛选特征
  • 最常用:Lasso(L1)
  • 特征权重 = 0 → 删除
  • 优点:快、稳、防过拟合、一步到位
  • 适合:高维数据、论文、工程建模
相关推荐
星越华夏5 小时前
计算机视觉:YOLOv12安装环境
人工智能·yolo·计算机视觉
Yolanda947 小时前
【人工智能】《从零搭建AI问答助手项目(九):Prompt优化》
人工智能·prompt
wj3055853787 小时前
课程 9:模型测试记录与 Prompt 策略
linux·人工智能·python·comfyui
小和尚同志7 小时前
深入使用 skill-creator:结合真实生产级实践
人工智能·aigc
DevSecOps选型指南7 小时前
安全419专访悬镜安全 | 穿越周期在 AI 浪潮中定义数字供应链安全新范式
人工智能
沪漂阿龙7 小时前
面试题详解:GraphRAG 全面解析——知识图谱增强 RAG、Local Search、Global Search、社区摘要、工程落地与评估指标一次讲透
人工智能·知识图谱
WangN27 小时前
Unitree RL Lab 学习笔记【通识】
人工智能·机器学习
吃好睡好便好7 小时前
在Matlab中绘制横直方图
开发语言·学习·算法·matlab
haina20197 小时前
海纳AI亮相《科创中国》,解码招聘“智”变之路
人工智能·ai面试·ai招聘
星寂樱易李7 小时前
iperf3 + Python-- 网络带宽、网速、网络稳定性
开发语言·网络·python