机器学习西瓜书笔记(十一) 第十一章特征选择与稀疏学习+代码

news2024/9/27 12:10:10

第十一章

  • 特征选择与稀疏学习
    • 11.1 子集搜索与评价
      • 小结
    • 11.2 过滤式选择
      • 小结
    • 11.3 包裹式选择
      • 小结
    • 11.4 嵌入式选择与L1正则化
      • 小结
    • 11.5 稀疏表示与字典学习
      • 小结
    • 11.6 压缩感知
      • 小结
    • 11.7 代码
      • 单变量特征选择
    • 11.8 章末小结

特征选择与稀疏学习

11.1 子集搜索与评价

在这里插入图片描述

小结

子集搜索与评价是一种特征选择技术,它系统地搜索所有可能的特征子集,以找到对模型性能最有益的特征组合。这个过程涉及到评估每个子集对模型预测能力的影响,通常通过交叉验证或留一验证等方法来完成。子集搜索的目标是识别出一组特征,这组特征在减少数据复杂性的同时,能够最大程度地保留模型的预测能力,从而提高模型的泛化能力和解释性。评价标准可能包括模型的准确率、召回率、精确度或其他与问题相关的性能指标。常用的子集搜索策略包括穷举搜索、启发式搜索和随机搜索等。

11.2 过滤式选择

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

Relief(Relevant Features)是一种著名的过滤式特征选择方法,该方法设计了一个"相关统计量"来度量特征的重要性。该统计量是一个向量,其每个分量分别对应于一个初始特征,而特征子集的重要性则是由子集中每个特征所对应的相关统计量分量之和来决定。于是,最终只需指定一个阙值T,然后选择比T大的相关统计量分量所对应的特征即可;也可指定欲选取的特征个数k,然后选择相关统计量分量最大的K个特征。
在这里插入图片描述

小结

过滤式特征选择是一种在模型训练前评估特征与目标变量统计关系的方法,通过衡量特征的方差、相关性、互信息等来确定其重要性,旨在提高模型泛化能力、降低过拟合风险,并减少计算成本,适用于高维数据集且具有较高的计算效率和易解释性。常见的方法包括方差选择法、卡方检验、皮尔逊相关系数、互信息和信息增益等,它们各自适用于不同的数据类型和场景,可以有效地筛选出对模型预测最有贡献的特征。

11.3 包裹式选择

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

一般而言,由于包裹式特征选择方法直接针对给定学习器进行优化,因此从最终学习器性能来看,包裹式特征选择比过滤式特征选择更好,但另一方面,由于在特征选择过程中需多次训练学习器,因此包裹式特征选择的计算开销通常比过滤式特征选择大得多。

LVW是个典型的包裹式特征选择方法。它在拉斯维加斯方法框架下使用随机策略来进行子集搜索,并以最终分类器的误差为特征子集评价准则.算法描述如图所示:在这里插入图片描述

小结

包裹式特征选择是一种在机器学习中广泛使用的特征选择方法,它通过将特征选择过程与模型训练过程相结合,直接利用模型的性能来评估特征子集的好坏。这种方法的核心优势在于它能够针对特定的学习器进行优化,从而选择出最有利于学习器性能的特征子集。与过滤式特征选择相比,包裹式特征选择更贴近实际应用场景,能够更准确地反映特征子集在实际任务中的性能。

包裹式特征选择的过程通常包括以下几个步骤:

  1. 选择一个合适的机器学习模型作为评价器。
  2. 生成不同的特征子集,这可以通过递归特征消除(RFE)、特征子集搜索算法或随机生成特征子集等方式实现。
  3. 对每个特征子集进行模型训练,并使用交叉验证或留出法等技术来评估模型的性能。
  4. 根据模型的性能评估特征子集的优劣,并选择最佳的特征子集。
  5. 最后,使用选择的最佳特征子集对模型进行验证,确保在真实数据上获得良好的性能。

尽管包裹式特征选择能够提供更准确的性能评估并考虑特征之间的关系,但它也存在一些缺点,如计算成本高、过拟合风险以及对模型选择的敏感性。因此,在实际应用中,需要根据问题的特点和计算资源的可用性来权衡使用包裹式特征选择的利弊。

