机器学习第十一章-特征选择与稀疏学习
11.1子集收集与评价
属性称为"特征" ,对当前学习任务有用的属性称为"相关特征" 、没什么用的属性称为"无关特 征" . 从给定的特征集合中选择出相关特征于集的过程,称为"特征选择"。
特征选择是一个重要的"数据预处理" 过程。我们要从初始的特征集合中选取一个包含了所有重要信息的特征子集,首先,是子集搜索,给走特征集合 {a1,a2 ,... ad} ,我们可将每个特征看作一个候选子集,对这d个候选单特征子集进行评价,假定 {a2} 最优,于是将 {a2}作为第一轮的选定集;然后,在上一轮的选定集中加入一个特征,构成包含两个特征的候选子集,以此往复操作。其次,是子集评价,子集的信息增益为:
信息熵定义为:
11.2过滤式选择
过滤式方法先对数据集进行特征选择,然后再训练学习器。
Relief 是一种著名的过滤式特征选择方法,该方法设计了一个"相关统计量"来度量特征的重要性。该统计量是一个向量,其每个分量分别对应于一个初始特征,而特征子集的重要性则是由子集中每个特征所对应的相关统计量分量之和来决定。
下面是关于Relief算法的过滤式特征选择方法的实验代码及分析和结果:
import numpy as np
from sklearn.datasets import load_iris
from sklearn.model_selection import train_test_split
from sklearn.metrics import accuracy_score
from sklearn.ensemble import RandomForestClassifier
from skfeature.function.statistical import reliefF# 加载数据集
data = load_iris()
X = data.data
y = data.target# 将数据集分为训练集和测试集
X_train, X_test, y_train, y_test = train_test_split(X, y, test_size=0.3, random_state=42)# 计算特征的ReliefF评分
reliefF_scores = reliefF.reliefF(X_train, y_train)# 将特征按ReliefF评分排序
ranked_features = np.argsort(reliefF_scores)[::-1]# 选择前k个特征
k = 2
selected_features = ranked_features[:k]# 用选定的特征训练分类器
X_train_selected = X_train[:, selected_features]
X_test_selected = X_test[:, selected_features]classifier = RandomForestClassifier(n_estimators=100, random_state=42)
classifier.fit(X_train_selected, y_train)# 在测试集上评估分类器
y_pred = classifier.predict(X_test_selected)
accuracy = accuracy_score(y_test, y_pred)print("Selected features:", selected_features)
print("Accuracy with selected features:", accuracy)
分析:
- ReliefF评分:该方法为每个特征计算一个重要性分数,反映了该特征对分类结果的影响。高分特征更为重要。
- 特征选择:根据ReliefF评分,选择排名前k的特征。这里选择了前2个特征。
- 分类性能:使用选定的特征训练随机森林分类器,并在测试集上评估准确性。最终的分类准确性显示了所选特征的有效性。
结果:
11.3包裹式选择

import numpy as np
import pandas as pd
from sklearn.datasets import load_iris
from sklearn.model_selection import train_test_split
from sklearn.linear_model import LogisticRegression
from sklearn.metrics import accuracy_score
from sklearn.preprocessing import StandardScaler# LVW 算法的伪实现
def lvw_algorithm(X_train, y_train, X_test, alpha=0.5):"""LVW算法的伪实现:假设权重为特征的均值"""feature_means = np.mean(X_train, axis=0)weights = np.exp(alpha * feature_means) # 伪权重计算X_train_weighted = X_train * weightsX_test_weighted = X_test * weights# 用加权特征训练逻辑回归模型model = LogisticRegression()model.fit(X_train_weighted, y_train)return model, X_test_weighted# 1. 数据加载
data = load_iris()
X = data.data
y = data.target# 2. 数据预处理
scaler = StandardScaler()
X_scaled = scaler.fit_transform(X)# 3. 数据划分
X_train, X_test, y_train, y_test = train_test_split(X_scaled, y, test_size=0.3, random_state=42)# 4. 应用 LVW 算法
model, X_test_weighted = lvw_algorithm(X_train, y_train, X_test, alpha=0.5)# 5. 预测与评估
y_pred = model.predict(X_test_weighted)
accuracy = accuracy_score(y_test, y_pred)print(f"Model accuracy with LVW algorithm: {accuracy:.2f}")
分析:
-
数据集:我们使用了Iris数据集,这是一个多分类数据集,包含150个样本和4个特征。数据集已经标准化,以便于比较。
-
LVW算法实现:在这个伪实现中,LVW算法假设特征的均值用于计算权重。具体来说,我们将每个特征的均值取指数作为权重,并对训练数据和测试数据进行加权。这是一种简单的加权方法,实际的LVW算法可能会复杂得多。
-
模型训练与评估:我们使用加权后的训练数据训练逻辑回归模型,并在加权后的测试数据上进行预测。最后,计算模型的准确性。
结果:
11.4嵌入式选择与L1正则化
嵌入式特征选择是将特征选择过程与学习器训练过程融为一体。
给定数据集,最简单的线性回归模型,以平方误差为损失函数,则优化目标为:
。

