机器学习特征预处理之删除低方差列
示例import numpy as np import pandas as pd from sklearn.feature_selection import VarianceThreshold from sklearn.preprocessing import StandardScaler from sklearn.datasets import make_classification from sklearn.model_selection import train_test_split from sklearn.ensemble import RandomForestClassifier from sklearn.metrics import accuracy_score # 定义函数 def ignore_low_variance(X_train, X_test, threshold0.01, use_stdFalse, scale_dataFalse, verboseTrue): 删除低方差列 Parameters: ----------- X_train, X_test : DataFrame 训练集和测试集 threshold : float 方差阈值 use_std : bool 是否使用标准差模式 scale_data : bool 是否先标准化数据推荐 verbose : bool 是否打印删除信息 # 1. 只选择数值列 numeric_cols X_train.select_dtypes(include[np.number]).columns if len(numeric_cols) X_train.shape[1]: print(f警告排除了 {X_train.shape[1] - len(numeric_cols)} 个非数值列) X_train_num X_train[numeric_cols].copy() X_test_num X_test[numeric_cols].copy() # 2. 可选标准化数据 if scale_data: from sklearn.preprocessing import StandardScaler scaler StandardScaler() X_train_num pd.DataFrame( scaler.fit_transform(X_train_num), columnsX_train_num.columns, indexX_train_num.index ) X_test_num pd.DataFrame( scaler.transform(X_test_num), columnsX_test_num.columns, indexX_test_num.index ) # 3. 方差过滤 if use_std: threshold threshold ** 2 selector VarianceThreshold(thresholdthreshold) X_train_transformed selector.fit_transform(X_train_num) X_test_transformed selector.transform(X_test_num) # 4. 获取保留的列 cols_kept X_train_num.columns[selector.get_support()].tolist() cols_removed X_train_num.columns[~selector.get_support()].tolist() if verbose and cols_removed: print(f删除了 {len(cols_removed)} 个低方差列: {cols_removed}) # 5. 返回DataFrame包含所有原始列包括非数值列 if len(numeric_cols) X_train.shape[1]: # 保留非数值列 non_numeric_cols X_train.columns.difference(numeric_cols) result_train pd.concat([ pd.DataFrame(X_train_transformed, columnscols_kept, indexX_train.index), X_train[non_numeric_cols] ], axis1) result_test pd.concat([ pd.DataFrame(X_test_transformed, columnscols_kept, indexX_test.index), X_test[non_numeric_cols] ], axis1) return result_train, result_test else: return (pd.DataFrame(X_train_transformed, columnscols_kept, indexX_train.index), pd.DataFrame(X_test_transformed, columnscols_kept, indexX_test.index))调用示例print( * 60) print(示例1模拟数据 - 比较不同策略的效果) print( * 60) # 创建包含不同方差特征的模拟数据 np.random.seed(42) n_samples 500 # 创建不同类型的特征 data { feature_high_var: np.random.randn(n_samples) * 10, # 高方差 feature_medium_var: np.random.randn(n_samples) * 2, # 中方差 feature_low_var: np.random.randn(n_samples) * 0.1, # 低方差 feature_near_constant: np.random.randn(n_samples) * 0.001 5, # 近常数 feature_binary: np.random.binomial(1, 0.5, n_samples), # 二值特征 feature_constant: np.ones(n_samples) * 3, # 常数特征 } X pd.DataFrame(data) y (X[feature_high_var] X[feature_binary] * 2 np.random.randn(n_samples) * 0.5 0).astype(int) # 划分数据集 X_train, X_test, y_train, y_test train_test_split(X, y, test_size0.3, random_state42) print(原始数据形状:, X_train.shape) print(\n各特征方差:) print(X_train.var().round(6)) # 策略1不标准化使用默认阈值 print(\n - * 40) print(策略1不标准化阈值0.01) X_train1, X_test1 ignore_low_variance(X_train, X_test, threshold0.01, scale_dataFalse) print(f处理后形状: {X_train1.shape}) # 策略2先标准化再删除推荐 print(\n - * 40) print(策略2先标准化阈值0.01推荐) X_train2, X_test2 ignore_low_variance(X_train, X_test, threshold0.01, scale_dataTrue) print(f处理后形状: {X_train2.shape}) # 策略3使用标准差模式 print(\n - * 40) print(策略3使用标准差模式阈值0.1) X_train3, X_test3 ignore_low_variance(X_train, X_test, threshold0.1, use_stdTrue, scale_dataTrue) print(f处理后形状: {X_train3.shape})输出原始数据形状: (350, 6) 各特征方差: feature_high_var 98.129830 feature_medium_var 3.586963 feature_low_var 0.010559 feature_near_constant 0.000001 feature_binary 0.250053 feature_constant 0.000000 dtype: float64 ---------------------------------------- 策略1不标准化阈值0.01 删除了 2 个低方差列: [feature_near_constant, feature_constant] 处理后形状: (350, 4) ---------------------------------------- 策略2先标准化阈值0.01推荐 删除了 1 个低方差列: [feature_constant] 处理后形状: (350, 5) ---------------------------------------- 策略3使用标准差模式阈值0.1 删除了 1 个低方差列: [feature_constant] 处理后形状: (350, 5)说明 方法针对的是数值列一般数据先标准化 再移除低方差列

