【特征选择】嵌入法(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 → 删除
  • 优点:快、稳、防过拟合、一步到位
  • 适合:高维数据、论文、工程建模
相关推荐
云烟成雨TD2 小时前
Spring AI 1.x 系列【14】三月双版本连发!Spring AI 最新功能全掌握
java·人工智能·spring
曲幽2 小时前
FastAPI子应用挂载:别再让root_path坑你一夜
python·nginx·fastapi·web·mount·admin·404·docs·root_path
LaughingZhu2 小时前
Product Hunt 每日热榜 | 2026-03-28
数据库·人工智能·经验分享·神经网络·chatgpt
nimadan122 小时前
**Minimax写小说软件2025推荐,AI辅助创作提升故事流畅度与情节合理性**
人工智能·python
码农三叔2 小时前
第三卷:《人形机器人的控制与运动规划》
人工智能·机器人·人形机器人
小妖同学学AI2 小时前
微软开源多智能体协作框架AutoGen:像组建公司一样,打造会“开会”的AI团队
人工智能·microsoft·开源
今儿敲了吗2 小时前
算法复盘——前缀和
笔记·学习·算法
creaDelight2 小时前
基于 Django 5.x 的全功能博客系统 DjangoBlog 深度解析
后端·python·django
月巴月巴白勺合鸟月半3 小时前
FHIR 的使用
人工智能·c#·fhir