L1正则化问题的求 可使用近端梯度下降法(PGD)
下面是关于近端梯度下降法(PGD)算法解决L1正则化问题的实验代码及分析和结果:
import numpy as np
from sklearn.datasets import make_regression
from sklearn.linear_model import Lasso
from sklearn.metrics import mean_squared_errordef projected_gradient_descent(X, y, lambda_reg, alpha=0.01, num_iters=1000):m, n = X.shapetheta = np.zeros(n)for _ in range(num_iters):gradient = -2 * X.T @ (y - X @ theta) / mtheta -= alpha * gradient# Project onto L1 ball (soft thresholding)theta = np.sign(theta) * np.maximum(0, np.abs(theta) - alpha * lambda_reg)return theta# 1. 数据生成
X, y = make_regression(n_samples=100, n_features=20, noise=0.1, random_state=42)# 2. 设置参数
lambda_reg = 0.1 # L1正则化强度
alpha = 0.01 # 学习率
num_iters = 1000 # 迭代次数# 3. 使用PGD算法求解
theta_pgd = projected_gradient_descent(X, y, lambda_reg, alpha, num_iters)# 4. 用Lasso模型验证
lasso = Lasso(alpha=lambda_reg)
lasso.fit(X, y)
theta_lasso = lasso.coef_# 5. 计算误差
mse_pgd = mean_squared_error(y, X @ theta_pgd)
mse_lasso = mean_squared_error(y, X @ theta_lasso)print(f"PGD Mean Squared Error: {mse_pgd:.2f}")
print(f"Lasso Mean Squared Error: {mse_lasso:.2f}")
分析:
-
数据生成:我们使用
make_regression
函数生成了一个回归数据集。数据集包含100个样本和20个特征,带有一定的噪声。 -
PGD算法实现:在
projected_gradient_descent
函数中,我们通过梯度下降法更新参数,并在每次迭代后对参数进行L1范数的软阈值投影。这个过程确保参数的L1范数约束被满足,即实施了L1正则化。 -
Lasso模型验证:为了验证PGD算法的结果,我们还使用了Scikit-learn的
Lasso
模型,它本质上使用了相同的L1正则化技术。 -
误差计算:我们计算了PGD算法和Lasso模型的均方误差(MSE),以比较它们在数据上的表现。
结果:
11.5稀疏表示与字典学习
将样品稀疏表示,可以使学习任务的难度可能有所降低?涉及的计算和存储开销会减少, 学得模型的可解释性也会提高。字典学习 亦称"稀疏编码"。是为普通稠密表达的样本找到合适的字典,将样本转化为合适的稀疏表示形式,从而使学习任务得以简化。
给定数据集,字典学习最简单的形式为:
11.6压缩感知
在现实任务中,我们常希望根据部分信息来恢复全部信息。通常选择压缩的方法。压缩感知为精确地重构出原信号提供了方法。
在很多应用中均可获得具有稀疏性的 例如图像或声音的数字信 号通常在时域上不具有稀疏性,但经过傅里叶变换、余弦变换、小波变换等处 理后却会转化为频域上的稀疏信号.与特征选择、稀疏表示不同,压缩感知关注的是如何利用信号本身所具有的稀疏性,从部分观测样本中恢复原信号。
限定等距性( RIP)是一种用于描述稀疏信号恢复算法中矩阵性质的概念。它主要用于压缩感知(Compressed Sensing)和信号处理领域,用来确保一个矩阵能够以接近原始信号的方式保留稀疏信号的几何结构。
给定一个的矩阵
和一个正整数
,我们称
满足 (s, δ)限定等距性,如果对于所有的
稀疏向量 x(即只有 s个非零元素的向量),矩阵
满足以下条件:
其中:表示向量x 的二范数(Euclidean norm)。
是一个正的常数,称为(s, δ)等距性常数,它衡量了矩阵
保持 s-稀疏向量的几何结构的能力。
1. 稀疏恢复:RIP 是压缩感知理论中的一个关键性质,保证了使用特定矩阵(如随机矩阵或测量矩阵)时,稀疏信号可以从其线性测量中有效恢复。这意味着,即使我们仅从少量的测量中得到信息,也能准确地重建原始信号。
2. 优化算法的理论保证:RIP 为压缩感知中的许多优化算法提供理论保证,说明这些算法可以在有限的测量数量下恢复稀疏信号。
相关文章:
机器学习第十一章-特征选择与稀疏学习
11.1子集收集与评价 属性称为"特征" ,对当前学习任务有用的属性称为"相关特征" 、没什么用的属性称为"无关特 征" . 从给定的特征集合中选择出相关特征于集的过程,称为"特征选择"。 特征选择是一个重要的"…...

