【Python机器学习】自动化特征选择——单变量统计

news2024/12/23 6:15:20

添加更多特征会使所有的模型变得更加复杂,从而增大过拟合的可能性。

在添加新特征或处理一般的高位数据集时,最好将特征的数量减少到只包含最有用的那些特征,并删除其余特征,这样会得到泛化能力更好、更简单的模型。

对于如何判断每个特征的作用有多大,有三种基本策略:单变量统计基于模型的选择迭代选择。所有的这些方法都是监督方法,即它们需要目标来拟合模型。这也就是说,我们需要将数据划分为训练集和测试集,并只在训练集上拟合特征选择。

在单变量统计中,我们计算每个特征和目标值之间的关系是否存在统计显著性,然后选择具有最高置信度的特征。对于分类问题,这也被称为方差分析(ANOVA)。这些测试的一个关键性质就是他们是单变量的。即它们只单独考虑每个特征。因此如果一个特征只有在与另一个特征合并时才具有信息量,那么这个特征将被舍弃。单变量测试的计算速度通常很快,并且不需要构建模型。另一方面,他们完全独立于你可能想要在特征选择之后应用的模型。

想要在scikit-learn中使用单变量特征选择,你需要进行一项测试(对分类问题通常是f_classif,对回归问题通常是f_regression),然后基于测试中确定的p值来选择一种舍弃特征的方法。所有舍弃参数的方法都是用阈值来舍弃所有p值过大的特征,因为这意味着它们不可能与目标值相关。计算阈值的方法各有不同,最简单的事SelectKBest和SelectPercenttile,前者选择固定数量的k个特特征,后者选择固定百分比的特征。我们将分类的特征选择应用于cancer数据集,为了使任务难一点,我们将向数据中添加一些没有信息量的噪声特征。

我们期望特征选择能够识别没有信息量的特征并删除它们:

from sklearn.datasets import load_breast_cancer
from sklearn.feature_selection import SelectKBest,SelectPercentile
from sklearn.model_selection import train_test_split
import numpy as np


cancer=load_breast_cancer()
rng=np.random.RandomState(42)
noise=rng.normal(size=(len(cancer.data),50))
#向数据中添加噪声
#前30个特征来自数据集,后50个是噪声
X_w_noise=np.hstack([cancer.data,noise])


X_train,X_test,y_train,y_test=train_test_split(X_w_noise,cancer.target,random_state=0,test_size=.5)

select=SelectPercentile(percentile=50)
select.fit(X_train,y_train)

X_train_selected=select.transform(X_train)

print('训练集形状:{}'.format(X_train.shape))
print('特征选择训练集形状:{}'.format(X_train_selected.shape))

可以发现,特征数量由80个减少为40个,我们可以用get_support方法来查看哪些特征被选中,它会返回所选特征的布尔遮罩(mask):


mask=select.get_support()
print(mask)
plt.matshow(mask.reshape(1,-1),cmap='gray_r')
plt.xlabel('Sample index')
plt.show()

从可视化图中可以看到,大多数所选择的特征都是原始特征,并且大多数噪声特征都已被删除。但原始特征的还原并不完美。比较Logistic回归在所有特征上的性能和仅使用所选特征的性能:

X_test_selected=select.transform(X_test)
lr=LogisticRegression()
lr.fit(X_train,y_train)
print('所有特征下的score:{:.3f}'.format(lr.score(X_test,y_test)))
lr.fit(X_train_selected,y_train)
print('所选特征下的score:{:.3f}'.format(lr.score(X_test_selected,y_test)))

这个例子下,删除噪声特征可以提高性能,即使丢失了某些原始特征。这是一个非常简单的示例,在真实数据上的结果要更加复杂。如果特征量太大以至于无法构建模型,或者怀疑许多特征完全没有信息量,那么单变量特征选择还是非常有用的。

本文来自互联网用户投稿,该文观点仅代表作者本人,不代表本站立场。本站仅提供信息存储空间服务,不拥有所有权,不承担相关法律责任。如若转载,请注明出处:http://www.coloradmin.cn/o/1868948.html

如若内容造成侵权/违法违规/事实不符,请联系多彩编程网进行投诉反馈,一经查实,立即删除!

相关文章

秋招倒计时?到底需要准备到什么程度?

秋招倒计时?需要准备到什么程度? 秋招,面向全国的毕业生,招聘的激烈程度可想而知!按照往年时间,秋招通常从八月初开始,九月黄金期,十月中后期。距今刚好差不多60天,时间其…

堡垒机软件详细定义以及部分厂商汇总

随着大家对网络安全的重视,越来越多的企业开始采购堡垒机。堡垒机可以分为硬件堡垒机、软件堡垒机、软硬一体机。今天我们就来聊聊堡垒机软件详细定义以及部分厂商汇总。 堡垒机软件详细定义 堡垒机软件,又称为运维安全审计系统,其主要功能在…

算子级血缘和血缘查询管理

数据链路 血缘关系 应用场景:数据资产,数据开发,数据治理,数据安全等等 (绿色箭头上面是数据治理) 场景: 数据链路的高效盘点与理解 数仓模型的长效优化机制 风险影响的及时全面分析 重复…

Linux通用系统高危漏洞(CVE-2024-1086)修复案例

