基于python的机器学习(七)—— 数据特征选择
目录
一、特征选择概念
二、特征选择的方法
2.1 过滤式特征选择
2.1.1 方差分析
2.1.2 相关系数
2.1.3 卡方检验
2.2 包裹式特征选择
2.2.1 递归特征消除
2.3 嵌入式特征选择
2.3.1 决策树特征重要性
一、特征选择概念
特征选择是机器学习非常重要的一个步骤,它指的是从原始数据中选择最相关的特征,以用于训练模型和预测。通过特征选择,可以提高模型的性能、减少过拟合、降低计算复杂度。
下面是使用随机森林进行特征选择的示例代码:
from sklearn.ensemble import RandomForestClassifier
from sklearn.datasets import make_classification# 创建一个样本数据集
X, y = make_classification(n_samples = 1000, n_features = 20, n_informative = 10, random_state = 0)# 使用随机森林进行特征选择
clf = RandomForestClassifier()
clf.fit(X, y)# 输出特征重要性
feature_importances = clf.feature_importances_
print("Feature importances:\n", feature_importances)# 选择重要性大于阈值的特征
selected_features = [i for i, importance in enumerate(feature_importances) if importance > 0.05]
print("Selected features:\n", selected_features)
二、特征选择的方法
特征选择的方法主要分为三类:过滤式特征选择、包裹式特征选择和嵌入式特征选择。
2.1 过滤式特征选择
过滤式特征选择是在特征选择和模型训练之前独立进行的,它基于特征之间的统计指标或特征和目标变量之间的相关性来评估特征的重要性。常用的过滤方法包括方差分析、相关系数、卡方检验等。这种方法的优势在于计算简单快速,适用于大规模数据集,但可能忽略了特征之间的相互关系。
2.1.1 方差分析
方差分析用于比较两个或多个组之间的平均值是否有显著差异。在特征选择中,可以利用方差分析来评估不同特征对目标变量的影响程度。
from scipy import stats# 示例数据
group1 = [10, 20, 30, 40, 50]
group2 = [15, 25, 35, 45, 55]
group3 = [5, 15, 25, 35, 45]# 进行方差分析
f_statistic, p_value = stats.f_oneway(group1, group2, group3)if p_value < 0.05:print("均值之间存在显著差异")
else:print("均值之间不存在显著差异")
2.1.2 相关系数
相关系数用于衡量两个变量之间的线性相关性。在特征选择中,可以通过计算特征与目标变量之间的相关系数来筛选与目标变量相关性高的特征。
import pandas as pd# 示例数据
data = {'feature1': [1, 2, 3, 4, 5],'feature2': [2, 4, 6, 8, 10],'target': [5, 10, 15, 20, 25]}df = pd.DataFrame(data)# 计算特征与目标变量之间的相关系数
correlation = df.corr()['target']
print(correlation)
2.1.3 卡方检验
卡方检验适用于分类变量之间的关联性检验,用于判断两个分类变量之间是否存在显著关联。
在scikit-learn中提供了SelectKBest类, 是对卡方验证的实现,通过SelectKBest 使用一系列的统计方法来选定数据特征。
卡方检验就是统计样本的实际观测值与理论推断值之间的偏离程度,实际观测值与理论推断值之间的偏离程度就决定卡方值的大小,卡方值越大,越不符合;卡方值越小,偏差越小,越趋于符合,若两个值完全相等时,卡方值就为0,表明理论值完全符合。
下面是通过卡方检验的方式来选择四个对结果影响最大的数据特征:(印地安人糖尿病数据集)
from pandas import read_csv
from numpy import set_printoptions
from sklearn.feature_selection import SelectKBest
from sklearn.feature_selection import chi2filename = 'Sklearn\pima_data.csv' # 导入数据
names = ['preg', 'plas', 'pres', 'skin', 'test', 'mass', 'pedi', 'age', 'class']
data = read_csv(filename, names = names)array = data.values
X = array[:, 0:8] # 将数据分为输入数据和输出结果
Y = array[:, 8]test = SelectKBest(score_func = chi2, k = 4) # 特征选定
fit = test.fit(X, Y)
set_printoptions(precision = 3)
print(fit.scores_)
features = fit.transform(X)
print(features)
2.2 包裹式特征选择
包裹式特征选择是在模型训练的过程中进行的,它直接利用模型的性能来评估特征的重要性。常见的包裹式方法包括递归特征消除(RFE)、基于模型的特征选择等。这种方法的优势在于考虑了特征之间的相互影响,但计算开销较大,不适用于大规模数据集。
2.2.1 递归特征消除
递归特征消除(RFE),使用一个基模型来进行多轮训练,每轮训练后,消除若干权值系数的特征,再基于新的特征集进行下一轮训练。通过每一次基模型的精度,来找到对最终的预测结果影响最大的数据特征。在scikit-learn文档中有更多的关于递归特征消除(RFE)的描述。
下面是通过递归特征消除来选定对预测结果影响最大的三个数据特征:(印地安人糖尿病数据集)
from pandas import read_csv
from sklearn.feature_selection import RFE
from sklearn.linear_model import LogisticRegressionfilename = 'Sklearn\pima_data.csv' # 注意数据集的路径
names = ['preg', 'plas', 'pres', 'skin', 'test', 'mass', 'pedi', 'age', 'class']
data = read_csv(filename, names = names)array = data.values
X = array[:, 0:8]
Y = array[:, 8]model = LogisticRegression() # 特征选定
rfe = RFE(model, n_features_to_select = 3)
fit = rfe.fit(X, Y)print("特征个数:\n",fit.n_features_)
print("被选定的特征:\n",fit.support_)
print("特征排名:",fit.ranking_)
2.3 嵌入式特征选择
嵌入式特征选择是将特征选择嵌入到模型训练的过程中,常用的方法包括Lasso回归、决策树特征重要性等。这种方法可以同时考虑特征的重要性和模型的性能,得到的特征选择结果较为稳健。但是,嵌入式特征选择通常需要调节超参数,对模型的选择和调优有一定要求。
2.3.1 决策树特征重要性
决策树是一种常用的机器学习算法,除了用于预测和分类外,还可以用于特征选择。在决策树算法中,可以通过计算特征的重要性来衡量特征对模型预测的贡献程度,从而进行特征选择。
使用ExtraTreesClassifier类进行特征重要性计算,让算法给出每一个数据特征的得分:
from pandas import read_csv
from sklearn.ensemble import ExtraTreesClassifierfilename = 'Sklearn\pima_data.csv'
names = ['preg', 'plas', 'pres', 'skin', 'test', 'mass', 'pedi', 'age', 'class']
data = read_csv(filename, names = names)array = data.values
X = array[:, 0:8]
Y = array[:, 8]model = ExtraTreesClassifier()
fit = model.fit(X, Y)
print(fit.feature_importances_)
相关文章:
基于python的机器学习(七)—— 数据特征选择
目录 一、特征选择概念 二、特征选择的方法 2.1 过滤式特征选择 2.1.1 方差分析 2.1.2 相关系数 2.1.3 卡方检验 2.2 包裹式特征选择 2.2.1 递归特征消除 2.3 嵌入式特征选择 2.3.1 决策树特征重要性 一、特征选择概念 特征选择是机器学习非常重要的一个步骤&#x…...
从电商角度设计大模型的 Prompt
从电商角度设计大模型的 Prompt,有一个关键核心思路:围绕具体业务场景明确任务目标输出格式,帮助模型为运营、客服、营销、数据分析等工作提效。以下是电商场景下 Prompt 设计的完整指南,包含通用思路、模块范例、实战案例等内容。…...
从零基础到最佳实践:Vue.js 系列(5/10):《状态管理》
引言 你是不是正在用 Vue.js 开发一个很酷的应用,然后发现组件之间的数据传递变得越来越混乱?比如,一个按钮的状态要传到好几层组件,或者多个页面需要共享同一个用户信息。这时候,状态管理就登场了!在 Vue…...
git checkout HEAD
git checkout HEAD 主要用于将工作目录和暂存区的内容重置为当前 HEAD 指向的提交状态,常用于撤销未提交的修改15。具体行为如下: 一、核心作用 恢复工作区文件 将指定文件或全部文件恢复到 HEAD 指向的提交状态,丢弃工作区中未暂存的修改…...
git工具使用
安装Git 在开始使用Git之前,需要在本地计算机上安装Git工具。Git支持Windows、macOS和Linux系统。可以从Git官方网站下载适合操作系统的安装包,并按照安装向导进行安装。 bash复制插入 # 在Linux上安装Git sudo apt-get install git# 在macOS上安装Git…...
极大似然估计与机器学习
复习概统的时候突然发现好像极大似然估计MLE与机器学习的数据驱动非常相似,都是采样样本然后估计模型参数。貌似,后知后觉的才意识到极大似然估计就是机器学习有效的数学保证 下面以拟合线性分布的最小二乘与分类问题为例推到以下如何从似然函数推导出M…...
基于 Guns v5.1 框架的分页教程
基于 Guns v5.1 框架的分页教程 第一步:Controller 层处理前端请求 在 Controller 中,需要接收 Bootstrap Table 传来的分页参数(limit, offset, sort, order)。Guns 提供了封装好的 PageFactory 类来简化 Page 对象的创建。 R…...
从零搭建SpringBoot Web 单体项目【基础篇】2、SpringBoot 整合数据库
系列文章 从零搭建SpringBoot Web单体项目【基础篇】1、IDEA搭建SpringBoot项目 从零搭建 SpringBoot Web 单体项目【基础篇】2、SpringBoot 整合数据库 目录 一、项目基础环境说明 二、数据库整合流程 1. 添加 MyBatis-Plus 相关依赖(pom.xml) 2…...
Supplemental Table 5FAM49B H-SCORE与其他临床特征的关系
以下是针对 Supplemental Table 5 中不同变量类型所需检验方法的 SPSS纯界面操作步骤(严格匹配原文统计方法): Supplemental Table 5 SPSS操作步骤 目标:分析FAM49B H-SCORE与其他临床特征的关系,按变量类型选择检验方法。 变量与检验方法对应表 变量变量类型检验方法SP…...
信息系统项目管理师考前练习4
项目范围基准变更 当客户提出新增功能需求时,项目经理首先应该: A. 立即更新范围说明书 B. 提交变更请求并评估影响 C. 要求团队加班实现 D. 拒绝变更以保持进度 答案:B 解析:所有范围变更必须走正式变更流程(第5版强调变更控制),评估影响是第一步。 混合项目管理模式…...
C语言判断素数(附带源码和解析)
素数,也称为质数,是一个大于 1 的自然数,除了 1 和它本身外,不能被其他自然数整除。换句话说,素数只有两个因子:1 和它自身。例如,2、3、5、7、11 和 13 都是素数。 素数在数学和计算机科学中扮…...
汽车电子电气架构诊断功能开发全流程解析
我是穿拖鞋的汉子,魔都中坚持长期主义的汽车电子工程师。 老规矩,分享一段喜欢的文字,避免自己成为高知识低文化的工程师: 钝感力的“钝”,不是木讷、迟钝,而是直面困境的韧劲和耐力,是面对外界噪音的通透淡然。 生活中有两种人,一种人格外在意别人的眼光;另一种人无论…...
Xilinx XCAU10P-2FFVB676I 赛灵思 Artix UltraScale+ FPGA
XCAU10P-2FFVB676I 是 AMD Xilinx 推出的 Artix UltraScale™ FPGA 器件,内部集成了约 96,250 逻辑单元,满足中等规模高性能应用的需求。该芯片采用 16 nm FinFET 制程工艺,核心电压典型值约 0.85 V,能够在较低功耗下提供高达 775…...
DS18B20 温度传感器实验探索与实践分享
DS18B20 温度传感器实验探索与实践分享 在嵌入式系统开发领域,温度监测是常见的应用场景。本次实验聚焦于 DS18B20 温度传感器,旨在掌握其工作原理、单总线通信方式,以及实现温度采集与数码管显示,同时开启温度报警功能。接下来&…...
RT_Thread——内存管理
文章目录 一、为什么要自己实现内存管理二、RT-Thread 的内存管理方法2.1 小内存管理算法2.2 slab 管理算法2.3 memheap 管理算法 三、Heap 相关的函数3.1 rt_system_heap_init3.2 rt_malloc/rt_realloc/rt_calloc2.3 rt_free2.4 rt_malloc_sethook/rt_free_sethook 一、为什么…...
Temporary failure in name resolution
这个错误 ping: baidu.com: Temporary failure in name resolution 通常表示 DNS 解析的问题,也就是说你的系统无法通过域名服务器解析 baidu.com 的 IP 地址。 解决方案: 检查 DNS 配置( 有效 ): 确保系统的 DNS 配置是正确的。你可以检查 …...
【动手学深度学习】1.4~1.8 深度学习的发展及其特征
目录 1.4. 起源1.5. 深度学习的发展1.6. 深度学习的成功案例1.7. 特点1.8. 小结 1.4. 起源 深度学习的起源可追溯至多个领域的长期发展: 统计学基础:早期统计学方法(如伯努利分布、高斯分布、最小均方算法)和估计思想(…...
深度学习之序列建模的核心技术:LSTM架构深度解析与优化策略
LSTM深度解析 一、引言 在深度学习领域,循环神经网络(RNN)在处理序列数据方面具有独特的优势,例如语音识别、自然语言处理等任务。然而,传统的 RNN 在处理长序列数据时面临着严重的梯度消失问题,这使得网…...
Gartner研究报告《Generative AI 赋能Digital Commerce的三种路径》学习心得
一、研究背景 随着生成式 AI(GenAI)技术的迅速发展,其在数字商务领域的应用受到了广泛关注。这篇研究报告深入探讨了 GenAI 在数字商务中的角色以及它如何与现有的数字商务技术相结合来发挥优势,为应用领导者提供了关于如何利用 GenAI 优化技术投资策略的见解。 二、GenA…...
解锁 YOLOv8 新潜能:EfficientViT 主干网络的优化实践与实验数据解读
文章目录 一、YOLO 系列主干网络的发展历程二、EfficientViT:YOLOv8 主干网络的新宠(一)EfficientViT 的核心优势(二)EfficientViT 在 YOLOv8 中的集成与实现 三、实验对比:EfficientViT vs. MobileNet 系列…...
【前端基础】12、CSS的overflow(visible、hidden、scroll、auto)【注:只有最基础的说明。】
一、overflow的作用 用于控制内容溢出时的行为。 二、overflow的使用 visible:超出的部分正常显示(默认设定) hidden:超出的部分隐藏显示(直接裁剪掉) scroll:超出的部分滚动显示 滚动条…...
创建一个element plus项目
当然可以!下面是一个 Vue 3 Element Plus 的最简单完整示例,它包括: 使用 <el-button> 按钮组件点击按钮后用 ElMessage 弹出提示 ✅ 1. 安装并初始化项目(如果还没创建项目) 你可以用官方推荐的方式快速创建…...
openCV1.1 Mat对象
imread(“D:\souse\duoxile.jpg”, IMREAD_COLOR); 功能: 从指定路径读取图像文件并解码为OpenCV的Mat对象 第一个参数: 文件路径 类型: const string&描述: 要读取的图像文件的绝对或相对路径示例: “D:\souse\duoxile.jpg” 或 “./images/test.png”第二个参数: 读取模…...
C++:array容器
array容器是序列容器,它的特点是:静态,固定数目。可以看作更安全的数组。 它还有一些成员函数,如begin():返回指向容器中第一个元素的随机访问迭代器。 #include<iostream>//数组容器 #…...
26、AI 预测性维护 (燃气轮机轴承) - /安全与维护组件/ai-predictive-maintenance-turbine
76个工业组件库示例汇总 AI 预测性维护模拟组件 (燃气轮机轴承) 概述 这是一个交互式的 Web 组件,旨在模拟基于 AI 的预测性维护 (Predictive Maintenance, PdM) 概念,应用于工业燃气轮机的关键部件(例如轴承)。它通过模拟传感器数据、动态预测剩余使用寿命 (RUL),并根…...
特种兵参会
出发(5.15) 有了去年去5月去深圳参加OpenTenBase工委会成立的经验,今年这个时候去广州就一定要在下午16点前起飞。恰好到了候机口有蔚来的牛屋,进去躺了一会。飞机顺利到达广州。晚上小聚 总监约了祁总,我们相识多年&…...
手搓四人麻将程序
一、麻将牌的表示 在麻将游戏中,总共有一百四十四张牌,这些牌被分为多个类别,每个类别又包含了不同的牌型。具体来说,麻将牌主要包括序数牌、字牌和花牌三大类。序数牌中,包含有万子、条子和筒子,每种花色…...
一命通关单调栈
前言 我们只是卑微的后端开发。按理说,我们是不需要学这些比较进阶的算法的,可是,这个世界就是不讲道理。最开始,想法是给leetcode中等题全通关,我又不打ACM我去天天钻研hard干嘛,于是碰见单调栈树状数组的…...
NV009NV010美光闪存颗粒NV011NV012
NV009NV010美光闪存颗粒NV011NV012 美光NV009-NV012闪存颗粒技术解析与行业应用全景 一、核心技术架构与制程突破 美光NV009至NV012系列闪存颗粒基于第九代3D TLC架构,通过垂直堆叠技术突破传统2D平面存储的物理限制。该架构将存储单元分层排列,如同将…...
线程、线程池、异步
目录 什么是线程 什么是线程池 什么是异步 异步与线程关系 JS中的异步 什么是线程 线程 Thread 是计算机执行的最小单位,是 进程 内的一个实体,可以被操作系统独立调用和执行 线程可以理解为进程内的“程序执行流”,一个进程可以包含多…...
docker面试题(4)
Docker与Vagrant有何不同 两者的定位完全不同 Vagrant类似于Boot2Docker(一款运行Docker的最小内核),是一套虚拟机的管理环境,Vagrant可 以在多种系统上和虚拟机软件中运行,可以在Windows、Mac等非Linux平台上为Docker…...
双检锁(Double-Checked Locking)单例模式
在项目中使用双检锁(Double-Checked Locking)单例模式来管理 JSON 格式化处理对象(如 ObjectMapper 在 Jackson 库中,或 JsonParser 在 Gson 库中)是一种常见的做法。这种模式确保了对象只被创建一次,同时在…...
建立java项目
java端: 在idea里面新建一个java,maven项目(springboot): 注意:JDK与java都得是一样的 添加基本的依赖项: 也可以在pom.xml中点击这个,从而跳转到添加依赖 建立三层架构: 在相应的java类中添加代码: <1.UserController package com.example.demo.controller;import com…...
Go语言内存共享与扩容机制 -《Go语言实战指南》
切片作为 Go 中的高频数据结构,其内存共享机制和自动扩容策略直接影响程序性能与行为,深入理解这两者,是高效使用切片的关键。 一、切片的内存结构回顾 切片是对底层数组的一个抽象,其本质是一个结构体: type slice …...
如果教材这样讲--单片机IO口Additional Functions和 Alternate Functions的区别
不管是硬件工程师还是嵌入式软件工程师,都应该能够熟练的看懂数据手册,尤其是英文。在设计单片机外围电路时,工程师需要了解单片机的GPIO口的各项功能来满足自己的设计需求,单片机小白们在查看单片机数据手册时,看到Ad…...
《Effective Java(第三版)》笔记
思维导图 1-4章 5-8章 9-12 章 资料 源码:https://github.com/jbloch/effective-java-3e-source-code...
实践大模型提示工程(Prompt Engineering)
任务目标 本文将结合实战营中的具体案例,分享在提示词设计、模型调用及复杂任务拆解中的实践心得,希望能为读者打开一扇通往 AI 开发实战的窗口。 书生浦语官方链接 实践一——写一段话介绍书生浦语实战营 在提示工程中,第一点给出清晰的…...
东莞一锂离子电池公司IPO终止,客户与供应商重叠,社保缴纳情况引疑
作者:小熊 来源:IPO魔女 5月17日,深交所发布公告称,东莞市朗泰通科技股份有限公司(简称朗泰通科技)已主动撤回其IPO申请。该公司本次IPO原拟募集资金7.0208亿元,保荐机构为国金证券股份有限公…...
互联网大厂Java求职面试:Spring Cloud微服务架构与AI集成挑战
互联网大厂Java求职面试:Spring Cloud微服务架构与AI集成挑战 引言 在当前快速发展的互联网行业中,Java开发者在面对复杂的分布式系统设计时,需要掌握从微服务架构到AI模型集成的多种技能。本文通过一场模拟面试,深入探讨了基于…...
解决C#泛型类参数无法带参数实例化的问题
概要 本文提供了一个基于C#表达式目录树的方法来解决泛型参数不能调用带参数的构造方法来实例化的问题。 C#泛型的限制 我们看如下的代码,User类需要一个泛型类,泛型类是要以CreditCard为基类。 class User<T> where T :CreditCard, new() {pr…...
微型化GNSS射频前端芯片AT2659S:L1频段多系统支持,SOT23-6封装
AT2659S是一款采用SiGe技术的低噪声放大器(LNA),相比传统CMOS工艺,它在功耗和噪声性能上进行了显著优化。该芯片支持L1频段的多模卫星导航系统,包括北斗二代、GPS、伽利略和Glonass,适用于高灵敏度的GNSS接…...
【图像大模型】深度解析RIFE: 基于中间流估计的实时视频插帧算法
基于深度学习的视频插帧算法RIFE技术解析与实战指南 一、项目背景与技术原理1.1 视频插帧技术概述1.2 RIFE核心创新1.3 算法原理详解1.3.1 网络架构1.3.2 损失函数设计1.3.3 时间自适应训练 二、项目部署与执行指南2.1 环境配置2.2 模型推理2.2.1 快速测试2.2.2 视频处理 2.3 模…...
Docker安装Fluentd采集中间件
Fluentd 简介 :Fluentd 是一个高性能、可扩展的数据收集与聚合工具,能够统一数据收集和消费,实现各种数据源到各种数据接收器的高效传输,广泛应用于日志收集等领域。 功能特点 : 统一日志收集 :支持从各种…...
【攻防实战】MacOS系统上线Cobalt Strike
如果巅峰留不住,那就重走来时路 前言 目前在一些攻防项目中遇到的互联网大厂,很多员工使用的都是MacOS主机。研究过程中发现网上这方面分享比较少,这里记录分享一下。 插件安装 配置cna基础文件,注意路径名不能包含中文或特殊…...
基于Resnet-34的树叶分类(李沐深度学习基础竞赛)
目录 一,数据集介绍 1.1 数据集下载 1.2 数据集介绍 二,Resnet-34介绍 三,模型训练 四,模型预测 五,测试结果 5.1 测试集结果 5.2 预测结果 5.3 总结 一,数据集介绍 1.1 数据集下载 本数据集下载…...
PCB设计实践(二十三)什么是阻抗匹配,需要做啥
PCB设计中的阻抗匹配是高速数字电路、射频通信、信号完整性等领域的核心技术,其重要性贯穿从基础理论到复杂系统设计的全流程。本文将从工程实践角度深入探讨阻抗匹配的本质原理、应用场景、设计方法、常见误区及解决方案,全面解析这一影响现代电子设备性…...
网络世界的“变色龙“:动态IP如何重构你的数据旅程?
在深秋的下午调试代码时,我偶然发现服务器日志中出现异常登录记录——IP地址显示为某个境外数据中心。更有趣的是,当我切换到公司VPN后,这个"可疑IP"竟自动消失在了防火墙监控列表中。这个瞬间让我意识到:现代网络架构中…...
Chrome浏览器捕获hover元素样式
–前言– 某些元素,只有hover上去才会看到触发效果,但是鼠标移开就找不到element元素,导致无法调试样式。下属两种方案可参考: 文章目录 一、方式1:通过class伪类触发二、方式2:通过断点调试2.1控制台切换到…...
嵌入式自学第二十五天(5.21)
(1)二进制文件读写操作: 例: #include<stdio.h> int main() { FILE *fp fopen("a.out","r"); FILE *fp1 fopen("app","w"); if(NULL fp || NULL fp1) { …...
golang库源码学习——Pond,小而精的工作池库
pond 是一个轻量级的 Goroutine 池库,用于高效管理并发任务。它提供了灵活的配置选项和多种策略,适合处理高并发场景。 GitHub - alitto/pond at v1 一、特点: 1.轻量级 pond 的代码库非常精简,它的V1版本仅有四个业务文件&#…...