常用的包裹式特征选择方法包括递归特征消除(RFE)、递归特征添加(SFS)、基于遗传算法的特征选择、基于模型的特征选择以及多种子集搜索算法。这些方法各有优缺点,需要根据具体问题的特点和数据集的特征来选择合适的方法。同时,还可以结合交叉验证等技术来评估特征选择的效果,以确保选择到的特征子集在未知数据上具有良好的泛化能力。

11.4 嵌入式选择与L1正则化

在这里插入图片描述

在这里插入图片描述

在这里插入图片描述

小结

嵌入式特征选择(Embedded Feature Selection)是机器学习中的一种特征选择方法,它将特征选择过程嵌入到模型训练过程中。这种方法的核心思想是利用模型本身的参数或属性来评估特征的重要性,从而选择对模型贡献最大的特征子集。嵌入式特征选择通常与特定的学习算法结合使用,例如L1正则化。

L1正则化,也称为Lasso正则化,是一种在损失函数中加入权重的L1范数(即权重的绝对值之和)作为惩罚项的方法。L1正则化的一个显著特点是它倾向于产生稀疏权重矩阵,即模型中的一些权重参数会被压缩到零。这种稀疏性使得L1正则化成为一种非常有效的特征选择工具,因为它可以自动地将不重要的特征的权重置为零,从而实现特征的自动选择。

嵌入式特征选择的优点在于它能够提供与特定学习器紧密相关的特征选择,通常能够获得更好的性能。然而,这种方法的缺点是计算成本较高,因为它需要多次训练模型来评估不同特征子集的效果。

在实际应用中,嵌入式特征选择可以与其他特征选择方法结合使用,以提高特征选择的准确性和效率。例如,可以先使用过滤式方法去除一些明显不重要的特征,然后使用嵌入式方法进一步精细化特征选择。此外,还可以通过交叉验证等技术来评估所选特征子集的性能,以确保选出的特征子集在未知数据上具有良好的泛化能力。

11.5 稀疏表示与字典学习

在这里插入图片描述

在这里插入图片描述

小结

稀疏表示和字典学习是信号处理和机器学习领域的重要技术。稀疏表示通过使用少量的非零元素来表示信号或数据,能够降低数据的维度并提取关键特征。这种方法在图像处理、语音识别和自然语言处理等领域有广泛应用,如图像压缩、图像分类和语音合成等。字典学习则是从数据中学习得到一个字典,这个字典能够将数据表示为稀疏向量,从而实现数据的有效压缩和特征提取。

字典学习的过程通常包括两个阶段:字典构建和利用字典进行稀疏编码。在字典构建阶段,算法会尝试找到一个最优的字典,使得输入数据可以用该字典中的原子进行稀疏表示。在稀疏编码阶段,算法会根据已学习的字典,求解输入数据的稀疏表示系数。这个过程可以通过多种算法实现,如匹配追踪(Matching Pursuit)和基追踪(Basis Pursuit)等。

在实际应用中,稀疏表示和字典学习能够帮助我们更高效地处理和存储数据,同时提取出对分析和学习任务有用的特征。例如,在图像处理领域,通过稀疏表示可以有效地进行图像压缩和去噪;在语音识别领域,可以用于特征提取和语音合成等任务。此外,这些技术也在深度学习中发挥作用,例如通过ReLU神经元隐含对特征的非负稀疏性的要求,以及池化操作隐含对特征的强稀疏性的要求。

11.6 压缩感知

在这里插入图片描述

在这里插入图片描述

小结

压缩感知是一种革命性的信号处理技术,它利用信号的稀疏特性,可以在远低于Nyquist采样率的条件下获取信号的离散样本,并通过优化算法实现信号的完美重建。这种方法不仅可以减少数据的采样率,降低存储和处理数据的成本,而且在很多情况下,如图像处理、无线通信、医学成像等领域,它还可以提高信号处理的性能。压缩感知的关键在于信号的稀疏表示、测量矩阵的设计以及有效的信号恢复算法。例如,在无线通信领域,压缩感知可以用于频谱感知和频谱管理,提高无线频谱的利用率。

在实际应用中,压缩感知面临的挑战包括如何设计高效的优化算法、如何处理噪声和干扰等。随着深度学习技术的发展,基于神经网络的方法在压缩感知中也显示出了巨大的潜力。例如,张健课题组在压缩感知领域的研究中,提出了一种记忆增强的深度展开网络(MAPUN),通过精细化设计网络的内部和stage之间的信息传输,提高了信号重建的性能。

