python打卡 DAY 19 常见的特征筛选算法

article/2025/6/25 9:00:37

目录

特征筛选算法笔记

一、方差筛选 (Variance Threshold)

1.1 基本原理

1.2 实现代码

1.3 注意事项

二、皮尔逊相关系数筛选

2.1 基本原理

2.2 实现代码

2.3 优缺点

三、Lasso回归筛选

3.1 基本原理

3.2 实现代码

3.3 参数选择

四、树模型特征重要性

4.1 基本原理

4.2 实现代码

4.3 注意事项

五、SHAP重要性

5.1 基本原理

5.2 实现代码

5.3 高级应用

六、递归特征消除(RFE)

6.1 基本原理

6.2 实现代码

6.3 变体方法

七、方法对比与选型指南

7.1 方法对比表

7.2 选型决策树

八、实战建议

8.1 组合策略

8.2 评估方法

8.3 自动化工具


特征筛选算法笔记

一、方差筛选 (Variance Threshold)

1.1 基本原理

  • 移除方差低于阈值的特征

  • 假设:低方差特征包含信息量少

  • 适用于:数值型特征

1.2 实现代码

from sklearn.feature_selection import VarianceThresholdselector = VarianceThreshold(threshold=0.1)  # 移除方差<0.1的特征
X_high_variance = selector.fit_transform(X)# 查看被保留的特征
selected_features = X.columns[selector.get_support()]
print(f"保留特征数: {len(selected_features)}")

1.3 注意事项

  • 需先进行特征标准化(避免量纲影响)

  • 对二值特征设置threshold=0.8*(1-0.8)

  • 可能误删重要但取值稳定的特征

二、皮尔逊相关系数筛选

2.1 基本原理

  • 计算特征与目标变量的线性相关性

  • 取值范围:[-1, 1],绝对值越大相关性越强

  • 公式:

2.2 实现代码

import pandas as pd# 计算相关系数
correlations = X.corrwith(y).abs().sort_values(ascending=False)# 选择前k个特征
top_k = 10
selected_features = correlations[:top_k].index
X_selected = X[selected_features]

2.3 优缺点

  • 优点:计算高效,结果易解释

  • 缺点

    • 只能检测线性关系

    • 忽略特征间交互作用

    • 对异常值敏感

三、Lasso回归筛选

3.1 基本原理

  • 使用L1正则化使部分系数归零

  • 适用于:高维数据,线性关系

  • 目标函数:

3.2 实现代码

from sklearn.linear_model import LassoCV# 使用交叉验证选择最佳alpha
lasso = LassoCV(cv=5, random_state=42)
lasso.fit(X, y)# 获取非零系数特征
selected_features = X.columns[lasso.coef_ != 0]
print(f"Lasso选择特征数: {len(selected_features)}")

3.3 参数选择

  • alpha:正则化强度(越大选择特征越少)

  • 建议使用LassoCV自动优化alpha

四、树模型特征重要性

4.1 基本原理

  • 基于决策树的特征分裂增益评估重要性

  • 常用模型:随机森林、XGBoost

  • 两种评估方式:

    • Gini重要性:基于不纯度减少

    • Permutation重要性:基于随机置换后的精度下降

4.2 实现代码

from sklearn.ensemble import RandomForestClassifierrf = RandomForestClassifier(n_estimators=100, random_state=42)
rf.fit(X, y)# 获取特征重要性
importances = pd.Series(rf.feature_importances_, index=X.columns)
top_features = importances.sort_values(ascending=False)[:10]# 可视化
top_features.plot(kind='barh')
plt.title('Top 10 Important Features')
plt.show()

4.3 注意事项

  • 可能偏向高基数特征

  • 不同模型的重要性不可直接比较

  • 建议多次运行观察稳定性

五、SHAP重要性

5.1 基本原理

  • 基于博弈论的Shapley值

  • 量化每个特征对预测的贡献度

  • 优势:捕捉非线性关系和交互作用

5.2 实现代码

import shap# 创建解释器
explainer = shap.Explainer(rf)
shap_values = explainer(X)# 全局重要性
shap.plots.bar(shap_values)# 获取重要性值
shap_importance = pd.DataFrame({'features': X.columns,'importance': np.abs(shap_values.values).mean(axis=0)
}).sort_values('importance', ascending=False)

5.3 高级应用

  • 分析特征交互作用:shap_interaction_values()

  • 识别样本级特征贡献:force_plot()

六、递归特征消除(RFE)

6.1 基本原理

  1. 训练模型并获取特征重要性

  2. 移除最不重要特征

  3. 重复直到达到指定特征数

  • 适用于:中小规模数据集

6.2 实现代码

from sklearn.feature_selection import RFE
from sklearn.linear_model import LogisticRegressionestimator = LogisticRegression(max_iter=1000)
selector = RFE(estimator, n_features_to_select=10, step=1)
selector.fit(X, y)# 查看选择结果
selected_features = X.columns[selector.support_]
print(f"RFE选择特征: {list(selected_features)}")