相关新闻

一、windows11中wsl安装在其他盘符ubuntu

一、windows11中wsl安装在其他盘符ubuntu

一、windows11中wsl安装在其他盘符ubuntu 1.在F盘上创建文件夹wsl 2.在wsl中创建文件夹ubuntu24 3.下载ubuntu安装包,安装包的地址 https://cloud-images.ubuntu.com/wsl/ 下载后,将安装包存放在F:/wsl目录下4.winx打开终端(管理员)5.导入系统至 F 盘&…

2026/7/19 3:39:31阅读更多 →
智享时代,人机共生:普通人借助 AI 实现自我成长与效率跃升全指南

智享时代,人机共生:普通人借助 AI 实现自我成长与效率跃升全指南

引言:AI 普惠浪潮,人人都拥有数字成长工具2026 年,上海世界人工智能大会如期启幕,国产大模型、轻量化智能硬件、全场景 AI 智能体成为全场核心热点,标志着人工智能彻底走出实验室、产业园区,全面下沉至普通…

2026/7/19 3:39:31阅读更多 →
ChatGPT搜索升级:技术架构解析与开发者实战指南

ChatGPT搜索升级:技术架构解析与开发者实战指南

如果你最近在使用 ChatGPT 时感觉搜索响应变快了,或者发现它能更准确地理解你的模糊提问,这不是错觉。OpenAI 确实在近期对 ChatGPT 的搜索功能进行了重要升级,这次升级不仅仅是"更快更强"这么简单,而是从底层架构到用户…

2026/7/19 3:37:31阅读更多 →
ATtiny3217硬件驱动WS2812B的零开销方案

ATtiny3217硬件驱动WS2812B的零开销方案

1. ATtiny3217与WS2812B的硬件联动方案解析当8位微控制器遇上智能RGB灯珠,会碰撞出怎样的火花?ATtiny3217作为Microchip新一代AVR单片机中的旗舰型号,其内置的可配置组合逻辑(CCL)模块与WS2812B的独特单线协议形成绝妙搭配。这种硬件级联动方…

2026/7/19 6:43:48阅读更多 →
Hooks 之后,为什么前端仍需要“包裹”能力?

Hooks 之后,为什么前端仍需要“包裹”能力?

Hooks 取代了许多不合适的 HOC 用法,但没有消除“围绕既有渲染目标施加规则”的需求。 讨论 HOC 是否过时时,很容易把两个问题混在一起: 怎样复用组件内部的状态、请求、订阅和交互逻辑?怎样在一个既有组件或元素的渲染边界外&am…

2026/7/19 6:43:48阅读更多 →
【开题神器】专业级AI论文工具:研究框架、文献综述一键搭建

【开题神器】专业级AI论文工具:研究框架、文献综述一键搭建

每到开题季,无数本硕学子都会陷入同款困境:选题无思路、研究框架逻辑混乱、翻阅上百篇文献仍写不出合格综述、参考文献格式反复出错、熬夜搭建结构却被导师全盘打回。传统手工梳理文献、徒手搭建研究框架的模式耗时耗力,稍有疏漏就会延误开题…

2026/7/19 6:43:48阅读更多 →
2026深度测评10款降AI率网站红黑榜!优劣对比全解析,达标率硬刚行业巅峰

2026深度测评10款降AI率网站红黑榜!优劣对比全解析,达标率硬刚行业巅峰

2026 年,AI 写稿、AI 生成内容已经成了学生党、打工人和内容创作者的日常,但随之而来的「AI 率过高」问题也成了新的麻烦:论文查重 AI 率超标、职场报告被判定 AI 生成、自媒体内容过不了平台原创审核… 为了帮大家解决这个痛点,我…

2026/7/19 6:43:48阅读更多 →
OpenCore Legacy Patcher完整指南:让老旧Mac免费焕发新生

OpenCore Legacy Patcher完整指南:让老旧Mac免费焕发新生

OpenCore Legacy Patcher完整指南:让老旧Mac免费焕发新生 【免费下载链接】OpenCore-Legacy-Patcher Experience macOS just like before 项目地址: https://gitcode.com/GitHub_Trending/op/OpenCore-Legacy-Patcher 你是否有一台被苹果官方抛弃的老旧Mac&a…

2026/7/19 6:43:48阅读更多 →
ESP32-S3音频开发实战:WAV音乐播放器实现