11.7 代码

单变量特征选择

一个显示单变量特征选择的例子。

在iris数据中加入含噪(非信息)特征,并采用单变量特征选择。对于每个特征,我们绘制了单变量特征选择的p-值和支持向量机的相应权重。我们可以看到,单变量特征选择选择了信息丰富的特征,并且这些特征具有较大的支持向量机权重。

在所有的特征集合中,只有前四个特征是显著的。我们可以看到,他们在单变量特征选择中得分最高。支持向量机为这些特征之一分配了很大的权重,但也选择了许多信息不丰富的特征。在支持向量机之前应用单变量特征选择,可以增加对显著特征的支持向量机的权重,从而改进分类。

import numpy as np
import matplotlib.pyplot as plt

from sklearn.datasets import load_iris
from sklearn.model_selection import train_test_split
from sklearn.preprocessing import MinMaxScaler
from sklearn.svm import LinearSVC
from sklearn.pipeline import make_pipeline
from sklearn.feature_selection import SelectKBest, f_classif

# ####################################################
# Import some data to play with

# The iris dataset
X, y = load_iris(return_X_y=True)

# Some noisy data not correlated
E = np.random.RandomState(42).uniform(0, 0.1, size=(X.shape[0], 20))

# Add the noisy data to the informative features
X = np.hstack((X, E))

# Split dataset to select feature and evaluate the classifier
X_train, X_test, y_train, y_test = train_test_split(
        X, y, stratify=y, random_state=0
)

plt.figure(1)
plt.clf()

X_indices = np.arange(X.shape[-1])

# ####################################################
# Univariate feature selection with F-test for feature scoring
# We use the default selection function to select the four
# most significant features
selector = SelectKBest(f_classif, k=4)
selector.fit(X_train, y_train)
scores = -np.log10(selector.pvalues_)
scores /= scores.max()
plt.bar(X_indices - .45, scores, width=.2,
        label=r'Univariate score ($-Log(p_{value})$)')

####################################################
# Compare to the weights of an SVM
clf = make_pipeline(MinMaxScaler(), LinearSVC())
clf.fit(X_train, y_train)
print('Classification accuracy without selecting features: {:.3f}'
      .format(clf.score(X_test, y_test)))

svm_weights = np.abs(clf[-1].coef_).sum(axis=0)
svm_weights /= svm_weights.sum()

plt.bar(X_indices - .25, svm_weights, width=.2, label='SVM weight')

clf_selected = make_pipeline(
        SelectKBest(f_classif, k=4), MinMaxScaler(), LinearSVC()
)
clf_selected.fit(X_train, y_train)
print('Classification accuracy after univariate feature selection: {:.3f}'
      .format(clf_selected.score(X_test, y_test)))

svm_weights_selected = np.abs(clf_selected[-1].coef_).sum(axis=0)
svm_weights_selected /= svm_weights_selected.sum()

plt.bar(X_indices[selector.get_support()] - .05, svm_weights_selected,
        width=.2, label='SVM weights after selection')


plt.title("Comparing feature selection")
plt.xlabel('Feature number')
plt.yticks(())
plt.axis('tight')
plt.legend(loc='upper right')
plt.show()

在这里插入图片描述

11.8 章末小结

本章是关于特征选择与稀疏学习的一个概述,涵盖了多种降维技术及其原理。以下是对每个部分的简要总结和澄清:

  • 子集搜索与评价:通过系统地搜索所有可能的特征子集来找到最优特征组合的方法。它通过评估每个子集对模型预测能力的影响来选择特征,常用评估方法包括交叉验证或留一验证。

  • 过滤式选择:在模型训练前评估特征与目标变量的统计关系,通过衡量特征的方差、相关性、互信息等来确定特征的重要性。适用于高维数据集,计算效率高,易于解释。

  • 包裹式选择:将特征选择过程与模型训练过程相结合,直接利用模型的性能来评估特征子集的好坏。这种方法能够针对特定的学习器进行优化,但计算成本较高。

  • 嵌入式选择:在模型训练过程中进行特征选择,利用模型本身的参数或属性来评估特征的重要性。L1正则化(Lasso)是其中一种方法,它通过产生稀疏权重矩阵来实现特征选择。

  • 稀疏表示与字典学习:通过使用少量的非零元素来表示信号或数据,降低数据的维度并提取关键特征。字典学习从数据中学习得到一个字典,将数据表示为稀疏向量。

  • 压缩感知:一种信号处理技术,利用信号的稀疏特性,在远低于Nyquist采样率的条件下获取信号的离散样本,并通过优化算法实现信号的完美重建。

  • 单变量特征选择:一个Python代码示例,展示了如何在iris数据集中加入噪声特征,并采用单变量特征选择方法。代码中使用了支持向量机(SVM)来评估特征选择的效果。

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

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

