通过强化学习彻底改变大型数据集特征选择

在这里插入图片描述

文章目录

  • 一、说明
  • 二、强化学习:特征选择的马尔可夫决策问题
  • 三、用于使用强化学习进行特征选择的 python 库
    • 3.1. 数据预处理
    • 3.2. 安装和导入FSRLearning库
  • 四、结论和参考文献

一、说明

   了解强化学习如何改变机器学习模型的特征选择。通过实际示例和专用的 Python 库了解这种创新方法的过程、实现和好处。

   特征选择是构建机器学习模型过程中的决定性步骤。为模型和我们想要实现的任务选择好的功能绝对可以提高性能。事实上,一个特征可能会增加一些噪声,然后干扰模型。

   此外,如果我们要处理高维数据集,选择特征尤其重要。它使模型能够更快、更好地学习。然后,我们的想法是找到最佳数量的功能和最有意义的功能。

   在本文中,我将解决这个问题,并通过介绍一种新实现的特征选择方法来解决这个问题。尽管它存在许多不同的功能选择过程,但这里不会介绍它们,因为很多文章已经在处理它们。我将重点介绍使用强化学习策略的特征选择。

   首先,将讨论强化学习,尤其是马尔可夫决策过程。这是数据科学领域的一种非常新的方法,尤其是对于特征选择目的。之后,我将介绍它的实现以及如何安装和使用 python 库 (FSRLearning)。最后,我将证明这种实现的效率。在包装器或过滤等可能的特征选择方法中,强化学习是最强大和最有效的。

   本文的目的是强调具体和面向实际问题的利用的实现。这个问题的理论方面将通过示例进行简化,尽管最后将提供一些参考资料。

二、强化学习:特征选择的马尔可夫决策问题

   已经证明,强化学习 (RL) 技术对于解决游戏等问题非常有效。RL的概念基于马尔可夫决策过程(MDP)。这里的重点不是要深入定义 MDP,而是要大致了解它是如何工作的,以及它如何对我们的问题有用。

   RL 背后的天真想法是代理从未知环境中开始。此代理必须执行操作才能完成任务。根据智能体的当前状态和他之前选择的动作,智能体会更倾向于选择一些动作。在达到每个新状态并采取任何行动时,代理都会获得奖励。以下是我们需要为特征选择目的定义的主要参数:

  • 什么是状态?
  • 什么是动作?
  • 奖励是什么?
  • 我们如何选择一个动作?
       首先,状态只是数据集中存在的特征的子集。例如,如果数据集具有三个特征(年龄、性别、身高)和一个标签,则可能是以下状态:
[]                                              --> Empty set                           
[Age], [Gender], [Height]                       --> 1-feature set
[Age, Gender], [Gender, Height], [Age, Height]  --> 2-feature set
[Age, Gender, Height]                           --> All-feature set

   在某种状态下,特征的顺序无关紧要,本文稍后将解释为什么。我们必须将其视为一个集合,而不是一个功能列表。

   关于操作,我们可以从一个子集转到任何其他子集,其特征尚未探索的特征比当前状态多。在要素选择问题中,操作是在当前状态下选择尚未探索的要素,并将其添加到下一个状态。下面是可能操作的示例:

[Age] -> [Age, Gender]
[Gender, Height] -> [Age, Gender, Height]

下面是一个不可能的操作示例:

[Age] -> [Age, Gender, Height]
[Age, Gender] -> [Age]
[Gender] -> [Gender, Gender]

   我们已经定义了状态和行动,但没有定义奖励。奖励是用于评估状态质量的实数。例如,如果一个机器人试图到达迷宫的出口,并决定去出口作为他的下一个动作,那么与这个动作相关的奖励将是“好的”。如果他选择进入陷阱作为下一步行动,那么奖励将是“不好的”。奖励是一个值,它带来了有关先前所采取的行动的信息。

   在特征选择问题中,一个有趣的奖励可能是通过添加新特征添加到模型中的准确性值。以下是奖励计算方法的示例:

[Age] --> Accuracy = 0.65
[Age, Gender] --> Accuracy = 0.76
Reward(Gender) = 0.76 - 0.65 = 0.11

   对于我们第一次访问的每个州,分类器都将使用特征集进行训练。此值存储在状态中,即使稍后再次达到该状态,分类器的训练也只会发生一次,这非常昂贵。分类器不考虑特征的顺序。这就是为什么我们可以把这个问题看作是一个图,而不是一棵树。在此示例中,选择“性别”作为模型的新特征的操作的奖励是当前状态与下一状态的准确性之间的差值。
在这里插入图片描述
每个状态都有几个可能的行动和奖励(图片由作者提供)

   在上图中,每个特征都映射到一个数字(即“年龄”是 1,“性别”是 2,“身高”是 3)。完全可以采用其他指标来最大化以找到最佳集。在许多业务应用中,召回率比准确性更重要。

   下一个重要的问题是我们如何从当前状态中选择下一个状态,或者我们如何探索我们的环境。我们必须找到最佳方法来做到这一点,因为它很快就会成为一个非常复杂的问题。事实上,如果我们天真地探索一个有 10 个特征的问题中所有可能的特征集,那么状态的数量将是

10! + 2 = 3 628 802 possible states

   +2 是因为我们考虑了一个空状态和一个包含所有可能特征的状态。在这个问题上,我们必须在所有状态上训练相同的模型,以获得最大化准确性的特征集。在 RL 方法中,我们不必进入所有状态,也不必每次进入已经访问过的州时都训练模型。

   我们必须为这个问题确定一些停止条件,稍后将详细介绍。目前,已经选择了 epsilon-greedy 状态选择。这个想法是从当前状态开始,我们随机选择下一个动作,概率为 epsilon(介于 0 和 1 之间,通常在 0.2 左右),否则选择使函数最大化的动作。对于特征选择,函数是每个特征为模型精度带来的奖励的平均值。

   epsilon-greedy 算法包含两个步骤:

   随机相位:使用概率 epsilon,我们在当前状态的可能邻居中随机选择下一个状态(我们可以想象均匀或 softmax 选择)
   贪婪阶段:我们选择下一个状态,使添加到当前状态的特征对模型的精度贡献最大。为了降低时间复杂性,我们初始化了一个包含每个特征的此值的列表。每次选择功能时,此列表都会更新。由于以下公式,更新非常优化:

在这里插入图片描述
更新每个功能的平均奖励列表(图片由作者提供)

AORf : 功能“f”带来的平均奖励
k : 选择“f”的次数
V(F) :特征集 F 的状态值(出于清晰起见,本文未详述)
   全局的想法是找出哪个特征为模型带来了最大的准确性。这就是为什么我们需要浏览不同的状态,以便在许多不同的环境中评估模型特征的最全局准确值。

   最后,我将详细介绍两个停止条件。由于目标是最小化算法访问的状态数量,因此我们需要小心它们。我们访问的从未访问过的州越少,我们必须使用不同特征集训练的模型数量就越少。就时间和计算能力而言,训练模型以获得准确性是最昂贵的阶段。

   在任何情况下,该算法都会在最终状态(包含所有特征的集合)中停止。我们希望避免达到这种状态,因为它是训练模型最昂贵的。
   此外,如果一系列访问状态的值连续下降,它会停止浏览图形。设置了一个阈值,使得数据集中总要素数的平方根之后,该阈值将停止探索。
   现在已经解释了问题的建模,我们将详细介绍 python 中的实现。

三、用于使用强化学习进行特征选择的 python 库

   可以使用解决此问题的 python 库。我将在这一部分中解释它是如何工作的,并证明它是一种有效的策略。此外,本文作为文档,您将能够在本部分结束时将此库用于您的项目。