6.3 变体方法

  • RFECV:交叉验证自动确定最优特征数

    from sklearn.feature_selection import RFECV
    rfecv = RFECV(estimator, cv=5)
    rfecv.fit(X, y)

七、方法对比与选型指南

7.1 方法对比表

方法适用场景是否监督计算成本主要优势
方差筛选预处理阶段快速去除低信息量特征
皮尔逊相关线性关系结果直观易解释
Lasso高维线性数据内置特征选择
树模型重要性非线性关系中高捕捉复杂模式
SHAP模型解释细粒度贡献分析
RFE中小规模数据系统性特征淘汰

7.2 选型决策树

八、实战建议

8.1 组合策略

  1. 预处理阶段:使用方差筛选去除明显无关特征

  2. 初步筛选:结合皮尔逊和树模型重要性

  3. 精细筛选:对候选特征集使用RFE/SHAP

  4. 最终验证:比较不同特征集的模型表现

8.2 评估方法

from sklearn.model_selection import cross_val_scoredef evaluate_features(X_selected):model = RandomForestClassifier()scores = cross_val_score(model, X_selected, y, cv=5, scoring='f1')return np.mean(scores)# 比较不同特征集
score_full = evaluate_features(X)
score_selected = evaluate_features(X_selected)
print(f"全特征F1: {score_full:.3f}, 筛选后F1: {score_selected:.3f}")

8.3 自动化工具

from sklearn.pipeline import Pipeline
from sklearn.feature_selection import SelectFromModel# 自动化特征选择流水线
pipe = Pipeline([('scaler', StandardScaler()),('selector', SelectFromModel(RandomForestClassifier())),('classifier', LogisticRegression())
])

通过系统掌握这些特征筛选方法:

  1. 有效降低数据维度

  2. 提升模型训练效率

  3. 增强模型可解释性

  4. 发现关键业务特征

@浙大疏锦行


http://www.hkcw.cn/article/qksuvdJjsr.shtml

相关文章

三菱整数乘法出现小数点的原因分析 以及工程设置

三菱 PLC 中出现30*100029999.994的计算误差&#xff0c;主要与浮点数在计算机中的二进制表示方式有关。以下是详细解释和解决方案&#xff1a; 原因分析 浮点数二进制存储的精度限制 浮点数&#xff08;如三菱 PLC 使用的 IEEE 754 单精度浮点数&#xff09;在计算机中以二进制…

Git 第三讲---核心篇 git的远程管理

前言&#xff1a; 在上一讲《Git 第二讲 — 提高篇&#xff1a;Git的分支管理》中&#xff0c;我们掌握了如何通过分支实现代码的并行开发&#xff0c;学会了创建、切换、合并分支以及解决冲突的核心技巧。分支管理是Git强大功能的基石&#xff0c;但它更多聚焦于本地仓库的操…

Java网络编程API 1

Java中的网络编程API一共有两套&#xff1a;一套是UDP协议使用的API&#xff1b;另一套是TCP协议使用的API。这篇文章我们先来介绍UDP版本的API&#xff0c;并尝试来写一个回显服务器&#xff08;接收到的请求是什么&#xff0c;返回的响应就是什么&#xff09;。 UDP数据报套…

window ollama部署模型

注意去官网下载ollama,这个win和linux差别不大,win下载exe,linux用官网提供的curl命令 模型下载表:deepseek-r1 使用命令:Ollama API 交互 | 菜鸟教程 示例: 1.查看已加载模型: 2.文本生成接口 curl -X POST http://localhost:11434/v1/completions -H "Conte…

MySQL安装及启用详细教程(Windows版)

MySQL安装及启用详细教程&#xff08;Windows版&#xff09; &#x1f4cb; 概述 本文档将详细介绍MySQL数据库在Windows系统下的下载、安装、配置和启用过程。 &#x1f4e5; MySQL下载 官方下载地址 官方网站: https://dev.mysql.com/downloads/社区版本: https://dev.my…

vscode中的markdown表格列宽

vscode中的markdown表格列宽 当然&#xff0c;这个问题在csdn中应该是没有的&#xff0c;csdn是自适应文档页面的。这个自适应在vscode中好像不太好实现&#xff0c;至少目前我没能实现。 表格生成如上图&#xff0c;缩在一起&#xff0c;当然也会随着表格中录入数据自适应…

CangjieMagic 智能体框架嵌入式系统实测:以树莓派 4B 为例

目录 引言 CangjieMagic 对嵌入式开发板的要求 编译环境准备 本地编译 交叉编译 实战测试 程序编写 对cjpm.toml文件的修改 运行结果 结束语 引言 在人工智能与物联网技术飞速发展的今天&#xff0c;嵌入式系统作为连接物理世界与数字世界的桥梁&#xff0c;承担着越…

数值与字典解决方案二十七讲:两列数据相互去掉重复值后合并

《VBA数组与字典方案》教程&#xff08;10144533&#xff09;是我推出的第三套教程&#xff0c;目前已经是第二版修订了。这套教程定位于中级&#xff0c;字典是VBA的精华&#xff0c;我要求学员必学。7.1.3.9教程和手册掌握后&#xff0c;可以解决大多数工作中遇到的实际问题。…

