八、西瓜书——特征选择与稀疏学习

1.子集搜索与评价

        对于1个学习任务来说,给定属性集,其中有些属性可能很关键、很有用,另一些属性则可能没什么用,我们将属性称为“特征”(feature),对当前学习任务有用的属性称为“相关特征”(relevant feature)、没什么用的属性称为“无关特征”(irrelevant feature).从给定的特征集合中选择出相关特征子集的过程称为“特征选择”(feature selection).

进行特征选择的原因:

        有两个很重要的原因:

  • 首先,我们在现实任务中经常会遇到维数灾难问题,这是由于属性过多而造成的,若能从中选择出重要的特征,使得后续学习过程仅需在一部分特征上构建模型,则维数灾难问题会大为减轻.
  • 第二个原因是,去除不相关特征往往会降低学习任务的难度。

特征选择有两个环节,第一个环节是子集搜索,第二个环节是子集评价。 

        子集搜索是一种在特征选择中常用的策略,主要目的是从初始的特征集合中选取一个包含了所有重要信息的特征子集。这种策略的背景在于,当面对大量的特征时,如果直接对所有可能的特征子集进行遍历,可能会遭遇组合爆炸的问题,即需要评估的特征子集数量过于庞大,导致计算成本过高。

        为了解决这个问题,子集搜索采用了一种贪心的策略。这种策略并不追求全局最优解,而是在每一步选择中都采取当前状态下最好或最优(即最有利)的选择,从而希望导致结果是全局最好或最优的算法。在特征选择中,这种贪心策略表现为每次从候选特征子集中选择出最优的一个或多个特征加入已选特征子集,或者从已选特征子集中删除最不重要的一个或多个特征。

        子集搜索的具体实现方式有很多种,其中比较典型的有前向搜索和后向搜索。

  • 前向搜索是从空集开始,逐渐添加特征到特征子集中,直到达到某个停止条件。
  • 后向搜索则是从全集开始,逐渐删除特征,直到达到某个停止条件。

        这两种搜索方式都可以根据评价函数的结果来调整特征子集的选择。 

        总的来说,子集搜索是一种有效的特征选择策略,它可以在降低计算成本的同时,尽可能地保留重要的特征信息。但是需要注意的是,由于贪心策略的存在,子集搜索可能会陷入局部最优解,而无法得到全局最优解。因此,在使用子集搜索时,需要根据具体的问题和数据情况来选择合适的搜索方式和评价函数。

        子集评价可采用决策树的信息增益评价方法,即:

 

        将特征子集搜索机制与子集评价机制相结合,即可得到特征选择方法.例如将前向搜索与信息熵相结合,这显然与决策树算法非常相似.事实上,决策树可用于特征选择,树结点的划分属性所组成的集合就是选择出的特征子集.其他的特征选择方法未必像决策树特征选择这么明显,但它们在本质上都是显式或隐式地结合了某种(或多种)子集搜索机制和子集评价机制.
        常见的特征选择方法大致可分为三类: 过滤式(flter)、包式(wrapper)和嵌入式(embedding) 

2.过滤式选择

        过滤式方法先对数据集进行特征选择,然后再训练学习器,特征选择过程与后续学习器无关.这相当于先用特征选择过程对初始特征进行“过滤”,再用过滤后的特征来训练模型.

        Relief是一种著名的过滤式特征选择方法,Relief算法设计了一个“相关统计量”来度量特征的重要性。这个统计量实际上是一个向量,它的每个分量都对应着一个特征,而该分量的值就代表着对应特征的重要性。对于数据集中的每个样例,Relief会首先找到与它同类别的最近邻样本(称为“猜中近邻”)和与它不同类别的最近邻样本(称为“猜错近邻”)。然后,基于这些近邻样本的信息,Relief会计算出每个特征的相关统计量分量。具体来说,对于某个特征,如果它与猜中近邻在该特征上的距离较小,而与猜错近邻在该特征上的距离较大,那么这个特征就被认为是重要的。

 

        在实际应用中,可以根据相关统计量分量的大小来选择特征。例如,可以设定一个阈值,只选择那些相关统计量分量大于该阈值的特征;或者指定想要选择的特征个数k,然后选择相关统计量分量最大的k个特征。

        Relief算法不仅适用于二分类问题,还可以通过扩展来处理多分类问题和回归问题。例如,针对多分类问题,可以为每个类别都找到对应的猜错近邻,并据此计算相关统计量;针对回归问题,可以考虑将目标属性视为连续值来处理。

 

3.包裹式选择 

        与过滤式特征选择不考虑后续学习器不同,包裹式特征选择直接把最终将要使用的学习器的性能作为特征子集的评价准则. 换言之包裹式特征选择的目的,就是为给定学习器选择最有利于其性能、“量身定做”的特征子集。

        一般而言,由于包裹式特征选择方法直接针对给定学习器进行优化。因此从最终学习器性能来看,包裹式特征选择比过滤式特征选择更好,但另一方面,由于在特征选择过程中需多次训练学习器,因此包裹式特征选择的计算开销通常比过滤式特征选择大得多.
        LVW(Las Vegas Wrapper)[Liu and Setiono,1996] 是一个典型的包裹式特征选择方法,它在拉斯维加斯方法(Las Vegas method)框架下使用随机策略来进行子集搜索,并以最终分类器的误差为特征子集评价准则。