C#中客户端直接引用服务端Proto文件
gRPC 客户端是从 .proto 文件生成的具体客户端类型。 具体 gRPC 客户端具有转换为 .proto 文件中 gRPC 服务的方法。 下一步打开【服务引用】 控制面板 选择grpc选项,然后继续 到此配置完成,然后就和服务共用一份protocol文件...

SiLM5932SHO系列SiLM5932SHOCG-DG 12A/12A强劲驱动电流能力 支持主动短路保护功能(ASC)单通道隔离门极驱动器
SiLM5932SHO系列是一款单通道隔离驱动器,提供12A源电流和12A灌电流。主动保护功能包括退饱和过流检测、UVLO、隔离故障报警和 4A 米勒钳位。输入侧电源的工作电压为3V至5.5V,输出侧电源的工作电压范围为13V至30V。所有电源电压引脚都有欠压锁定 (UVLO) 保…...

本地项目上传github
一、先在github(GitHub: Let’s build from here GitHub)上创建仓库 1,登录github后,点击右上角头像,点击 Your repositories 2,点击new 3,填写仓库名,假设命名 testhub࿰…...
使用zip包来安装mysql
下载 下载地址mysql,使用5.7.23 配置环境变量 添加到系统变量中 C:\Users\Admin\Downloads\mysql-5.7.23-win32\bin 添加my.ini配置文件 在C:\Users\Admin\Downloads\mysql-5.7.23-win32目录下添加my.ini [mysqld] # 设置3306端口 port3306# 自定义设置mysql的安装目录 b…...
嵌入式面经篇十——驱动开发
文章目录 前言一、驱动开发1、Linux 驱动程序的功能是什么?2、内核程序中申请内存使用什么函数?3、内核程序中申请内存和应用程序时申请内存有什么区别?4、自旋锁和信号量在互斥使用时需要注意什么?在中断服务程序里面的互斥是使用…...

MySQL(四)——常用函数
文章目录 函数字符串函数数值函数日期函数流程函数 函数 函数,是指一段可以直接被另一段程序调用的程序或代码。 MySQL中内置了许多函数,我们只需在合适的场景下调用它们即可,调用函数查询结果直接使用SELECT即可,并且可以嵌套使…...
C++ //练习 17.38 扩展上一题中你的程序,将读入的每个单词打印到它所在的行。
C Primer(第5版) 练习 17.38 练习 17.38 扩展上一题中你的程序,将读入的每个单词打印到它所在的行。 环境:Linux Ubuntu(云服务器) 工具:vim 代码块 #include<iostream> #include<…...