林夏薇否认破产传闻,已发律师声明回应 正交律师处理

近期,TVB“视后”林夏薇被一家公司向香港高等法院申请破产。根据司法机构资料,案件延期至8月26日下午在高等法院提讯。对于破产一事,林夏薇回应称:“我丈夫Jason租住房子的公司有官司,正在上诉中,所以我莫名其妙,现在已交给律师处理,我也没有收到任何通知。”5月30日,…

下次放假安排已定可连休8天 国庆中秋合并假期

今天是端午节假期的最后一天,许多人已经开始期待下一次休假。根据国务院办公厅发布的2025年部分节假日安排通知,下一个长假将在四个月后的国庆节和中秋节期间。届时,国庆节与中秋节将合并放假,共8天。责任编辑:zx0176

24岁台大学霸暗网全球贩毒,3年海1亿多美元

24岁台大学霸暗网全球贩毒,3年海1亿多美元!据台媒报道,近日,美国联邦调查局(FBI)破获暗网毒品交易平台“隐身市场”,而该平台经营者“法老”的真实身份竟是24岁台湾大学资管系学生林睿庠。林睿庠因贩毒资产暴增,3年多其不法所得超过1亿美元(约7.2亿元人民币)。据悉,…

孙连城扮演者直播带货望远镜 从“宇宙区长”到带货主播

5月31日晚,曾在热播电视剧《人民的名义》中饰演“懒政区长孙连城”的演员李威,在短视频平台上开启直播带货,所售商品为天文望远镜。近一周内,李威已进行了三场关于望远镜的直播带货。6月1日上午,李威此前发布的带货直播预告视频疑似已被隐藏或删除,其商品橱窗中的天文望远…

互联网女皇340页AI报告猛料刷屏:AI增速创纪录

当地时间5月30日,玛丽米克尔发布了长达340页的“AI趋势报告”。报告指出,AI的发展速度前所未见,用户增长、使用量和资本支出均呈现出爆炸式增长,其影响力可能远超技术本身。玛丽米克尔是美国风险投资家,曾就职于摩根士丹利和凯鹏华盈,于2018年创立了自己的风投公司邦德资…

为何说中国“车圈恒大论”是误读 主流车企财务稳健

端午前夕,“车圈恒大论”再次成为业内焦点。5月30日,比亚迪集团品牌及公关处总经理李云飞通过社交媒体发布长文,首次正面回应被暗指为“汽车圈恒大”的流言,直言感觉好气又好笑,并列出财报数据逐一反驳,指出中国主流车企根本不存在所谓的“车圈恒大”。事情起源于前不久的…

关于免费版MQTT.fx 1.7.1下载与安装(附带下载链接)

MQTT.fx目前官网已经更新到5.x的版本&#xff0c;该版本需要付费使用&#xff0c;作为学习使用的话还是建议用免费的1.7.1版本&#xff0c;但是官网已经没有这个版本的安装包了&#xff0c;以下链接是我在网上找到的资料&#xff0c;该仓库仅用于学习交流&#xff0c;请勿用于商…

海外tk抓包简单暴力方式

将地址替换下面代码就可以 function hook_dlopen(module_name, fun) {var android_dlopen_ext Module.findExportByName(null, "android_dlopen_ext");if (android_dlopen_ext) {Interceptor.attach(android_dlopen_ext, {onEnter: function (args) {var pathptr …

编译原理实验 之 TINY 之 语义分析(第二次作业)

文章目录 本实验是接着前面的两个实验的基础上进行完善的&#xff0c;所以对于前面的实验如何操作&#xff1f;请看我的另外两个博客~ 编译原理 之 实验一 编译原理实验 之 Tiny C语言编译程序实验 语法分析 首先明确一下这次实验的任务&#xff1f; 主要目的&#xff1a;实现…

数组与元组:TypeScript 的基础

&#x1f90d; 前端开发工程师、技术日更博主、已过CET6 &#x1f368; 阿珊和她的猫_CSDN博客专家、23年度博客之星前端领域TOP1 &#x1f560; 牛客高级专题作者、打造专栏《前端面试必备》 、《2024面试高频手撕题》、《前端求职突破计划》 &#x1f35a; 蓝桥云课签约作者、…

Transformer核心技术深度解析:多头注意力机制与架构精粹

一、多头注意力&#xff1a;模型理解的「多棱镜」 核心思想&#xff1a;并行化特征空间探索 传统注意力的局限&#xff1a;单一注意力机制如同单眼观察世界&#xff0c;只能捕捉单一维度的关联 多头机制的本质&#xff1a;为模型配备多组「认知透镜」&#xff0c;同时从不同子…

【C语言入门级教学】assert断⾔和指针的使用

文章目录 1.assert断⾔2.指针的使⽤和传址调⽤2.1 strlen的模拟实现2.2 传值调⽤和传址调⽤ 1.assert断⾔ assert.h 头⽂件定义了宏 assert() &#xff0c;⽤于在运⾏时确保程序符合指定条件&#xff0c;如果不符合&#xff0c;就报错终⽌运⾏。这个宏常常被称为“断⾔”。 a…