4.嵌入式选择与L1正则化

        嵌入式特征选择是一种将特征选择过程与学习器训练过程融为一体的方法,两者在同一个优化过程中完成,即在学习器训练过程中自动地进行了特征选择。这种方法有助于在学习过程中直接确定哪些特征对于模型的预测性能最为重要。

        L1正则化是一种在损失函数中引入的范数,用于降低过拟合的风险。与L2范数相比,L1范数更易于获得“稀疏”解,即它求得的权重向量会有更少的非零分量。这种稀疏性意味着初始特征中仅有对应着非零权重的特征才会出现在最终模型中。因此,L1正则化可以被视为一种嵌入式特征选择方法,它在学习过程中自动地进行了特征选择。

        正如上图所示,L2正则化的超平面可以看做一个圆形,而L1可以看做一个菱形,L1正则化的最优解往往在坐标轴上取得,即分量为0。

5.稀疏表示与字典学习

        当样本具有这样的稀疏表达形式时,对学习任务来说会有不少好处,例如线性支持向量机之所以能在文本数据上有很好的性能,恰是由于文本数据在使用上述的字频表示后具有高度的稀疏性,使大多数问题变得线性可分.同时,稀疏样本并不会造成存储上的巨大负担,因为稀疏矩阵已有很多高效的存储方法。

        字典学习在稀疏表示中扮演着关键角色,其目标是从原始数据中构建一个过完备的字典(比原始数据空间更高维度),使得该字典能够稀疏地表示这些原始数据。这个字典是由一系列基本信号或原子组成的,这些原子可以视为数据空间中的基向量。原始信号则可以通过这些原子的线性组合来近似表示。

        字典学习的过程实际上是一个优化问题,其核心思想是通过迭代优化算法不断更新字典和相应的稀疏表示,以达到最小化重构误差和满足稀疏性约束的目的。在这个过程中,重构误差反映了用字典中的原子线性组合来表示原始信号时的准确度,而稀疏性约束则要求这种表示尽可能简洁,即只有少量的原子被用于表示每个原始信号。

6.压缩感知

        压缩感知在机器学习的理论中,可以被视为一种将经典机器学习理论与数据压缩技术结合的新兴方法,旨在提高机器学习的性能。这种方法主要利用信号在某个变换域上的稀疏性,通过选择合适的变换基进行信号的变换,使信号在该变换域上的表示变得稀疏。然后,通过较低的采样率对信号进行采样,获取较少的采样数据。最后,利用这些采样数据和信号在变换域上的稀疏表示,通过优化算法恢复原始信号。        

        

                

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

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

相关文章

Vue:双token无感刷新

文章目录 初次授权与发放Token:Access Token的作用:Refresh Token的作用:无感刷新:安全机制:后端创建nest项目AppController 添加login、refresh、getinfo接口创建user.dto.tsAppController添加模拟数据 前端Hbuilder创…

Pytest中实现自动生成测试用例脚本代码!

前言 在Python的测试框架中,我们通常会针对某个系统进行测试用例的维护,在对庞大系统进行用例维护时,往往会发现很多测试用例是差不多的,甚至大多数代码是一样的。 故为了提高我们测试用例维护的效率,在本文中&#…

Redis缓存知识总结

图解缓存 what&how problems&strategy 缓存更新 缓存穿透 缓存雪崩 缓存击穿 (图源自黑马教育)

3.5日常学习

matlab处理数据 自己写了关于detect_data的函数,让它帮我改了,哈哈哈 %改正前function data_chuli(path1,savepath)[num]xlsread(path1,1,B18:F23);a num;ba;cb(:);xlswrite(savepath,c) end%改正后function data_chuli(path1, savepath)num xlsread…

100 spring-security 中 /oauth/token 发送请求不携带参数 报错 “401 Unauthorized“

前言 最近存在这样的一个问题, 大致的复现方式是 访问 /oauth/token 接口, 然后不携带任何参数, 结果 服务器抛出了一个 "401 Unauthorized" 针对这个 401, 这里 梳理一下这个流程, 也会衍生出一些其他的问题 测试用例 客户端这边大致的情况是 构造参数, 然后发…

HashMap 源码解读

文章目录 一、什么是HashMap HashMap 是一种快速的查找并且插入、删除性能都良好的一种 K/V键值对的数据结构,key唯一,value允许重复它基于哈希表的 Map 接口实现,是常用的 Java 集合之一,是非线程安全的。 二、HashMap的数据结…

rtt的io设备框架面向对象学习-触摸设备