NC 丑数
系列文章目录 文章目录 系列文章目录前言 前言 前些天发现了一个巨牛的人工智能学习网站,通俗易懂,风趣幽默,忍不住分享一下给大家。点击跳转到网站,这篇文章男女通用,看懂了就去分享给你的码吧。 描述 把只包含质因…...

Spring Boot 整合 Spring AI 实现项目接入ChatGPT(OpenAl的调用)
当前各种AI项目层出不穷,但绝大多数都是用python写的,现在Spring开源了Spring AI项目,让Java开发者也可以轻松给自己的springboot项目集成AI能力。目前spring AI正式版本为0.8.1,支持接入openAI、Ollama、Azure openAI、Huggingfa…...
react中 useContext 和useReducer的使用
在React中,useContext 和 useReducer 是两个非常有用的Hooks,它们分别用于管理跨组件的状态和复杂的状态逻辑。下面将分别介绍这两个Hooks的使用方式及其结合使用的场景。 1. useContext useContext 允许你订阅React的Context变化。Context提供了一种在…...

Android:动态更新app启动图标和应用名
一、需求背景 每逢重要佳节,很多应用启动图标会自动更新为对应佳节的图标,应用无需更新。 二、效果图 更新后的启动图标和应用名称 三、实现流程 Android app只能替换内置的icon,因此需要提前将logo图标放入App资源文件件里 实际项目App更新…...
深入探讨 ElementUI 动态渲染 el-table
在前端开发中,表格是不可或缺的一部分。无论是数据展示、数据录入,还是数据分析,表格都扮演着重要的角色。而在 Vue.js 生态系统中,ElementUI 提供了一个强大且灵活的表格组件——el-table。本文将带你深入了解如何使用 ElementUI…...
数据炼金术:用Python爬虫精炼信息
标题:数据炼金术:用Python爬虫精炼信息 在数据泛滥的互联网时代,Python爬虫不仅是搜集信息的利器,更是清洗和格式化数据的炼金术。本文将带你走进数据清洗和格式化的世界,展示如何使用Python爬虫从海量网络信息中提取…...

C++第三十八弹---一万六千字使用红黑树封装set和map
✨个人主页: 熬夜学编程的小林 💗系列专栏: 【C语言详解】 【数据结构详解】【C详解】 目录 1、set/map基本结构 2、红黑树基本结构改造 3、红黑树的迭代器 4、set的模拟实现 5、map的模拟实现 6、完整代码 1、set/map基本结构 在封装…...

★ C++基础篇 ★ vector 类
Ciallo~(∠・ω< )⌒☆ ~ 今天,我将继续和大家一起学习C基础篇第六章----vector类 ~ 目录 一 vector的介绍及使用 1.1 vector的介绍 1.2 vector的使用 1.2.1 vector的定义 1.2.2 vector iterator 的使用 1.2.3 vector 空间增长问题 1.2.4 vecto…...

原生js用Export2Excel导出excel单级表头和多级表头数据方式实现
原生js用Export2Excel导出excel单级表头和多级表头数据方式实现 原生js用Export2Excel导出excel单级表头和多级表头数据方式实现HTML文件导入需要的文件HTML文件中实现导出函数HTML总代码实现汇总(直接复制代码,注意js引入路径) 原生js用Expo…...

急需翻译PDF文件怎么办?pdf翻译在线快速帮你解决
面对满屏幕密密麻麻的pdf文件,我常常感到头疼! 语言障碍让我在获取信息的道路上踌躇不前,但自从我发现了pdf在线翻译成中文的神奇工具,一切问题似乎都迎刃而解。 这些软件不仅让我能够快速跨过语言壁垒,还让我在学术…...
线程安全的集合类和并发数据结构
在Java中,线程安全的集合类和并发数据结构对于处理多线程环境下的数据共享和同步至关重要。这些集合和数据结构通过不同的机制来确保在多线程环境下数据的一致性和完整性。以下是一些常见的线程安全的集合类和并发数据结构: 线程安全的集合类 Vector 描…...
Linux环境下运行介绍
1. 文件编程函数介绍 如果在Linux系统下学习C语言,就会了解到两套文件编程接口函数: C语言标准的文件编程函数: fopen、fread、fwrite、fclose Linux下提供的文件编程函数: open、read、write、close 传参的区别: 基于文件指针: fopen fclose fread…...