3.1. 数据预处理

   由于我们需要评估所访问状态的准确性,因此我们需要为模型提供用于此特征选择任务的特征和数据。数据必须经过归一化,分类变量必须编码,并且行数尽可能少(行越小,算法越快)。此外,如上一部分所述,在要素和一些整数之间创建映射非常重要。此步骤不是强制性的,但非常推荐。此步骤的最终结果是获取一个包含所有特征的 DataFrame,以及另一个包含要预测的标签的 DataFrame。下面是一个使用数据集作为基准的示例(可以在此处找到

#Get the pandas DataFrame from the csv file (15 features, 690 rows)
australian_data = pd.read_csv('australian_data.csv', header=None)

#DataFrame with the features
X = australian_data.drop(14, axis=1)

#DataFrame with the labels
y = australian_data[14]

3.2. 安装和导入FSRLearning库

   第二步是使用 pip 安装库。以下是安装它的命令:

pip install FSRLearning


若要导入库,可以使用以下代码:

from FSRLearning import Feature_Selector_RL

   只需创建对象Feature_Selector_RL即可创建功能选择器。需要填写一些参数。

  • feature_number (integer) : DataFrame X 中的要素数
  • feature_structure (dictionary) : 图实现的字典
  • eps (float [0; 1]) : 选择随机下一个状态的概率,0 是唯一贪婪算法,1 是唯一随机算法
  • alpha (float [0; 1]):控制更新速率,0 表示非常不更新状态,1 表示非常更新
  • gamma (浮点 [0, 1]):观察下一个状态的调节因子,0 表示近视条件,1 表示远视行为
  • nb_iter (int):要通过图形的序列数
  • starting_state (“empty” or “random”) : 如果 “empty”,则算法从空状态开始,如果 “random”,则算法从图中的随机状态开始
       所有参数都可以调整,但对于大多数问题来说,只有少数迭代可以是好的(大约 100 次),而 0.2 左右的 epsilon 值通常就足够了。起始状态对于更有效地浏览图形很有用,但它可能非常依赖于数据集,并且可以测试这两个值。

   最后,我们可以非常简单地使用以下代码初始化选择器:

fsrl_obj = Feature_Selector_RL(feature_number=14, nb_iter=100)

   选择器对象初始化与大多数 ML 库一样,训练算法非常容易:

results = fsrl_obj.fit_predict(X, y)

   下面是输出的示例:

在这里插入图片描述
   选择器的输出(图片由作者提供)

   输出是一个 5 元组,如下所示:

  • DataFrame X 中特征的索引(如映射)
  • 观察到该特征的次数或次数
  • 所有迭代后功能带来的平均奖励
  • 功能从最不重要到最重要的排名(这里 2 是最少的,7 是最重要的功能)
  • 全局可访问的状态数
    此选择器的另一个重要方法是与 Scikit-Learn 的 RFE 选择器进行比较。它以输入 X、y 和选择器的结果为输入。
fsrl_obj.compare_with_benchmark(X, y, results)

   输出是在选择 RFE 和 FSRLearning 的全局指标的每个步骤之后的打印。它还输出模型精度的可视化比较,在 x 轴上是选择的特征数量,在 y 轴上是精度。两条水平线是每种方法的精度中位数。下面是一个示例:
在这里插入图片描述
   RL和RFE方法的比较(图片由作者提供)

Average benchmark accuracy : 0.854251012145749, rl accuracy : 0.8674089068825909 
Median benchmark accuracy : 0.8552631578947368, rl accuracy : 0.868421052631579 
Probability to get a set of variable with a better metric than RFE : 1.0 
Area between the two curves : 0.17105263157894512

   在此示例中,RL 方法始终为模型提供比 RFE 更好的特征集。然后,我们可以在排序的特征集中确定地选择任何子集,这将为模型提供更好的准确性。我们可以多次运行模型和比较器以获得非常准确的估计,但 RL 方法总是更好。

   另一个有趣的方法是get_plot_ratio_exploration。它绘制一个图表,比较已访问节点的数量和按顺序访问的节点的数量,以便进行精确迭代。
在这里插入图片描述
   每次迭代时访问和未访问状态的比较(图片由作者提供)

   此外,由于第二个停止条件,算法的时间复杂度呈指数级降低。那么即使特征的数量很大,也会很快找到收敛点。下面的图是访问一定大小的集合的次数。
在这里插入图片描述
访问状态的数量与其大小的函数关系

   在所有迭代中,该算法访问了包含 6 个或更少变量的状态。除了 6 个变量之外,我们可以看到达到的状态数量正在减少。这是一种很好的行为,因为训练具有小特征集的模型比训练大特征集的模型更快。

四、结论和参考文献

   总的来说,我们可以看到RL方法对于最大化模型的指标非常有效。它总是快速收敛到一个有趣的特征子集。此外,此方法在具有 FSRLearning 库的 ML 项目中非常容易和快速实现。

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

如若内容造成侵权/违法违规/事实不符,请联系我们进行投诉反馈qq邮箱809451989@qq.com,一经查实,立即删除!

相关文章

Qt6.4.2基于CMake添加Qt3DCore模块报错

在文档中说明是添加 find_package(Qt6 REQUIRED COMPONENTS 3dcore) target_link_libraries(mytarget PRIVATE Qt6::3dcore)find_package是没有问题,但是target_link_libraries会报错,报拼写错误,无法链接上Qt6::3dcore 需要使用“3DCore”…

工厂如何最大化mes系统的价值

mes系统(Manufacturing Execution System)是现代工厂管理中的一个重要系统,它可以实现生产过程中的信息约束与控制,促进生产流程的跟踪和分析,提高生产效率及质量。 一、整合mes系统和erp系统 mes系统和erp系统是两个…

STM32 IIC协议

本文代码使用 HAL 库。 文章目录 前言一、什么是IIC协议二、IIC信号三、IIC协议的通讯时序1. 写操作2. 读操作 四、上拉电阻作用总结 前言 从这篇文章开始为大家介绍一些通信协议,包括 UART,SPI,IIC等。 UART串口通讯协议 SPI通信协议 一、…

【深度学习】YOLOv10实战:20行代码将笔记本摄像头改装成目标检测监控

目录 一、引言 二、YOLOv10视觉目标检测—原理概述 2.1 什么是YOLO 2.2 YOLO的网络结构 三、YOLOv10视觉目标检测—训练推理 3.1 YOLOv10安装 3.1.1 克隆项目 3.1.2 创建conda环境 3.1.3 下载并编译依赖 3.2 YOLOv10模型推理 3.2.1 模型下载 3.2.2 WebUI推理 …

微服务架构-微服务架构的挑战与微服务化的具体时机

目录 一、微服务架构的挑战 1.1 概述 1.2 服务拆分 1.3 开发挑战 1.4 测试挑战 1.4.1 开箱即用、一键部署的集成环境 1.4.2 测试场景和测试确定性 1.4.3 微服务相关的非功能测试 1.4.4 自动化测试 1.5 运维挑战 1.5.1 监控 1.5.2 部署 1.5.3 问题追查 1.5.4 依赖管…

chrome调试手机网页

前期准备 1、 PC端安装好chrmoe浏览器 2、 安卓手机安装好chrmoe浏览器 3、 数据线 原文地址:https://lengmo714.top/343880cb.html 手机打开调试模式 进入手机设置,找到开发者模式,然后启用USB调试 打开PC端chrome调试功能 1、点击chr…

视频汇聚平台EasyCVR对接GA/T 1400视图库:结构化数据(人员/人脸、车辆、物品)对象XMLSchema描述

在信息化浪潮席卷全球的背景下,公安信息化建设日益成为提升社会治理能力和维护社会稳定的关键手段。其中,GA/T 1400标准作为公安视频图像信息应用系统的核心规范,以其结构化数据处理与应用能力,为公安信息化建设注入了强大的动力。…

webpack5零基础入门-19HMR的应用

1.定义 HMR即HotModuleReplacement 开发时,当我们修改了其中一个模块的代码webpack默认会将所有模块重新打包编译,速度很慢所以我们需要做到修改摸个模块代码,只对这个模块的代码重新打包编译,其他模块不变,这样打包…

【excel】设置二级联动菜单

文章目录 【需求】在一级菜单选定后,二级菜单联动显示一级菜单下的可选项【步骤】step1 制作辅助列1.列转行2.在辅助列中匹配班级成员 之前做完了 【excel】设置可变下拉菜单(一级联动下拉菜单),开始做二级联动菜单。 【需求】在…

算法(六)计数排序

文章目录 计数排序技术排序简介算法实现 计数排序 技术排序简介 计数排序是利用数组下标来确定元素的正确位置的。 假定数组有10个整数,取值范围是0~10,可以根据这有限的范围,建立一个长度为11的数组。数组下标从0到10,元素初始…

【C++】哈希(2万字)

提示:文章写完后,目录可以自动生成,如何生成可参考右边的帮助文档 目录 前言 unordered系列关联式容器 unordered_map unordered_map的文档介绍 unordered_map的接口说明 unordered_set 底层结构 哈希概念 哈希冲突 哈希函数 哈希…

【康耐视国产案例】Nvidia/算能+智能AI相机:用AI驱动 | 降低电动车成本的未来之路

受环保观念影响、政府激励措施推动与新能源技术的发展,消费者对电动汽车(EV)的需求正在不断增长,电动汽车已经成为了未来出行方式的重要组成部分。然而,电动汽车大规模取代燃油汽车的道路还很漫长。最大的障碍就是电动汽车的售价相对过高。尽…

新设立湖北投资管理公司流程和要求

在湖北投资管理企业进行注册时,需要准备一系列的材料并按照一定的流程进行办理。本文将从注册材料及注册流程两方面来介绍,帮助您了解注册投资管理企业的步骤和所需的具体材料。详情致电咨询我或者来公司面谈。 新注册材料要求: 企业名称申请书:要求提供…

vue路由跳转之【编程式导航与传参】

vue路由有两种跳转方式 ----> 编程式与声明式,本文重点讲解vue路由的【编程式导航 】【编程式导航传参 ( 查询参数传参 & 动态路由传参 ) 】等内容,并结合具体案例让小伙伴们深入理解 ,彻底掌握!创作不易,需要的…

汇编:调用C函数

在32位汇编程序中可以调用C函数;这种做法在很多情况下是有用的,尤其是在汇编程序需要与C代码进行交互或利用C语言的库函数时。下面是一些情况下使用汇编调用C函数的常见情景: ①优化性能:某些特定的任务可能用汇编语言编写更有效率…

[Linux]重定向

一、struct file内核对象 struct file是在内核中创建,专门用来管理被打开文件的结构体。struct file中包含了打开文件的所有属性,文件的操作方法集以及文件缓冲区(无论读写,我们都需要先将数据加载到文件缓冲区中。)等…

POP —— Nodes DOP

POP Advect by Volumes —— 使用速度场驱动粒子 此节点被设计为更容易通过流体来驱动粒子,通常流体被单独模拟并从磁盘上读取速度场;此操作将修改force、vel、P属性; Update Force,调整粒子的加速度,类似POP Force&a…

RAID技术迭代、原理对比、产品梳理(HCIA)

目录 一、RAID技术迭代 传统RAID LUN虚拟化2.0 工作原理: 块虚拟化2.0 为什么有RAID2.0? RAID2.0实现原理: RAID-TPRAID 7 华为RAID-TP技术 RAID的4种工作状态 RAID算法 普通RAID算法 华为动态RAID算法 保险箱盘(存掉…

el-table中的信息数据过长 :show-overflow-tooltip=‘true‘**

可以在 el-table-column中添加 :show-overflow-tooltip‘true’

数字孪生仿真渲染引擎EasyTwin全新升级,焕新、多元、优质、高效一步到位!

EasyTwin作为数字孪生仿真渲染引擎,自2023年进入公测以来,致力于实现低成本零代码操作。在今年年初,我们重新回归业务场景,将产品定位从“融合渲染”转变为“仿真渲染”,面向数字孪生仿真渲染领域推出全新版本&#xf…