目录 1.触摸设备基类2.触摸设备基类的子类3.初始化/构造流程3.1设备驱动层3.2 设备驱动框架层3.3 io设备管理层 4.总结5.使用5.1实例 1.触摸设备基类 此层处于设备驱动框架层。此层的类是抽象类。 在/ components / drivers / include / drivers /touch.h定义了如下touch设备…

C语言----冒泡排序进阶

冒泡排序大家应该到写过吧。但大家可能知道到的冒泡排序有两种方法。而我呢,最近学习到了另外一种方法,现在知道三种方法了。所以想与大家分享一下。但是缺点是第三种是第二种的自实现版。第一种就是我们平常写的普通冒泡排序。第二种就是qsort。第三种就…

Matlab梁单元有限元编程 | 铁木辛柯梁 | 欧拉梁 | Matlab源码 | 理论文本

专栏导读 作者简介:工学博士,高级工程师,专注于工业软件算法研究本文已收录于专栏:《有限元编程从入门到精通》本专栏旨在提供 1.以案例的形式讲解各类有限元问题的程序实现,并提供所有案例完整源码;2.单元…

如何恢复edge的自动翻译功能

介绍:对于英文不好的小伙伴,把英语翻译成中文是有帮助的,而edge可以直接对英文页面翻译这一功能更是受人喜爱,但是,最近发现这一项功能消失了。 原始界面: 下面展示如何恢复该功能。 1.打开edge&#xff…

day06-网路编程

#include <myhead.h>int do_add(sqlite3 *ppDb) {int numb;char name[20];int age;int salary;printf("请输入要插入的信息:");scanf("%d %s %d %d", &numb, name, &age, &salary);char sql[128] "";sprintf(sql, "INSE…

Flutter(四):SingleChildScrollView、GridView

SingleChildScrollView、GridView 遇到的问题 以下代码会报错: class GridViewPage extends StatefulWidget {const GridViewPage({super.key});overrideState<GridViewPage> createState() > _GridViewPage(); }class _GridViewPage extends State<GridViewPage&g…

vscode 通义灵码 插件自动写代码

安装插件 通义灵码安装教程-阿里云 点击立即安装 我是已经安装成功了&#xff0c;所以如下图&#xff0c;没安装的会显示安装&#xff0c;点击安装即可 安装成功之后 侧边栏会出现图标 登录 使用 在编辑框中输入 问题 &#xff0c;会自动生成代码和对应的说明

Cloud+Consul

Cloud整合Zookeeper代替Eureka-CSDN博客 Consul简介 Consul是一套开源的分布式服务发现和配置管理系统 What is Consul? | Consul | HashiCorp DeveloperConsul is a service networking solution that delivers service discovery, service mesh, and network security ca…

Redis中的RDB和AOF持久化机制(一)

Redis持久化 RDB快照(snapshot). 在默认情况下&#xff0c;Redis将内存数据库快照保存在名字为dump.rdb的二进制文件中.Redis可以进行设置,让它在"N秒内数据集至少有M个改动"这一条件被满足时&#xff0c;自动保存一次数据集。比如说&#xff0c;以下设置会让Redis…

机器视觉 /从bottle.hdev示例程序开启HalconHDevelop征程

文章目录 概述示例程序bottle.hdev源码Step 0: PreparationsStep 1: Segmentation - 读取并显示图片Step 1: Segmentation - 创建并设置OCR模型Step 1: Segmentation - 文本分割与识别计算结果显示内存释放 导出为C代码导出为C代码配置 VS Halcon 环境VS程序执行结果HTuple hv…

LeetCode刷题---填充每个节点的下一个右侧节点指针

官方题解:LeetCode官方题解 解题思想: 因为是一棵满二叉树&#xff0c;所以除了叶子节点外的其他节点都有两个子节点。 可以根据每一层来依次遍历 从根节点开始&#xff0c;根节点的左子节点的next节点就指向根节点的右子节点 因为根节点的next节点为NULL&#xff0c;开始从根…

DR模式下LVS负载均衡聚集部署实验

目录 1、实验准备 2、配置负载调度器&#xff08;ens33&#xff1a;192.168.80.9 VIP:192.168.80.188&#xff09; 2.1 配置虚拟ip地址&#xff08;VIP&#xff1a;192.168.80.188&#xff09; 2.2 调整proc响应参数 2.3 设置负载分配策略 3、部署共享存储&#xff08;NF…

static详解

前言 大家好我是jiantaoyab&#xff0c;这篇文章来谈一谈c中的static&#xff0c;根据对static的使用&#xff0c;我分为类内和类外2种情况 static简介 static是c常用的修饰符&#xff0c;它用来控制变量的存储方式和可见性&#xff0c;在变量前面加上一个static&#xff0c…

ECMAScript 语法

ECMAScript 语法 一、ECMAScript1.ECMAScript简介2.ECMAScript历史 二、ECMAScript 语法区分大小写变量是弱类型的每行结尾的分号可有可无注释与 Java、C 和 PHP 语言的注释相同括号表示代码块 一、ECMAScript ECMAScript是一种由Ecma国际&#xff08;前身为欧洲计算机制造商协…