机器学习——第十一章 特征选择与稀疏学习

news2024/12/28 4:50:21

11.1 子集搜索与评价

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

为什么要进行特征选择:

  • 减轻维数灾难问题(与降维的原因相同)
  • 去除不相关特征往往会降低学习任务的难度

        我们不能直接用排列组合进行遍历所有可能子集,这样会遭遇组合爆炸。所以我们选择产生一个“候选子集”,评价它的好坏,然后根据评价结果产生下一个候选特征子集,再进行评价,持续进行直到无法找到一个更好的子集为止。 

如何根据评价结果获取下一个候选特征子集?

  • 前向搜索:初始将每个特征当做一个候选特征子集,然后从当前所有的候选子集中选择出最佳的特征子集;接着在上一轮选出的特征子集中添加一个新的特征,同样地选出最佳特征子集;最后直至选不出比上一轮更好的特征子集。
  • 后向搜索:从完整的特征集合开始,每次尝试去掉一个无关特征。
  • 双向搜索:前向后向结合,每一轮逐渐增加选定相关特征,同时减少无关特征(前面增加的特征不会被去除)。
  • 优点:思路简单,速度快,不用全部情况都遍历一遍。
  • 缺点:使用贪心算法,不从总体上考虑其它可能情况,每次选取局部最优解,不再进行回溯处理,结果不一定是最好的。

如何评价候选特征子集的好坏?

\(\mathrm{Gain}(A)=\mathrm{Ent}(D)-\sum_{v=1}^{V}\frac{|D^v|}{|D|}\mathrm{Ent}(D^v)\)

        信息熵定义为:

\(\mathrm{Ent}(D)=-\sum_{i=1}^{|\mathcal{Y}|}p_k\log_2p_k\)

        信息增益Gain(A)越大,特征子集A包含的有助于分类的信息越多。对每个候选特征子集,可基于训练数据集D来计算其信息增益,以此作为评价准则。信息熵也是同理,只要能判断两个划分差异的机制都能用于特征子集评价。

        将特征子集搜索机制和子集评价机制相结合,即可得到特征选择方法。 

11.2 过滤式选择(Relief) 

        过滤式方法是一种将特征选择与学习器训练相分离的特征选择技术,即首先将相关特征挑选出来,再使用选择出的数据子集来训练学习器。Relief是其中著名的代表性算法,它使用一个“相关统计量”来度量特征的重要性,该统计量是一个向量,其中每个分量代表着相应特征的重要性,因此我们最终可以根据这个统计量各个分量的大小来选择出合适的特征子集。 

        Relief算法的关键是如何确定相关统计量。对于数据集中的每个样例xi,Relief首先找出与xi同类别的最近邻与不同类别的最近邻,分别称为猜中近邻(near-hit)猜错近邻(near-miss),接着便可以分别计算出相关统计量中的每个分量。对于j分量:

\(\delta^j=\sum_i-\mathrm{diff}(x_i^j,x_{i,\mathrm{nh}}^j)^2+\mathrm{diff}(x_i^j,x_{i,\mathrm{nm}}^j)^2\)

        直观上理解:对于猜中近邻,两者j属性的距离越小越好,对于猜错近邻,j属性距离越大越好。更一般地,若xi为离散属性,diff取海明距离,即相同取0,不同取1;若xi为连续属性,则diff为曼哈顿距离,即取差的绝对值。分别计算每个分量,最终取平均便得到了整个相关统计量。

        标准的Relief算法只用于二分类问题,后续产生的拓展变体Relief-F则解决了多分类问题。对于j分量,新的计算公式如下: 

\(\delta^{j}=\sum_{i}-\mathrm{diff}(x_{i}^{j},x_{i,\mathrm{nh}}^{j})^{2}+\sum_{l\neq k}\left(p_{l}\times\mathrm{diff}(x_{i}^{j},x_{i,l,\mathrm{nm}}^{j})^{2}\right)\)

        其中\(p_l\)表示第\(l\)类样本在数据集中所占的比例,易知两者的不同之处在于:标准Relief 只有一个猜错近邻,而Relief-F有多个猜错近邻。 