网络六边形受到攻击
大家读完觉得有帮助记得关注和点赞!!! 抽象 现代智能交通系统 (ITS) 的一个关键要求是能够以安全、可靠和匿名的方式从互联车辆和移动设备收集地理参考数据。Nexagon 协议建立在 IETF 定位器/ID 分离协议 (…...

地震勘探——干扰波识别、井中地震时距曲线特点
目录 干扰波识别反射波地震勘探的干扰波 井中地震时距曲线特点 干扰波识别 有效波:可以用来解决所提出的地质任务的波;干扰波:所有妨碍辨认、追踪有效波的其他波。 地震勘探中,有效波和干扰波是相对的。例如,在反射波…...

Spark 之 入门讲解详细版(1)
1、简介 1.1 Spark简介 Spark是加州大学伯克利分校AMP实验室(Algorithms, Machines, and People Lab)开发通用内存并行计算框架。Spark在2013年6月进入Apache成为孵化项目,8个月后成为Apache顶级项目,速度之快足见过人之处&…...

Docker 运行 Kafka 带 SASL 认证教程
Docker 运行 Kafka 带 SASL 认证教程 Docker 运行 Kafka 带 SASL 认证教程一、说明二、环境准备三、编写 Docker Compose 和 jaas文件docker-compose.yml代码说明:server_jaas.conf 四、启动服务五、验证服务六、连接kafka服务七、总结 Docker 运行 Kafka 带 SASL 认…...
Neo4j 集群管理:原理、技术与最佳实践深度解析
Neo4j 的集群技术是其企业级高可用性、可扩展性和容错能力的核心。通过深入分析官方文档,本文将系统阐述其集群管理的核心原理、关键技术、实用技巧和行业最佳实践。 Neo4j 的 Causal Clustering 架构提供了一个强大而灵活的基石,用于构建高可用、可扩展且一致的图数据库服务…...

WordPress插件:AI多语言写作与智能配图、免费AI模型、SEO文章生成
厌倦手动写WordPress文章?AI自动生成,效率提升10倍! 支持多语言、自动配图、定时发布,让内容创作更轻松! AI内容生成 → 不想每天写文章?AI一键生成高质量内容!多语言支持 → 跨境电商必备&am…...
数据库分批入库
今天在工作中,遇到一个问题,就是分批查询的时候,由于批次过大导致出现了一些问题,一下是问题描述和解决方案: 示例: // 假设已有数据列表 dataList 和 PreparedStatement pstmt int batchSize 1000; // …...

Spring Cloud Gateway 中自定义验证码接口返回 404 的排查与解决
Spring Cloud Gateway 中自定义验证码接口返回 404 的排查与解决 问题背景 在一个基于 Spring Cloud Gateway WebFlux 构建的微服务项目中,新增了一个本地验证码接口 /code,使用函数式路由(RouterFunction)和 Hutool 的 Circle…...
Web 架构之 CDN 加速原理与落地实践
文章目录 一、思维导图二、正文内容(一)CDN 基础概念1. 定义2. 组成部分 (二)CDN 加速原理1. 请求路由2. 内容缓存3. 内容更新 (三)CDN 落地实践1. 选择 CDN 服务商2. 配置 CDN3. 集成到 Web 架构 …...

10-Oracle 23 ai Vector Search 概述和参数
一、Oracle AI Vector Search 概述 企业和个人都在尝试各种AI,使用客户端或是内部自己搭建集成大模型的终端,加速与大型语言模型(LLM)的结合,同时使用检索增强生成(Retrieval Augmented Generation &#…...