当前位置: 首页 > news >正文

[机器学习]特征工程:特征降维

特征降维

1、简介

特征降维是指通过减少特征空间中的维度,将高维数据映射到一个低维子空间的过程

在机器学习和数据分析中,特征降维可以帮助减少数据的复杂性、降低计算成本、提高模型性能和可解释性,以及解决维度灾难等问题。特征降维通常分为两种主要方法:特征选择和特征提取。

  1. 特征选择(Feature Selection)特征选择是指从原始特征中选择一部分最具有代表性和重要性的特征子集,而忽略其他特征。这样可以减少特征的数量,从而降低了维度。特征选择方法可以基于统计检验、信息增益、模型权重等指标来评估特征的重要性,然后选择排名靠前的特征。
  2. 特征提取(Feature Extraction)特征提取是通过数学变换将原始特征映射到一个新的低维子空间,从而保留数据中的关键信息。常见的特征提取方法包括主成分分析(PCA)、线性判别分析(LDA)、独立成分分析(ICA)等。这些方法通过线性或非线性的映射,将高维数据转化为低维表示,使得新特征具有更强的表达能力。

特征降维的优点包括:

  • 减少维度灾难:维度灾难是指在高维空间中,数据稀疏性增加,距离度量失效等问题。特征降维可以减轻这些问题,使得数据更易处理和分析。
  • 减少计算成本:高维数据的计算成本较高,特征降维可以降低计算复杂性,提高算法效率。
  • 提高模型性能:在一些情况下,特征降维可以提高模型的性能,减少过拟合,提高泛化能力。
  • 可视化和解释性:将数据映射到低维空间可以更容易地进行可视化和解释,帮助理解数据中的模式和关系。

特征降维的选择取决于数据的性质、问题的需求和模型的要求。不同的降维方法适用于不同的情况,需要根据具体问题来进行选择和应用。

2、降维

降维是指在某些限定条件下,降低随机变量(特征)个数,得到一组“不相关”主变量的过程

降低随机变量的个数:

相关特征(correlated feature):相对湿度与降雨量之间的相关

正是因为在进行训练的时候,我们都是使用特征进行学习。如果特征本身存在问题或者特征之间相关性较强,对于算法学习预测会影响较大

降维的两种方式:特征选择和主成分分析(可以理解一种特征提取的方式)

3、特征选择

3.1、简述

定义:数据中包含冗余或无关变量(或称特征、属性、指标等),旨在从原有特征中找出主要特征。

特征选择是指从原始数据的特征集合中选择出最具有代表性和重要性的一部分特征,以便用于构建模型、分析数据或解决问题。

特征选择的目标是减少特征的数量,同时保留数据中最具信息量的部分,从而降低计算成本、提高模型性能、加速训练过程和提高模型的可解释性。

特征选择的主要动机是:

  1. 降低维度:高维数据集中的特征数量可能非常庞大,导致计算和存储开销增加,降低了算法的效率。
  2. 减少过拟合:过多的特征可能导致模型过于复杂,容易在训练集上表现良好,但在新数据上表现较差(过拟合)。
  3. 提高模型性能:一些特征可能对模型性能没有贡献,甚至可能带来噪声。通过选择重要的特征,可以提高模型的性能。
  4. 改善解释性:使用更少的特征可以使模型更容易理解和解释。

特征选择方法可以分为三大类:

  1. 过滤法(Filter Methods):通过在特征选择之前对特征进行评估和排序,选择与目标变量相关性较高的特征。常用的过滤方法包括方差选择、相关系数、互信息等。
  2. 包装法(Wrapper Methods):将特征选择视为一个优化问题,根据模型的性能来选择特征。常见的包装方法包括递归特征消除(Recursive Feature Elimination, RFE)和前向选择(Forward Selection)等。
  3. 嵌入法(Embedded Methods):在模型训练过程中进行特征选择,通过优化模型的性能来选择特征。例如,决策树和正则化线性模型可以在训练过程中剪枝或约束特征的权重。

特征选择方法的选择取决于数据的性质、问题的需求和模型的要求。不同的方法适用于不同的情况,需要根据具体问题来选择和应用。特征选择是数据预处理的重要一环,能够为构建更准确、高效和可解释的机器学习模型奠定基础。

3.2、两种方法

Filter(过滤式):主要探究特征本身特点、特征与特征和目标值之间关联

方差选择法:低方差特征过滤

相关系数

