当前位置: 首页 > news >正文

DAY19 常见的特征筛选算法

@浙大疏锦行
知识点:

  1. 方差筛选
  2. 皮尔逊相关系数筛选
  3. lasso筛选
  4. 树模型重要性
  5. shap重要性
  6. 递归特征消除REF

作业:对心脏病数据集完成特征筛选,对比精度


1 特征筛选

目的:特征筛选的本质是从原始特征集中选择出对目标任务最有价值的子集,最终服务于模型性能和分析效率的提升
原理:特征筛选的原理基于 “特征重要性评估”:通过量化每个特征与目标变量的关联度、或特征对模型的贡献度,保留得分高的特征,剔除得分低的特征。不同方法的核心差异在于 “如何定义和计算重要性”
流程:评估特征与目标的 “相关性” 或 “贡献度”–>设定筛选标准(阈值或数量)–>确保筛选后的子集 “最优”

2 作业

首先需要使用默认参数的随机森林进行训练,便于后续精度的对比
默认随机森林

2.1 方差筛选

核心逻辑:方差越小的特征,携带的信息越少,对模型的贡献也越小,可以直接剔除。因此计算每个特征的方差,设定方差阈值,保留方差高于阈值的特征。

print("--- 方差筛选 (Variance Threshold) ---")from sklearn.feature_selection import VarianceThreshold  
import timestart_time = time.time()selector = VarianceThreshold(threshold=0.01)X_train_var = selector.fit_transform(X_train)X_test_var = selector.transform(X_test)selected_features_var = X_train.columns[selector.get_support()].tolist()print(f"方差筛选后保留的特征数量: {len(selected_features_var)}")
print(f"保留的特征: {selected_features_var}")rf_model_var = RandomForestClassifier(random_state=42)rf_model_var.fit(X_train_var, y_train)rf_pred_var = rf_model_var.predict(X_test_var)end_time = time.time()
print(f"训练与预测耗时: {end_time - start_time:.4f} 秒")print("\n方差筛选后随机森林在测试集上的分类报告:")
print(classification_report(y_test, rf_pred_var))print("方差筛选后随机森林在测试集上的混淆矩阵:")
print(confusion_matrix(y_test, rf_pred_var))

方差筛选

2.2 皮尔逊相关系数筛选

** 核心逻辑**:剔除与目标变量 “线性关联性弱” 的特征,保留关联性强的特征。

print("--- 皮尔逊相关系数筛选 ---")
from sklearn.feature_selection import SelectKBest, f_classif
import timestart_time = time.time()# 计算特征与目标变量的相关性,选择前k个特征(这里设为10个,可调整)
# 注意:皮尔逊相关系数通常用于回归问题(连续型目标变量),但如果目标是分类问题,可以用f_classif
k = 10
selector = SelectKBest(score_func=f_classif, k=k)
X_train_corr = selector.fit_transform(X_train, y_train)
X_test_corr = selector.transform(X_test)selected_features_corr = X_train.columns[selector.get_support()].tolist()
print(f"皮尔逊相关系数筛选后保留的特征数量: {len(selected_features_corr)}")
print(f"保留的特征: {selected_features_corr}")rf_model_corr = RandomForestClassifier(random_state=42)
rf_model_corr.fit(X_train_corr, y_train)
rf_pred_corr = rf_model_corr.predict(X_test_corr)end_time = time.time()
print(f"训练与预测耗时: {end_time - start_time:.4f} 秒")
print("\n皮尔逊相关系数筛选后随机森林在测试集上的分类报告:")
print(classification_report(y_test, rf_pred_corr))
print("皮尔逊相关系数筛选后随机森林在测试集上的混淆矩阵:")
print(confusion_matrix(y_test, rf_pred_corr))

皮尔逊相关系数

2.3 lasso筛选

核心逻辑:在进行线性回归的同时,通过引入L1正则化项(即惩罚项),强制将一些不重要特征的回归系数压缩到0,从而实现特征筛选。

lasso筛选

2.4 树模型自动性

树模型重要性筛选

2.5 SHAP重要性筛选

SHAP重要性

2.6 递归特征消除RFE

核心思想:是通过递归地移除最不重要的特征,逐步缩小特征集,直到达到预设的特征数量或满足其他停止条件。
递归特征消除

http://www.lryc.cn/news/595085.html

相关文章:

  • 【初识Qt】
  • 鸿蒙开发中与 AI 编码助手的共处之道(ArkTS 视角)
  • 第16次:用户浏览记录
  • 关于java8里边Collectors.toMap()的空限制
  • React探索高性能Tree树组件实现——react-window、react-vtree
  • Spring Boot 3企业级架构设计:从模块化到高并发实战,9轮技术博弈(含架构演进解析)
  • spring boot windows linux 控制台 文件 乱码问题详解
  • Python100个库分享第37个—BeautifulSoup(爬虫篇)
  • 基于R语言的分位数回归技术应用
  • TOGAF之架构标准规范-机遇与解决方案
  • Implicit Reward as the Bridge: A Unified View of SFTand DPO Connections
  • React基础(1)
  • 深入解析Hadoop MapReduce Shuffle过程:从环形缓冲区溢写到Sort与Merge源码
  • 【Docker#3】Window 和 Linux 上 docker安装 相关知识
  • 华控的科技布局——全球化战略与合作生态
  • 多级缓存(亿级流量缓存)
  • CodeRush AI 助手进驻 Visual Studio:AiGen/AiFind 亮相(二)
  • 初识网络原理
  • CentOS 7安装 FFmpeg问题可以按照以下步骤进行安装
  • 数据结构:找出字符串中重复的字符(Finding Duplicates in a String)——使用哈希表
  • 使用Python绘制专业柱状图:Matplotlib完全指南
  • 4x4矩阵教程
  • 通过TPLink路由器进行用户行为审计实战
  • 首家!数巅AskBI通过中国信通院数据分析智能体专项测试
  • 基于Python的多传感器融合的障碍物检测与避障演示
  • C++实战案例:从static成员到线程安全的单例模式
  • 基于深度学习的图像分类:使用ResNet实现高效分类
  • python实现接收九数云的异常分析指标推送通知
  • 从env到mm_struct:环境变量与虚拟内存的底层实现
  • stm32mp157f-dk2安装镜像并且部署qt全流程