相关文章

Facebook Marketplace无法使用的原因及解决方案

Facebook Marketplace是一项广受欢迎的买卖平台,然而,有时候用户可能会遇到无法访问或使用该功能的问题。通常,这些问题可以归结为以下几类原因: 地理位置限制: Facebook Marketplace并非在全球每个地区都可用。在某些…

【C++笔试强训】如何成为算法糕手Day2

学习编程就得循环渐进,扎实基础,勿在浮沙筑高台 循环渐进Forward-CSDN博客 目录 循环渐进Forward-CSDN博客 第一题:牛牛的快递 第二题:最小花费爬楼梯 第三题:数组中两个字符串的最小距离 补充0x3f3f3f3f 第一题…

OpenWrt学习(二)

OpenWrt是基于Linux系统进行开发需要学习Linux系统基本知识。下面介绍一下OpenWrt系统下常用的指令。 时间命令 查看当前时间 date查看当前日历 cal关机和重启 立即安全关闭系统 shutdown -h now 嵌入式设备不会关机,只会停止运行系统。 重新启动系统 reb…

内核是如何发送数据包

1、网络发包总览 网络发包总流程图如下: 从上图中可以看到用户数据被拷贝到内核态,然后经过协议栈处理后进入RingBuffer。随后网卡驱动真正的将数据发送了出去。当发送完成的时候,是通过硬中断来通知CPU,然后清理RingBuffer。 …

2024.9.25 作业和思维导图

栈 #include <iostream> #include <stdexcept> using namespace std;class My_stack { private:int * data; //栈空间int capacity;int top; //栈顶元素的下标 protected:public:/******************成员函数*************///构造函数My_stack(int c 10):capac…

JS中的事件和DOM操作