Embedded (嵌入式):算法自动选择特征(特征与目标值之间的关联)

决策树:信息熵、信息增益

正则化:L1、L2

深度学习:卷积等

需要使用的模块:sklearn.feature_selection

3.3、过滤式

3.3.1、低方差特征过滤

删除低方差的一些特征,前面讲过方差的意义。再结合方差的大小来考虑这个方式的角度。

特征方差小:某个特征大多样本的值比较相近

特征方差大:某个特征很多样本的值都有差别

API:

sklearn.feature_selection.VarianceThreshold(threshold = 0.0)

删除所有低方差特征

Variance.fit_transform(X)

X:numpy array格式的数据[n_samples,n_features]

返回值:训练集差异低于threshold的特征将被删除。默认值是保留所有非零方差特征,即删除所有样本中具有相同值的特征。

案例实践:

下面进行数据计算,我们对某些股票的指标特征之间进行一个筛选,需要的数据保存在factor_returns.csv文件。

需要除去'index,'date','return'列不考虑(这些类型不匹配,也不是所需要指标)

所以需要的特征如下:pe_ratio,pb_ratio,market_cap,return_on_asset_net_profit,du_return_on_equity,ev,earnings_per_share,revenue,total_expense

下面进行分析:

1、初始化VarianceThreshold,指定阀值方差

2、调用fit_transform