11.3 包裹式选择(LVW) 

        与过滤式选择不同的是,包裹式选择将后续的学习器也考虑进来作为特征选择的评价准则。因此包裹式选择可以看作是为某种学习器量身定做的特征选择方法,由于在每一轮迭代中,包裹式选择都需要训练学习器,因此在获得较好性能的同时也产生了较大的开销。

        拉斯维加斯方法和蒙特卡罗方法是两个以著名赌城名字命名的随机化方法.两者的主要区别是:若有时间限制,则拉斯维加斯方法或者给出满足要求的解,或者不给出解,而蒙特卡罗方法一定会给出解,虽然给出的解未必满足要求;若无时间限制,则两者都能给出满足要求的解。

        LVW(Las Vegas Wrapper),它在拉斯维加斯框架下使用随机策略来进行特征子集的搜索,并以最终分类器的误差为特征子集评价准则。

  1. 初始化:
    1. \(E\):算法误差,初始化为无穷大
    2. \(d\):特征子集的特征(属性)个数,初始化为特征集的特征个数
    3. \(A^*\):特征子集,初始化为特征集
    4. \(t\):连续没有优化效果的特征子集数,初始化为0
  2. 循环部分:
    1. 随机产生一个特征子集\(A'\),用\(A'\)的特征个数更新\(d\)
    2. 使用交叉验证法计算学习器\(\mathfrak{L}\)在\(A'\)下的误差
    3. \(\left.\left\{\begin{array}{l}\text{更新}t,E,d,A^*;\text{ 较目前最好的算法误差}E\text{小或者精度无提升但特征数变少}\\t=t+1, else\end{array}\right.\right.\)
  3. 重复循环部分,直到满足停止条件控制参数,输出当前最好的特征子集\(A^*\)

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

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

相关文章

【Pyspark-驯化】一文搞懂Pyspark中表连接的使用技巧

【Pyspark-驯化】一文搞懂Pyspark中表连接的使用技巧 本次修炼方法请往下查看 🌈 欢迎莅临我的个人主页 👈这里是我工作、学习、实践 IT领域、真诚分享 踩坑集合,智慧小天地! 🎇 相关内容文档获取 微信公众号 &…

ios创建控制器的3种方法实现页面跳转

ios遵守mvc设计模式,下面介绍创建控制器viewcontroller的几种方法,来实现页面的跳转 1.纯代码创建 // // AppDelegate.m // study2024 // // Created by zhifei zhu on 2024/8/7. //#import "AppDelegate.h" #import "MyViewContro…

代理模式-

代理模式通常找到代理方来管理用户的权限访问。如下图&#xff1a; #include<string> #include<iostream> using namespace std; class Video { public:virtual void Free() 0;virtual void VIP() 0;virtual void Ticket() 0; }; class FixbugVideo:public V…

机械学习—零基础学习日志(项目实践01)

llM项目分类与原理解析 Prompt项目 直接产出一些具体的文本与信息&#xff0c;使用markdown的格式。 对prompt进行较好的格式输出&#xff0c;固定格式。 ChatPaper 快速获取论文内容&#xff0c;然后了解对应的信息&#xff0c;判断是否有必要阅读这一篇论文 ChatBI&…

Adobe Dimension DN v4.0.2 解锁版下载及安装教程 (三维3D建模工具)

前言 Adobe Dimension&#xff08;简称DN&#xff09;是一款3D设计软件&#xff0c;三维合成和渲染工具&#xff0c;2D平面的二维转为3D立体的三维合成工具&#xff0c;用于3Dmax\C4D\MAYA等三维软件生成的效果图&#xff0c;在3D场景中排列对象、图形和光照。3D应用程序使用的…

python循环语句之while循环和for循环

文章目录 1. while 循环1.1 介绍1.1.1 生活中的循环1.1.2 程序中的循环 1.2 总结 2. while循环应用&#xff1a;1~100求和2.1 需求2.2 分析 3. while嵌套循环以及运用3.1 while嵌套循环语句的语法格式3.2 while嵌套循环使用3.2.1 要求3.2.2 参考代码 4. for循环4.1 for循环基本…

2024自动驾驶(多模态)大模型综述:从DriveGPT4、DriveMLM到DriveLM、DriveVLM

前言 由于今年以来&#xff0c;一直在不断深挖具身智能机器人相关&#xff0c;而自动驾驶其实和机器人有着无比密切的联系&#xff0c;甚至可以认为&#xff0c;汽车就是一个带着4个轮子的机器人 加之个人认为&#xff0c;目前大模型落地潜力最大的两个方向&#xff0c;一个是…

【BES2500x系列 -- RTX5操作系统】系统执行流程 -- 应用初始化 -- app_init() --(十二)

&#x1f48c; 所属专栏&#xff1a;【BES2500x系列】 &#x1f600; 作  者&#xff1a;我是夜阑的狗&#x1f436; &#x1f680; 个人简介&#xff1a;一个正在努力学技术的CV工程师&#xff0c;专注基础和实战分享 &#xff0c;欢迎咨询&#xff01; &#x1f49…

Linux:多线程(三.POSIX信号量、生产消费模型、线程池、其他常见的锁)

上次讲解了&#xff1a;Linux&#xff1a;多线程&#xff08;二.理解pthread_t、线程互斥与同步、基于阻塞队列的生产消费模型&#xff09; 文章目录 1.POSIX信号量1.1引入1.2回顾加深理解信号量1.3信号量的操作接口 2.基于循环队列的生产消费模型2.1循环队列2.2整个项目 3.线程…

fastadmin自定义弹框,以及回调函数等问题,

效果图 1&#xff0c; 代码 弹框中使用弹框 弹框1代码主要代码 <div class"form-group ccol-xs-12 col-sm-2" style"text-align: right"><a href"#" data-url"{:url(user/add)}" class"btn btn-info" id"a…

Android逆向题解-boomshakalaka-3-难度5

这个app 是一个cocos游戏&#xff0c;没有用脚本实现&#xff0c;纯c实现。 题目描述:play the game, get the highest score 题目要求是玩游戏得到最高分就可以得到flag&#xff0c;是写到配置文件的&#xff0c;初始flag值看着是base编码的。 核心代码在so里面的ControlLay…

GPT-4o:开启多模态AI识别新纪元

GPT-4o功能简介 在人工智能的演变历程中&#xff0c;图像识别技术始终占据着核心地位。技术的发展日新月异&#xff0c;使得AI不仅能够识别图像内容&#xff0c;还能将其转化为文字描述。特别值得一提的是&#xff0c;OpenAI在春季发布的GPT-4o模型&#xff0c;将图像识别技术…

Spring项目:文字花园(一)

前言 实现登录注册功能。 ⽤⼾登录成功后, 可以查看所有⼈的博客. 点击 <<查看全⽂>> 可以查看该博客的正⽂内容. 如果该博客 作者为当前登录⽤⼾, 可以完成博客的修改和删除操作, 以及发表新博客 一.准备工作 1.1注入sql &#xff08;数据准备&#xff09; -- 建…

解决No module named ‘tensorflow‘

import tensorflow as tf ModuleNotFoundError: No module named tensorflow 安装合适的tensorflow版本 先查看自己的python版本 或者输入指令&#xff1b;python --version 安装兼容的tensorflow版本&#xff0c;安装指定版本的tensorflow pip install tensorflow-gpu2.3.0…

MVDream 论文学习

论文链接&#xff1a;https://arxiv.org/abs/2308.16512 代码链接&#xff1a;https://github.com/bytedance/MVDream 解决了什么问题&#xff1f; 3D 内容生成是现代游戏和媒体产业中的关键环节&#xff0c;然而这是一个劳动密集型的任务&#xff0c;创建一个 3D 资产就需要…

后端Web之HTTP协议基础介绍

目录 1.HTTP概念 2.HTTP请求协议 3.HTTP响应协议 4.HTTP协议解析 1.HTTP概念 HTTP&#xff08;HyperText Transfer Protocol&#xff0c;超文本传输协议&#xff09;是一种用于分布式、协作式和超媒体信息系统的应用层协议。它是万维网数据通信的基础&#xff0c;允许将超…

JVM由那些部分组成,运行流程是什么?

Java 虚拟机 (JVM) 是 Java 运行环境的核心部分&#xff0c;它负责执行 Java 字节码。JVM 由多个不同的组件组成&#xff0c;每个组件都负责不同的任务。下面我将详细介绍 JVM 的主要组成部分及其运行流程。 JVM 的组成部分 类加载器 (Class Loader)&#xff1a; 类加载器负责读…

数据结构 位运算

基础位运算 按位与&#xff08;AND&#xff09; 操作符&#xff1a;&两个位同时位1时&#xff0c;结果位1&#xff0c;否则为0 按位或&#xff08;OR&#xff09; 操作符&#xff1a;|主要有一位是1&#xff0c;那么结果就是1&#xff0c;只有两位都是0的时候&#xff0c;结…

C++ 115类和对象_this指针的用途

学习内容 类和对象_this指针的用途 1.解决名称冲突 2.返回对象本身用 *this 运行结果 代码 #include<iostream> using namespace std;//cout 在这里&#xff0c;没有它会报错//1.解决名称冲突//2.返回对象本身用 *thisclass Person { public:Person(int age){//形参名称…

【深度学习实践】基于深度学习的图像去雾算法-ChaIR-实践

本文介绍一个去雾算法ChaIR的使用方法&#xff0c;可以完成图像去雾&#xff0c;也可以用于图像去雨、去噪音等任务。本文不涉及论文原理&#xff0c;只包含源代码的跑通和使用。 先展示一下效果&#xff1a; 原图去雾 论文&#xff1a;Exploring the potential of channel …