一、事件[重要] 1、 事件介绍 事件: 就是发生在浏览器(页面)上一件事,键盘事件,鼠标事件,表单事件,加载事件等等 2、 事件绑定方式 事件要想发生,就得将事件和标签先绑定(确定哪个标签发生什么事情,又有什么响应) 一个完整的事件有三部分 事件源(标签),哪里发出的事. 什么事(…

【DAY20240925】随机梯度下降:高效优化背后的原理与进阶策略

文章目录 前言随机梯度下降SGDMini-batch 随机梯度下降常见优化算法的改进版本 前言 梯度下降更新的通用形式&#xff1a; 论文中类似的表达形式&#xff0c;都表示根据 损失函数对这些参数的梯度 进行更新参数。梯度值较大时&#xff0c;说明当前控制参数对损失有较大的影响…

排序个人总结

插入排序 思路&#xff1b;定义 i 和 j&#xff0c;默认 i 前面的数都是有序的&#xff0c;j 定义为 i 的前一个数&#xff0c;把 i 的值给tmp&#xff0c;tmp与j对应的值进行比较&#xff0c;如果arr[j] > tmp,将arr[j] (大的数前移一位)&#xff0c;如下图 代码&#xf…

【亲子英语】英语故事有声绘本分享

文章目录 一、视觉与听觉的双重盛宴二、语言学习的最佳伙伴三、亲子共读的温馨时光四、适用人群广泛&#xff0c;随时随地学习五、获取方式 在这个快速发展的时代&#xff0c;英语学习已经不再局限于课本和课堂。特别是对于活泼好动的孩子们来说&#xff0c;一种既有趣又高效的…

open-resty 服务安装jwt插件

作者&#xff1a;程序那点事儿 日期&#xff1a;2023/11/16 22:07 lua-resty-jwt 插件 如果想使用Lua识别用户令牌&#xff0c;我们需要引入lua-resty-jwt模块&#xff0c;是用于 ngx_lua 和 LuaJIT 的 Lua 实现库&#xff0c;在该模块能实现Jwt令牌生成、Jwt令牌校验。 下载…

9.25作业

手动实现队列 代码如下 MyQueue.h #ifndef MYQUEUE_H #define MYQUEUE_H #include <iostream> #include <cstring> using namespace std;class Queue{ private:char* data; //字符串数据int len; //当前数量int size; //最大容量int front; //头索引int …

uboot — uboot命令的使用

uboot的命令繁多&#xff0c;下文只对工作中常用到的命令进行记录&#xff0c;其余命令待用到时再查查资料也不迟 一、环境变量操作命令 1、printenv 打印环境变量 2、setenv 修改环境变量/新建环境变量 3、saveenv 保存环境变量/删除环境变量&#xff08;给环境变量赋空值…

巴特沃斯滤波器的MATLAB实现

一、引言 巴特沃斯滤波器&#xff08;Butterworth Filter&#xff09;&#xff0c;是滤波器的一种&#xff0c;其主要特点是通频带的频率响应曲线最平滑。这种滤波器最先由英国工程师斯蒂芬巴特沃斯(StephenButterworth)在1930年发表在英国《无线电工程》期刊的一篇论文中提出的…

基于vue框架的村务综合服务系统8p0l3(程序+源码+数据库+调试部署+开发环境)系统界面在最后面。

系统程序文件列表 项目功能&#xff1a;居民,村委,支部,公告信息,通讯录,重点户 开题报告内容 基于Vue框架的村务综合服务系统开题报告 一、引言 随着信息化时代的深入发展&#xff0c;农村社会治理模式正经历着深刻的变革。传统村务管理方式往往存在信息不对称、效率低下、…

【SpringBoot整合Redis测试Redis集群案例】

1、第一步&#xff0c;创建springboot项目&#xff0c;并导入依赖 如图&#xff0c;创建项目遇到的第一个问题就是&#xff0c;当type选择maven&#xff0c;jdk选择1.8时&#xff0c;java部分没办法选择1.8的版本&#xff0c;这怎么办呢&#xff1f; 原因&#xff1a;搜了一下…

【C++ Primer Plus习题】17.7

问题: 解答: #include <iostream> #include <vector> #include <string> #include <fstream> #include <algorithm>using namespace std;const int LIMIT 50;void ShowStr(const string& str); void GetStrs(ifstream& fin, vector<…

【多线程】面试高频考点!JUC常见类的详细总结,建议收藏!

&#x1f490;个人主页&#xff1a;初晴~ &#x1f4da;相关专栏&#xff1a;多线程 / javaEE初阶 JUC是“Java Util Concurrency”的缩写&#xff0c;指的是Java并发工具包&#xff0c;它位于java.util.concurrent包及其子包中。JUC包提供了大量用于构建并发应用程序的工具和…

简历信息提取系统源码分享

简历信息提取检测系统源码分享 [一条龙教学YOLOV8标注好的数据集一键训练_70全套改进创新点发刊_Web前端展示] 1.研究背景与意义 项目参考AAAI Association for the Advancement of Artificial Intelligence 项目来源AACV Association for the Advancement of Computer Vis…

C++之stack 和 queue

目录 前言 1.stack的介绍和使用 1.1 stack的介绍 1.2 stack的使用 1.3 stack 的模拟 2. queue的介绍和使用 2.1 queue的介绍 2.2 queue的使用 2.3 queue的模拟 3.适配器 3.1 什么是适配器 3.2 STL标准库中stack和queue的底层结构 3.3 deque 的介绍&#xff08;了解&…

每日OJ题_牛客_ 腐烂的苹果_多源BFS_C++_Java

目录 牛客_腐烂的苹果&#xff08;多源 BFS&#xff09; 题目解析 C代码 Java代码 牛客_腐烂的苹果&#xff08;多源 BFS&#xff09; 腐烂的苹果_牛客题霸_牛客网 题目解析 多源 BFS 问题&#xff0c;固定套路&#xff0c;BFS学习 &#xff1a;Offer必备算法28_多源BFS_…