ESP32-S3音频开发实战:WAV音乐播放器实现

1. ESP32-S3音乐播放器实验概述在嵌入式音频开发领域,ESP32-S3凭借其强大的处理能力和丰富的外设接口,成为实现高质量音频应用的理想选择。本实验基于正点原子DNESP32S3开发板,利用其板载的ES8388音频编解码器和I2S接口,构建了一个…

2026/7/19 6:41:48阅读更多 →
Go语言静态资源打包方案对比与实践指南

Go语言静态资源打包方案对比与实践指南

1. 项目背景与核心需求在Go语言开发中,我们经常需要处理静态资源文件的打包问题。无论是Web应用的模板文件、前端资源,还是配置文件、证书等,都需要随程序一起分发。传统做法是将这些文件与编译后的二进制文件放在同一目录下,但这…

2026/7/19 0:01:04阅读更多 →
Go语言实现高性能LDAP认证服务的架构与实践

Go语言实现高性能LDAP认证服务的架构与实践

1. 项目背景与核心价值LDAP(轻量级目录访问协议)作为企业级身份认证的黄金标准,已经服务了超过80%的财富500强公司。我在金融科技领域实施统一认证体系时,发现传统Java方案存在启动慢、内存占用高等痛点。而Go语言凭借其协程并发模…

2026/7/19 0:01:04阅读更多 →
【AI面试官实战指南】:用ChatGPT模拟10类高频技术岗面试,3天提升应答精准度92%

【AI面试官实战指南】:用ChatGPT模拟10类高频技术岗面试,3天提升应答精准度92%

更多请点击: https://intelliparadigm.com 第一章:AI面试官实战指南的核心价值与适用场景 AI面试官并非替代人类HR的“黑箱工具”,而是以可解释、可审计、可迭代的方式,赋能招聘全链路的关键基础设施。其核心价值在于将主观经验沉…

2026/7/19 0:01:04阅读更多 →
Go语言静态资源打包方案对比与实践指南

Go语言静态资源打包方案对比与实践指南

1. 项目背景与核心需求在Go语言开发中,我们经常需要处理静态资源文件的打包问题。无论是Web应用的模板文件、前端资源,还是配置文件、证书等,都需要随程序一起分发。传统做法是将这些文件与编译后的二进制文件放在同一目录下,但这…

2026/7/19 0:01:04阅读更多 →
Go语言实现高性能LDAP认证服务的架构与实践

Go语言实现高性能LDAP认证服务的架构与实践

1. 项目背景与核心价值LDAP(轻量级目录访问协议)作为企业级身份认证的黄金标准,已经服务了超过80%的财富500强公司。我在金融科技领域实施统一认证体系时,发现传统Java方案存在启动慢、内存占用高等痛点。而Go语言凭借其协程并发模…

2026/7/19 0:01:04阅读更多 →
【AI面试官实战指南】:用ChatGPT模拟10类高频技术岗面试,3天提升应答精准度92%

【AI面试官实战指南】:用ChatGPT模拟10类高频技术岗面试,3天提升应答精准度92%

更多请点击: https://intelliparadigm.com 第一章:AI面试官实战指南的核心价值与适用场景 AI面试官并非替代人类HR的“黑箱工具”,而是以可解释、可审计、可迭代的方式,赋能招聘全链路的关键基础设施。其核心价值在于将主观经验沉…

2026/7/19 0:01:04阅读更多 →
YOLOv8推理性能优化:从1.2FPS到35FPS的全链路加速实践

YOLOv8推理性能优化:从1.2FPS到35FPS的全链路加速实践

如果你在部署 YOLOv8 时,发现推理速度只有可怜的 1-2 FPS,而别人的演示视频却能跑到 30 FPS 以上,那么问题很可能不在模型本身,而在于你的整个处理链路。很多开发者拿到一个训练好的 YOLOv8 模型后,会直接使用官方示例…

2026/7/18 22:49:46阅读更多 →
Coze与Dify对比指南:低代码AI应用开发从入门到实战

Coze与Dify对比指南:低代码AI应用开发从入门到实战

1. 从零到一:为什么你需要了解 Coze 和 Dify?如果你对 AI 应用开发感兴趣,但一看到“大模型”、“智能体”、“工作流”这些词就头疼,觉得门槛太高,那这篇文章就是为你准备的。很多开发者,包括我自己&#…

2026/7/18 14:49:24阅读更多 →
AI生图工具怎么选?2026年6月版实测对比

AI生图工具怎么选?2026年6月版实测对比

做自媒体的朋友应该都有体会:配图一直是个让人头疼的问题。2026年,AI生图工具已经非常成熟了,但工具太多反而不知道怎么选。以下是截至2026年6月我对主流AI生图工具的实测对比。Midjourney V8.1:速度之王2026年6月11日&#xff0c…

2026/7/18 18:49:35阅读更多 →