# -*- coding: utf-8 -*-
# @Author:︶ㄣ释然
# @Time: 2023/8/16 10:01
import pandas as pd
from sklearn.feature_selection import VarianceThreshold  # 低方差特征过滤'''
sklearn.feature_selection.VarianceThreshold(threshold = 0.0)删除所有低方差特征Variance.fit_transform(X)X:numpy array格式的数据[n_samples,n_features]返回值:训练集差异低于threshold的特征将被删除。默认值是保留所有非零方差特征,即删除所有样本中具有相同值的特征。
'''
def variance_demo():"""删除低方差特征——特征选择:return: None"""data = pd.read_csv("data/factor_returns.csv")print(data)# 1、实例化一个转换器类transfer = VarianceThreshold(threshold=1)# 2、调用fit_transformdata = transfer.fit_transform(data.iloc[:, 1:10])print("删除低方差特征的结果:\n", data)print("形状:\n", data.shape)if __name__ == '__main__':# 设置 Pandas 输出选项以展示所有行和列的内容pd.set_option('display.max_columns', None)variance_demo()

结果如下:

3.3.2、相关系数

皮尔逊相关系数(Pearson Correlation Coefficient):反映变量之间相关关系密切程度的统计指标

皮尔逊相关系数(Pearson Correlation Coefficient),也称为皮尔逊相关系数或皮尔逊相关系数,是一种用于衡量两个连续变量之间线性关系强度和方向的统计量。它衡量了两个变量之间的线性相关程度。

相关系数的值介于–1与+1之间,即–1≤ r ≤+1。其性质如下:

  • 当r>0时,表示两变量正相关,r<0时,两变量为负相关
  • 当|r|=1时,表示两变量为完全相关,当r=0时,表示两变量间无相关关系
  • 当0<|r|<1时,表示两变量存在一定程度的相关。且|r|越接近1,两变量间线性关系越密切;|r|越接近于0,表示两变量的线性相关越弱
  • 一般可按三级划分:|r|<0.4为低度相关;0.4≤|r|<0.7为显著性相关;0.7≤|r|<1为高度线性相关

公式:

 

参数如下:

n:观测值的数量。

∑:求和符号,表示对所有观测值求和。

x 和 y:分别表示两个变量的观测值。

API:

from scipy.stats import pearsonr

x : (N,) array_like

y : (N,) array_like Returns: (Pearson’s correlation coefficient, p-value)

案例:股票的财务指标相关性计算

我们刚才的股票的这些指标进行相关性计算, 假设我们以factor = ['pe_ratio','pb_ratio','market_cap','return_on_asset_net_profit','du_return_on_equity','ev','earnings_per_share','revenue','total_expense']这些特征当中的两两进行计算,得出相关性高的一些特征。

分析:两两特征之间进行相关性计算

import pandas as pd
from scipy.stats import pearsonr  # 皮尔逊相关系数'''
from scipy.stats import pearsonrx : (N,) array_likey : (N,) array_like Returns: (Pearson’s correlation coefficient, p-value)
'''
def pearsonr_demo():"""相关系数计算"""data = pd.read_csv("data/factor_returns.csv")factor = ['pe_ratio', 'pb_ratio', 'market_cap', 'return_on_asset_net_profit', 'du_return_on_equity', 'ev','earnings_per_share', 'revenue', 'total_expense']for i in range(len(factor)):for j in range(i, len(factor) - 1):print("指标%s与指标%s之间的相关性大小为%f" % (factor[i], factor[j + 1], pearsonr(data[factor[i]], data[factor[j + 1]])[0]))if __name__ == '__main__':# 设置 Pandas 输出选项以展示所有行和列的内容pd.set_option('display.max_columns', None)pearsonr_demo()

结果:

从中可以得出:

指标revenue与指标total_expense之间的相关性大小为0.995845

指标return_on_asset_net_profit与指标du_return_on_equity之间的相关性大小为0.818697

画图:

这两对指标之间的相关性较大,可以做之后的处理,比如合成这两个指标。

相关文章:

[机器学习]特征工程:特征降维

特征降维 1、简介 特征降维是指通过减少特征空间中的维度&#xff0c;将高维数据映射到一个低维子空间的过程。 在机器学习和数据分析中&#xff0c;特征降维可以帮助减少数据的复杂性、降低计算成本、提高模型性能和可解释性&#xff0c;以及解决维度灾难等问题。特征降维通…...

12. Docker可视化工具

目录 1、前言 2、Docker UI 2.1、部署Docker UI 2.2、管理容器 3、Portainer 3.1、部署Portainer 3.2、管理容器 3.3、添加远程Docker 4、Shipyard 1、前言 Docker 提供了命令行工具来管理 Docker 的镜像和运行 Docker 的容器。我们也可以使用图形工具来管理 Docker。…...

css层叠关系

文章目录 cascading声明冲突应用重置样式表a元素的类选择器顺序问题 cascading cascading – 层叠 解决声明冲突的过程&#xff0c;浏览器会自动处理&#xff1b;就是计算样式的权重&#xff0c;权重大的就被选择&#xff1b; 声明冲突 是指多个选择器选中同一个标签&#x…...

【Unity实战篇 】| 如何在小游戏中快速接入一个新手引导教程

前言 【Unity实战篇 】 | 如何在小游戏中快速接入一个新手引导教程一、简单教程描述二、接入Tutorial Master 实现游戏引导2.1 导入Tutorial Master2插件2.2 添加TutorialMasterManager脚本对象2.3 配置Tutorial&#xff0c;用于管理第一段引导内容2.4 配置Stage&#xff0c;用…...

Lookup Singularity

1. 引言 Lookup Singularity概念 由Barry WhiteHat在2022年11月在zkResearch论坛 Lookup Singularity中首次提出&#xff1a; 其主要目的是&#xff1a;让SNARK前端生成仅需做lookup的电路。Barry预测这样有很多好处&#xff0c;特别是对于可审计性 以及 形式化验证&#xff…...

idea 本地版本控制 local history

idea 本地版本控制 local history 如何打开 1 自定义快捷键 settings->keymap->搜索框输入 show history -》Add Keyboard Shortcut -》设置为 CtrlAltL 2 右键文件-》local history -》show history 新建文件 版本1&#xff0c;creating class com.geekmice…这个是初…...

【Freertos基础入门】深入浅出freertos互斥量

文章目录 前言一、互斥量是什么&#xff1f;二、互斥量的使用场景三、互斥量的使用1.创建 2.删除互斥量3.give和take四、示例代码总结 前言 FreeRTOS是一款开源的实时操作系统&#xff0c;提供了许多基本的内核对象&#xff0c;其中包括互斥锁&#xff08;Mutex&#xff09;。…...

皮爷咖啡基于亚马逊云科技的数据架构,加速数据治理进程

皮爷咖啡&#xff08;Peet’s Coffee&#xff09;是美国精品咖啡品牌&#xff0c;于2017年进入中国&#xff0c;为中国消费者带来传统经典咖啡饮品&#xff0c;并特别呈现更加丰富的品质咖啡饮品体验。通过深入应用亚马逊云科技云原生数据库产品Amazon Redshift以及Amazon DMS等…...

C++ string类详解

⭐️ string string 是表示字符串的字符串类&#xff0c;该类的接口与常规容器的接口基本一致&#xff0c;还有一些额外的操作 string 的常规操作&#xff0c;在使用 string 类时&#xff0c;需要使用 #include <string> 以及 using namespace std;。 ✨ 帮助文档&…...

深入浅出Pytorch函数——torch.nn.init.ones_

分类目录&#xff1a;《深入浅出Pytorch函数》总目录 相关文章&#xff1a; 深入浅出Pytorch函数——torch.nn.init.calculate_gain 深入浅出Pytorch函数——torch.nn.init.uniform_ 深入浅出Pytorch函数——torch.nn.init.normal_ 深入浅出Pytorch函数——torch.nn.init.c…...

一、docker及mysql基本语法

文章目录 一、docker相关命令二、mysql相关命令 一、docker相关命令 &#xff08;1&#xff09;拉取镜像&#xff1a;docker pull <镜像ID/image> &#xff08;2&#xff09;查看当前docker中的镜像&#xff1a;docker images &#xff08;3&#xff09;删除镜像&#x…...

【计算机网络】13、ARP 包:广播自己的 mac 地址和 ip

机器启动时&#xff0c;会向外广播自己的 mac 地址和 ip 地址&#xff0c;这个即称为 arp 协议。范围是未经过路由器的部分&#xff0c;如下图的蓝色部分&#xff0c;范围内的设备都会在本地记录 mac 和 ip 的绑定信息&#xff0c;若有重复则覆盖更新&#xff08;例如先收到 ma…...

通过微软Azure调用GPT的接口API-兼容平替OpenAI官方的注意事项

众所周知&#xff0c;我们是访问不通OpenAI官方服务的&#xff0c;但是我们可以自己通过代理或者使用第三方代理访问接口 现在新出台的规定禁止使用境外的AI大模型接口对境内客户使用&#xff0c;所以我们需要使用国内的大模型接口 国内的效果真的很差&#xff0c;现在如果想使…...

回归预测 | MATLAB实现BO-SVM贝叶斯优化支持向量机多输入单输出回归预测(多指标,多图)

回归预测 | MATLAB实现BO-SVM贝叶斯优化支持向量机多输入单输出回归预测&#xff08;多指标&#xff0c;多图&#xff09; 目录 回归预测 | MATLAB实现BO-SVM贝叶斯优化支持向量机多输入单输出回归预测&#xff08;多指标&#xff0c;多图&#xff09;效果一览基本介绍程序设计…...

GAN!生成对抗网络GAN全维度介绍与实战

目录 一、引言1.1 生成对抗网络简介1.2 应用领域概览1.3 GAN的重要性 二、理论基础2.1 生成对抗网络的工作原理2.1.1 生成器生成过程 2.1.2 判别器判别过程 2.1.3 训练过程训练代码示例 2.1.4 平衡与收敛 2.2 数学背景2.2.1 损失函数生成器损失判别器损失 2.2.2 优化方法优化代…...

自动驾驶仿真:基于Carsim开发的加速度请求模型

文章目录 前言一、加速度输出变量问题澄清二、配置Carsim动力学模型三、配置Carsim驾驶员模型四、添加VS Command代码五、Run Control联合仿真六、加速度模型效果验证 前言 1、自动驾驶行业中&#xff0c;算法端对于纵向控制的功能预留接口基本都是加速度&#xff0c;我们需要…...

.netcore grpc客户端工厂及依赖注入使用

一、客户端工厂概述 gRPC 与 HttpClientFactory 的集成提供了一种创建 gRPC 客户端的集中方式。可以通过依赖包Grpc.Net.ClientFactory中的AddGrpcClient进行gRPC客户端依赖注入AddGrpcClient函数提供了许多配置项用于处理一些其他事项&#xff1b;例如AOP、重试策略等 二、案…...

C语言入门_Day7 逻辑运算

目录&#xff1a; 前言 1.逻辑运算 2.优先级 3.易错点 4.思维导图 前言 算术运算用来进行数据的计算和处理&#xff1b;比较运算是用来比较不同的数据&#xff0c;进而来决定下一步怎么做&#xff1b;除此以外还有一种运算叫做逻辑运算&#xff0c;它的应用场景也是用来影…...

什么是Eureka?以及Eureka注册服务的搭建

导包 <?xml version"1.0" encoding"UTF-8"?> <project xmlns"http://maven.apache.org/POM/4.0.0"xmlns:xsi"http://www.w3.org/2001/XMLSchema-instance"xsi:schemaLocation"http://maven.apache.org/POM/4.0.0 htt…...

Docker安装并配置镜像加速器,镜像、容器的基本操作

目录 1.安装docker服务&#xff0c;配置镜像加速器 &#xff08;1&#xff09;安装依赖的软件包 &#xff08;2&#xff09;设置yum源&#xff0c;我配置的阿里仓库 &#xff08;3&#xff09;选择一个版本安装 &#xff08;4&#xff09;启动docker服务&#xff0c;并设置…...

五年级数学知识边界总结思考-下册

目录 一、背景二、过程1.观察物体小学五年级下册“观察物体”知识点详解&#xff1a;由来、作用与意义**一、知识点核心内容****二、知识点的由来&#xff1a;从生活实践到数学抽象****三、知识的作用&#xff1a;解决实际问题的工具****四、学习的意义&#xff1a;培养核心素养…...

Qt Http Server模块功能及架构

Qt Http Server 是 Qt 6.0 中引入的一个新模块&#xff0c;它提供了一个轻量级的 HTTP 服务器实现&#xff0c;主要用于构建基于 HTTP 的应用程序和服务。 功能介绍&#xff1a; 主要功能 HTTP服务器功能&#xff1a; 支持 HTTP/1.1 协议 简单的请求/响应处理模型 支持 GET…...

LLM基础1_语言模型如何处理文本

基于GitHub项目&#xff1a;https://github.com/datawhalechina/llms-from-scratch-cn 工具介绍 tiktoken&#xff1a;OpenAI开发的专业"分词器" torch&#xff1a;Facebook开发的强力计算引擎&#xff0c;相当于超级计算器 理解词嵌入&#xff1a;给词语画"…...

多模态大语言模型arxiv论文略读(108)

CROME: Cross-Modal Adapters for Efficient Multimodal LLM ➡️ 论文标题&#xff1a;CROME: Cross-Modal Adapters for Efficient Multimodal LLM ➡️ 论文作者&#xff1a;Sayna Ebrahimi, Sercan O. Arik, Tejas Nama, Tomas Pfister ➡️ 研究机构: Google Cloud AI Re…...

QT: `long long` 类型转换为 `QString` 2025.6.5

在 Qt 中&#xff0c;将 long long 类型转换为 QString 可以通过以下两种常用方法实现&#xff1a; 方法 1&#xff1a;使用 QString::number() 直接调用 QString 的静态方法 number()&#xff0c;将数值转换为字符串&#xff1a; long long value 1234567890123456789LL; …...

佰力博科技与您探讨热释电测量的几种方法

热释电的测量主要涉及热释电系数的测定&#xff0c;这是表征热释电材料性能的重要参数。热释电系数的测量方法主要包括静态法、动态法和积分电荷法。其中&#xff0c;积分电荷法最为常用&#xff0c;其原理是通过测量在电容器上积累的热释电电荷&#xff0c;从而确定热释电系数…...

return this;返回的是谁

一个审批系统的示例来演示责任链模式的实现。假设公司需要处理不同金额的采购申请&#xff0c;不同级别的经理有不同的审批权限&#xff1a; // 抽象处理者&#xff1a;审批者 abstract class Approver {protected Approver successor; // 下一个处理者// 设置下一个处理者pub…...

MFC 抛体运动模拟:常见问题解决与界面美化

在 MFC 中开发抛体运动模拟程序时,我们常遇到 轨迹残留、无效刷新、视觉单调、物理逻辑瑕疵 等问题。本文将针对这些痛点,详细解析原因并提供解决方案,同时兼顾界面美化,让模拟效果更专业、更高效。 问题一:历史轨迹与小球残影残留 现象 小球运动后,历史位置的 “残影”…...

【Android】Android 开发 ADB 常用指令

查看当前连接的设备 adb devices 连接设备 adb connect 设备IP 断开已连接的设备 adb disconnect 设备IP 安装应用 adb install 安装包的路径 卸载应用 adb uninstall 应用包名 查看已安装的应用包名 adb shell pm list packages 查看已安装的第三方应用包名 adb shell pm list…...

【学习笔记】erase 删除顺序迭代器后迭代器失效的解决方案

目录 使用 erase 返回值继续迭代使用索引进行遍历 我们知道类似 vector 的顺序迭代器被删除后&#xff0c;迭代器会失效&#xff0c;因为顺序迭代器在内存中是连续存储的&#xff0c;元素删除后&#xff0c;后续元素会前移。 但一些场景中&#xff0c;我们又需要在执行删除操作…...