当前位置: 首页 > 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;并设置…...

Xshell远程连接Kali(默认 | 私钥)Note版

前言:xshell远程连接&#xff0c;私钥连接和常规默认连接 任务一 开启ssh服务 service ssh status //查看ssh服务状态 service ssh start //开启ssh服务 update-rc.d ssh enable //开启自启动ssh服务 任务二 修改配置文件 vi /etc/ssh/ssh_config //第一…...

MySQL 隔离级别:脏读、幻读及不可重复读的原理与示例

一、MySQL 隔离级别 MySQL 提供了四种隔离级别,用于控制事务之间的并发访问以及数据的可见性,不同隔离级别对脏读、幻读、不可重复读这几种并发数据问题有着不同的处理方式,具体如下: 隔离级别脏读不可重复读幻读性能特点及锁机制读未提交(READ UNCOMMITTED)允许出现允许…...

基于ASP.NET+ SQL Server实现(Web)医院信息管理系统

医院信息管理系统 1. 课程设计内容 在 visual studio 2017 平台上&#xff0c;开发一个“医院信息管理系统”Web 程序。 2. 课程设计目的 综合运用 c#.net 知识&#xff0c;在 vs 2017 平台上&#xff0c;进行 ASP.NET 应用程序和简易网站的开发&#xff1b;初步熟悉开发一…...

生成 Git SSH 证书

&#x1f511; 1. ​​生成 SSH 密钥对​​ 在终端&#xff08;Windows 使用 Git Bash&#xff0c;Mac/Linux 使用 Terminal&#xff09;执行命令&#xff1a; ssh-keygen -t rsa -b 4096 -C "your_emailexample.com" ​​参数说明​​&#xff1a; -t rsa&#x…...

MySQL 8.0 OCP 英文题库解析(十三)

Oracle 为庆祝 MySQL 30 周年&#xff0c;截止到 2025.07.31 之前。所有人均可以免费考取原价245美元的MySQL OCP 认证。 从今天开始&#xff0c;将英文题库免费公布出来&#xff0c;并进行解析&#xff0c;帮助大家在一个月之内轻松通过OCP认证。 本期公布试题111~120 试题1…...

前端开发面试题总结-JavaScript篇(一)

文章目录 JavaScript高频问答一、作用域与闭包1.什么是闭包&#xff08;Closure&#xff09;&#xff1f;闭包有什么应用场景和潜在问题&#xff1f;2.解释 JavaScript 的作用域链&#xff08;Scope Chain&#xff09; 二、原型与继承3.原型链是什么&#xff1f;如何实现继承&a…...

工业自动化时代的精准装配革新:迁移科技3D视觉系统如何重塑机器人定位装配

AI3D视觉的工业赋能者 迁移科技成立于2017年&#xff0c;作为行业领先的3D工业相机及视觉系统供应商&#xff0c;累计完成数亿元融资。其核心技术覆盖硬件设计、算法优化及软件集成&#xff0c;通过稳定、易用、高回报的AI3D视觉系统&#xff0c;为汽车、新能源、金属制造等行…...

【Java学习笔记】BigInteger 和 BigDecimal 类

BigInteger 和 BigDecimal 类 二者共有的常见方法 方法功能add加subtract减multiply乘divide除 注意点&#xff1a;传参类型必须是类对象 一、BigInteger 1. 作用&#xff1a;适合保存比较大的整型数 2. 使用说明 创建BigInteger对象 传入字符串 3. 代码示例 import j…...

Fabric V2.5 通用溯源系统——增加图片上传与下载功能

fabric-trace项目在发布一年后,部署量已突破1000次,为支持更多场景,现新增支持图片信息上链,本文对图片上传、下载功能代码进行梳理,包含智能合约、后端、前端部分。 一、智能合约修改 为了增加图片信息上链溯源,需要对底层数据结构进行修改,在此对智能合约中的农产品数…...

Linux部署私有文件管理系统MinIO

最近需要用到一个文件管理服务&#xff0c;但是又不想花钱&#xff0c;所以就想着自己搭建一个&#xff0c;刚好我们用的一个开源框架已经集成了MinIO&#xff0c;所以就选了这个 我这边对文件服务性能要求不是太高&#xff0c;单机版就可以 安装非常简单&#xff0c;几个命令就…...