一、漏洞描述 2024年3月28日, Linux kernel权限提升漏洞(CVE-2024-1086)的PoC/EXP在互联网上公开,该漏洞的CVSS评分为7.8,目前漏洞细节已经公开披露,美国网络安全与基础设施安全局(CISA&#x…

npm install报错Maximum call stack size exceeded

npm 报错 方案: npm cache clean --force npm install

【专业性强】地球科学SCI期刊,中科院2区,学术影响力大

一、期刊名称 GIScience & Remote Sensing 二、期刊简介概况 期刊类型:SCI 学科领域:地球科学 影响因子:6.7 中科院分区:2区 三、期刊征稿范围 GIScience & Remote Sensing是一本完全开放获取的期刊,发表…

Java基础知识整理笔记

目录 1.关于Java概念 1.1 谈谈对Java的理解? 1.2 Java的基础数据类型? 1.3 关于面向对象的设计理解 1.3.1 面向对象的特性有哪些? 1.3.2 重写和重载的区别? 1.3.3 面向对象的设计原则是什么? 1.4 关于变量与方…

约课健身管理系统小程序源码

健身达人的智能助手 一款基于FastAdminThinkPHPUniapp开发的米扬约课健身管理系统,应用于健身房,健身工作室,运动会所,运动场馆,瑜伽馆,拳馆等泛健身行业的场馆中。米扬约课健身致力于为各种健身场馆打造真…

数学类-课程资料推荐-中科大教师首页

http://staff.ustc.edu.cn/~rui/cn/rui-course.html 数学分析讲义(第一册) (ustc.edu.cn)

C# 入门—基本语法

一、数据类型 C# 语言中内置了一些基本的数据类型,数据类型用来指定程序中变量可以存储的数据的类型,C# 中的数据类型可以大致分为三类: 值类型(Value types);引用类型(References types&…

Windows 电脑类别怎么区分?不同类别区分总结

电脑类别 Windows 电脑的类别有哪些?我们可以大致分为这三类:CopilotPC、AI PC、普通 PC。下面就来看看这些电脑类别的区别。 普通 PC 普通 PC 就是指那些标准的台式电脑或者笔记本电脑,它们是由中央处理器(CPU)以及…

期货日内交易口诀

1、向下差价法 前提:要判断准确后市是向下行情走势。被套后,等反弹到一定的高度,估计见短线高点了,先卖出,待其下跌一段后再买回。通过这样不断地高卖低买来降低成本,最后等总资金补回了亏损,完…

前端写代码真的有必要封装太好么?

前言 封装、代码复用、设计模式…… 这些都是方法,业务才是目的。技术始终是为业务服务的。能够满足业务需求,并且用起来舒服的,都是好方法。 不存在一套适用于所有项目的最佳代码组织方法,你需要结合业务,去不断地…

基于PHP+MySQL组合开发家政预约服务小程序源码系统 带完整的安装代码包以及搭建教程

系统概述 在当今数字化时代,家政服务行业也逐渐融入了科技的力量。为了满足市场需求,我们开发了一款基于 PHPMySQL 组合的家政预约服务小程序源码系统。该系统不仅提供了便捷的家政服务预约功能,还具备完整的安装代码包和详细的搭建教程&…

海南云亿商务咨询有限公司怎么样?

在数字化浪潮汹涌的当下,电商行业正以前所未有的速度发展,而抖音作为新兴的电商平台,凭借其独特的短视频直播形式,吸引了无数商家和消费者的目光。海南云亿商务咨询有限公司,作为抖音电商服务的佼佼者,凭借…

苹果相册视频怎么提取音频,一个小工具就能轻松搞定

苹果相册视频怎么提取音频?我们时常捕捉到那些转瞬即逝的美好瞬间,无论是家人欢聚的温馨画面,还是朋友间开怀大笑的片段,每一帧都承载着满满的回忆。而藏匿于这些珍贵视频背后的,往往还有那首触动心弦的背景音乐&#…

[leetcode]squares-of-a-sorted-array. 有序数组的平方

. - 力扣&#xff08;LeetCode&#xff09; class Solution { public:vector<int> sortedSquares(vector<int>& nums) {int n nums.size();vector<int> ans(n);for (int i 0, j n - 1, pos n - 1; i < j;) {if (nums[i] * nums[i] > nums[j] *…

Java的lambda表达式使用方式,lambda表达式到底为了做什么

感觉从狭义的使用目的来说&#xff0c;lambda表达式就是为了简化某些匿名内部类&#xff0c;当然不是所有的匿名内部类都能被简写。也就是你想要某些返回值作为参数不用去显示的写调用方法或者传参&#xff0c;具体来看看下面的例子。 // Java7及以前假设想要排序List的方式&a…

吴恩达LangChain教程:Embedding与文档解析

当前有很多应用想要实现根据文档或者文本内容实现用户问答&#xff0c;或者实现多轮会话能力&#xff0c;这时候就会使用到Embedding的能力。 01 | 使用类介绍 想要依据Embedding实现文本检索&#xff0c;需要引入如下的依赖。 其中&#xff0c;RetrievalQA的作用是对一些文档…

开发、测试、产品、运营绩效考核表(Excel原件)

1、产品&运营绩效考核表 2、开发绩效考核表 3、测试绩效考核表 4、CPI指标库 软件资料清单列表部分文档&#xff1a; 工作安排任务书&#xff0c;可行性分析报告&#xff0c;立项申请审批表&#xff0c;产品需求规格说明书&#xff0c;需求调研计划&#xff0c;用户需求调…