【机器学习】数据预处理-特征工程与特征选择

news2024/9/20 10:31:19

目录

一、特征工程

二、数据变换

1.变换

2.归一化

三、数据清洗

1.异常数据

2.数据清洗

四、特征选择

1.Filter过滤法

2.Wrapper包裹法 ...

3.Embedded嵌入法 ...

五、降维算法

1.SVD

2.PCA


一、特征工程

特征工程就是从原始数据提取特征的过程,这些特征可以很好地描述数据,并且利用特 征建立的模型在未知数据上的性能表现可以达到最优 (或者接近最佳性能)。特征工程一般包括特征使用、特征获取、特征处理、特征选择和特征监控。

特征工程的处理流程为首先去掉无用特征,接着去除冗余的特征,如共线特征,并利用存在的特征、转换特征、内容中的特征以及其他数据源生成新特征,然后对特征进行转换(数值化、类别转换、归一化等),最后对特征进行处理(异常值、最大值、最小值,缺失值等), 以符合模型的使用。 简单来说,特征工程的处理一般包括数据预处理、特征处理、特征选择等工作,而特征选择视情况而定,如果特征数量较多,则可以进行特征选择等操作。

主要任务:

数据清理(清洗):去掉数据中的噪声,纠正不一致。

数据集成:将多个数据源合并成一致的数据存储,构成完整的数据集,如数据仓库。

数据归约(消减):通过聚集、删除冗余属性或聚类等方法来压缩数据。

数据变换(转换):将一种格式的数据转换为另一格式的数据(如规范化)。

二、数据变换

1.变换

左偏偏态分布→(指数变换)→正态分布←(对数变换)←右偏偏态分布

2.归一化

(数据存在显著数量级差异的情况)

(1) 最小-最大规范化

也称为离差标准化,是对原始数据的线性变换,使结果值映射到[0 , 1]之间。

其中max为样本数据的最大值,min为样本数据的最小值,max-min为极差。

(2) 零-均值规范化

也叫标准差标准化,经过处理的数据的平均数为0,标准差为1。转化函数为∶

其中为原始数据的均值,为原始数据的标准差。

(3) 小数定标规范化

通过移动属性值的小数位数,将属性值映射到[-1 , 1]之间,移动的小数位数取决于属性值绝对值的最大值。转化函数为︰

三、数据清洗

1.异常数据

噪声数据:数据中存在着错误或异常(偏离期望值)

  • 收集数据的时候难以得到精确的数据,收集数据的设备可能出现故障;
  • 数据输入时可能出现错误;
  • 数据传输过程中可能出现错误;
  • 存储介质有可能出现损坏等。

缺失值:由于实际系统设计时存在的缺陷以及使用过程中的一些人为因素,数据记录可能会出现数据值的丢失或不确定。

2.数据清洗

数据清洗主要是删除原始数据集中的无关数据、重复数据,平滑噪声数据,处理缺失值、异常值等。

(1) 缺失值处理

删除记录、数据插补和不处理

插补方法

方法描述

均值/中位数/众数插补

根据属性值的类型,用该属性取值的平均数/中位数/众数进行插补

使用固定值

将缺失的属性值用一个常量替换

最近临插补

在记录中找到与缺失样本最接近的样本的该属性值插补

回归方法

对带有缺失值的变量,根据已有数据和与其有关的其他变量(因变量)的数据建立拟合模型来预测缺失的属性值

插值法

插值法是利用已知点建立合适的插值函数f(x),未知值由对应点xi求出的函数值f(xi)近似代替

欧几里得距离

(Euclidean Distance)又称直线距离。

令i=()和j=()是两个被p个数值属性描述的对象。对象i和j之间的欧几里得距离为:

拉格朗日插值法

能给出一条最低次数函数穿过样本点。

①求已知的n个点对(x1, y1), (x2, y2)…(xn, yn)的基函数

②求已知的n个点对(x1, y1), (x2, y2)…(xn, yn)的插值多项式

③将缺失的函数值对应的点代入插值多项式得到缺失值的近似值L(x)

牛顿插值法

① 求已知的n个点对(x1, y1), (x2, y2)…(xn, yn)的所有阶差商公式

② 联立以上差商公式建立插值多项式f(x)

③ 将缺失的函数值对应的点代入插值多项式得到缺失值的近似值f(x)

(2) 异常值处理

异常值处理方法

方法描述

删除含有异常值的记录

直接将含有异常值的记录删除

视为缺失值

将异常值视为缺失值,利用缺失值处理的方法进行处理

平均值修正

可用前后两个观测值的平均值修正该异常值

不处理

直接在具有异常值的数据集上进行挖掘建模

原则

若数据服从正态分布,则异常值被定义为一组结果值中与平均值的偏差超过三倍标准差的值。即在正态分布的假设下,距离平均值三倍σ之外的值出现的概率很小,因此可认为是异常值。

import pandas as pd  
data_filepath = 'data.xls'  
data = pd.read_excel(data_filepath)  #导入数据表
data['销量1'] = data['销量']  
l_fence = data['销量1'].mean() - 3*data['销量1'].std()#建立下界  
u_fence = data['销量1'].mean() + 3*data['销量1'].std()#建立上界  
#将小于下界和大于上界的值放入  
value_l = data['销量1'][data['销量1'] < l_fence]  
value_u = data['销量1'][data['销量1'] > u_fence]  
#找到对应异常值的索引  
list_lindex = data[ '销量1'][data[ '销量1'] < l_fence].index.tolist()  
list_uindex = data[ '销量1'][data[ '销量1'] > u_fence].index.tolist()  
#对异常值赋空  
data['销量1'][(data['销量1']< l_fence)|(data['销量1'] > u_fence)] = None  
data['销量2'] = data['销量1']  
#对处于异常值列表里的元素分上下界赋值  
for i in list_lindex:  
    data['销量2'][i] = l_fence  
for i in list_uindex:  
    data['销量2'][i] = u_fence  
print(data['销量2'].isnull().sum())  
#空值因为无法比较 所以单独将其赋为平均值  
data['销量2'] = data['销量2'].fillna(data[ '销量2' ].mean())  
print(data['销量2'].isnull().sum())  
#导出数据表  
outputfile='outdata.xlsx'  
data.to_excel(outputfile)  

箱线图

中横线:中位数

IQR:75%分位数(下四分位数)(Q3)-25%分位数(上四分位数)(Q1)

最小观察值(下边缘)= Q1 – 1.5 IQR

最大观察值(上边缘)= Q3 +  1.5 IQR

sta = data['销量'].describe()  
iqr = sta.loc['iqr'] = sta.loc['75%'] - sta.loc['25%']  
l_fence = sta.loc['l_fence']=sta.loc['25%']-1.5*sta.loc['iqr']  
u_fence = sta.loc['u_fence']=sta.loc['75%']+1.5*sta.loc['iqr']  
#范围比3σ原则收紧  

四、特征选择

1.Filter过滤法

按照发散性或者相关性对各个特征进行评分,通过设定阒值或者待选择阈的个数来选择特征。过滤方法通常用作预处理步骤,特征选择完全独立于任何机器学习算法。它是根据各种统计检验中的分数以及相关性的各项指标来选择特征。

  • 过程:全部特征→最佳特征子集→算法→模型评估
  • 主要对象:需要遍历特征或升维的算法
  • 主要目的:在维持算法表现的前提下降低计算成本

阈值很小 被过滤掉得特征比较少

阈值比较大 被过滤掉的特征有很多

模型表现

不会有太大影响

可能变更好,代表被滤掉的特征大部分是噪音

也可能变糟糕,代表被滤掉的特征中很多都是有效特征

运行时间

可能降低模型的运行时间

当方差很小特征不多时对模型没有太大影响

一定能够降低模型的运行时间

算法在遍历特征时的计算越复杂,运行时间下降得越多

import pandas as pd  
data = pd.read_csv(r"data.csv")#导入数据  
X = data.iloc[:,1:]  
y = data.iloc[:,0]  
from sklearn.feature_selection import VarianceThreshold  
X_var0 = VairanceThreshold().fit_transform(X)  
#实例化 不填参数默认方差为0 获取删除不合格特征之后的新特征矩阵  
X_var0.shape#(42000,708) #707个特征  
import numpy as np  
#X.var()每一列的方差  
X_fsvar = VarianceThreshold(np.median(X.var().values)).fit_transform(X)  
X.var().values#查看方差的值  
np.median(X.var().values)#查看具体构造  
X_fsvar.shape#(42000,392) #筛选之后剩余391个  
#若特征是伯努利随机变量,假设p=0.8,即二分类特征中某种分类占到80%以上的时候删除特征  
X_bvar = VarianceThreshold(.8*(1 -.8)).fit_transform(X)  
X_bvar.shape#(42000,685) 

最近邻算法KNN,单棵决策树,支持向量机 SVM,神经网络,回归算法,都需要遍历特征或升维来进行运算,所以他们本身的运算量就很大,需要的时间就很长,因此方差过滤这样的特征选择对他们来说就尤为重要。

#KNN vs 随机森林在不同方差过滤效果下的对比  
from sklearn.ensemble import RandomForestClassifier as RFC  
from sklearn.neighbors import KNeighborsClassifier as KNN  
from sklearn.model_selection import cross_val_score  
import numpy as np  
X = data.iloc[:,1:]  
y = data.iloc[:,0]  
#KNN  
X_fsvar = VarianceThreshold(np.median(X.var().values)).fit_transform(X)  
cross_val_score(KNN(),X,y,cv=5).mean()  
#0.965857142857143  
cross_val_score(KNN(),X_fsvar,y,cv=5).mean()  
#0.966  
#随机森林(结果有微弱上升 时间也有提升)  
cross_val_score(RFC(n_estimators=10,random_state=0),X,y,cv=5).mean()  
#0.9373571428571429  
cross_val_score(RFC(n_estimators=10,random_state=0),X_fsvar,y,cv=5).mean()  
#0.9390476190476191  

(1) 卡方过滤 ...

from sklearn.ensemble import RandomForestClassifier as RFC  
from sklearn.model_selection import cross_val_score  
from sklearn.feature_selection import SelectKBest  
from sklearn.feature_selection import chi2  
X_fschi = SelectKBest(chi2,k=300).fit_transform(X_fsvar,y)  
X_fschi.shape#(42000,300)  
cross_val_score(RFC(n_estimators=10,random_state=0),X_fschi,y,cv=5).mean()  

(2) F检验 ...

(3) 互信息法 ...

基于序列向前选择:SFS (Sequential Forward Selection)

2.Wrapper包裹法 ...

根据目标函数(通常是预测效果评分)每次选择若干特征,或者排除若干特征。

过程:全部特征 →(获取特征子集⇆算法)(算法完成最佳特征选择)→ 模型评估指标

启发式搜索:LVM (Las Vegas Wrapper)

递归式特征消除:RFE (Recursive Feature Elimination)

3.Embedded嵌入法 ...

使用机器学习的某些算法和模型进行训练,得到各个特征的权值系数,并根据系数从大到小选择特征。

过程:全部特征→(特征子集⇆算法+模型评估)(算法依赖于模型评估完成特征子集选择)

LASSO

五、降维算法


sklearn将降维流程拆成了两部分:一部分是计算特征空间V,由奇异值分解完成,另一部分是映射数据和求解新特征矩阵,由主成分分析完成,实现了用SVD的性质减少计算量,却让信息量的评估指标是方差,具体流程如下图:

1.SVD

奇异值分解Single Value Decomposition

线性代数中另一种非常重要的矩阵分解算法(还有一个是特征值分解,但特征值分解只适用于n阶方阵,并且不是所有的n阶方阵都存在特征分解,而SVD的应用更广,它适用于任意给定的m×n阶实数矩阵A。)除了适用于降维,SVD还能用于很多机器学习的工程领域,如推荐系统、文本主题相关性。

U 和 V 是正交矩阵,Σ 是对角矩阵(不一定是方阵)

矩阵

别称

维度

计算方式

矩阵

A的左奇异向量

m行m列

列由的特征向量构成,且特征向量为单位列向量

Σ 矩阵

A的奇异值

m行n列

对角元素来源于的特征值的平方根。

按从大到小的顺序排列的。值越大可以理解为越重要。

矩阵

A的右奇异向量

n行n列

列由的特征向量构成,且特征向量为单位列向量

2.PCA

主成分分析 Principal Component Analysis


一种线性降维算法,也是一种常用的数据预处理(Pre-Processing)方法。它的目标是是用方差(Variance)来衡量数据的差异性,并将差异性较大的高维数据投影到低维空间中进行表示。方差越大,特征所带的信息量越多。

:一个特征的方差

:样本量

:一个特征中的每个样本取值

:一个特征中的每个样本取值

n 维特征矩阵降维过程中的重要步骤:

1) 输入原数据,结构为 (m,n) 找出原本的n个特征向量构成的n维空间

2) 决定降维后的特征数量:k

3) 通过某种变化,找出n个新的特征向量,以及它们构成的新n维空间

4) 找出原始数据在新特征空间V中的n个新特征向量上对应的值,即“将数据映射到新空间中”

5) 选取前k个信息量最大的特征,删掉没有被选中的特征,成功将n维空间V降为k维

PCA使用方差作为信息量的衡量指标,并且特征值分解来找出空间V。

SVD使用奇异值分解来找出空间V。

class sklearn.decomposition.PCA (n_components = None
                    , copy = True
                    , whiten = False
                    , svd_solver = ’auto’
                    , tol = 0.0
                    , iterated_power = ’auto’
                    , random_state = None)  

属性

解释

components_

返回主成分系数矩阵

explained_variance_

降维后的各主成分的方差值

explained_variance_ratio_

降维后的各主成分的方差值占总方差值的比例(主成分方差贡献率)

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

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

相关文章

免费可商用插画素材网站

1、https://undraw.co/illustrations 2、https://iradesign.io/ 3、https://storyset.com/ 4、https://delesign.com/free-designs/graphics/

【Linux篇】三分钟速通Linux基础命令

目录 1. Linux的目录结构 1.1 Linux的目录结构 1.2 /在Linux系统中的表示 2. linux命令基础 2.1 什么是命令和命令行 2.2 Linux命令的通用格式 2.3 ls命令 2.3.1 ls命令的参数的作用&#xff1a; 2.3.2 ls命令的选项 2.3.3 命令的选项组合使用 2.4 cd切换工作目录 2…

宋志平《有效的经营者》首发 高质量经营与企业高质量发展读书分享会圆满举办

走遍人生繁华&#xff0c;醉美江南水乡。8月25日&#xff0c;“美好生活&#xff0c;书香中国”城市行第七站——杭州站&#xff0c;在杭州市兴耀科创城•杭州双碳技术产业园圆满举办。本次活动以高质量经营与企业高质量发展读书分享会为主题&#xff0c;旨在深入推进全民阅读&…

Java基础(泛型)

文章目录 前言 一、泛型类的定义 1.1 泛型类的定义语法 1.2 代码使用示例 二、泛型类的使用语法 2.1 使用语法 2.2 泛型类注意事项 2.3 泛型类的使用小案例 三、从泛型类派生子类&#xff08;2种情况&#xff09; 3.1 子类和父类的泛型类型要保持一致 3.2 子类没有使用…

苹果秋季发布会前瞻:iPhone 16领衔新品盛宴

苹果定档9月9日&#xff0c;揭开新品神秘面纱 苹果公司近日正式宣布&#xff0c;将于9月9日在加州库比蒂诺的Apple Park&#xff0c;史蒂夫乔布斯剧院举办年度秋季新品发布会&#xff0c;主题为“It’s Glowtime”&#xff0c;预示着Siri界面将迎来一场华丽变身。此次发布会较原…

AUTOSAR_EXP_ARAComAPI.pdf的第4章笔记

为了理解AUTOSAR_EXP_ARAComAPI.pdf的第4章内容&#xff0c;生搬硬套的翻译了一把&#xff0c;准备先囫囵吞枣&#xff0c;再仔细理解。因为这些内容的理解也不是一时半会儿的。所以先放上来。 1.AUTOSAR_EXP_ARAComAPI.pdf的介绍 通常&#xff0c;阅读正式的规范并不是学习和…

【扩散模型(六)】IP-Adapter 是如何训练的?2 源码篇(IP-Adapter Plus)

系列文章目录 【扩散模型&#xff08;二&#xff09;】IP-Adapter 从条件分支的视角&#xff0c;快速理解相关的可控生成研究【扩散模型&#xff08;三&#xff09;】IP-Adapter 源码详解1-训练输入 介绍了训练代码中的 image prompt 的输入部分&#xff0c;即 img projection…

ASP.NET MVC+LayUI视频上传完整教程

前言 前段时间在使用APS.NET MVCLayUI做视频上传功能的时&#xff0c;发现当上传一些内存比较大的视频就会提示上传失败&#xff0c;后来通过查阅相关资料发现.NET MVC框架为考虑安全问题&#xff0c;在运行时对请求的文件的长度&#xff08;大小&#xff09;做了限制默认为4M…

缓存Mybatis一级缓存与二级缓存

缓存 为什么使用缓存 缓存(cache)的作用是为了减去数据库的压力,提高查询性能,缓存实现原理是从数据库中查询出来的对象在使用完后不销毁,而是存储在内存(缓存)中,当再次需要获取对象时,直接从内存(缓存)中提取,不再向数据库执行select语句,从而减少了对数据库的查询次数,因此…

力扣之字母异位词分组(python)

题目 给你一个字符串数组&#xff0c;请你将 字母异位词 组合在一起。可以按任意顺序返回结果列表。 字母异位词 是由重新排列源单词的所有字母得到的一个新单词。 示例 1: 输入: strs ["eat", "tea", "tan", "ate", "nat&qu…

回归预测|基于鹅GOOSE优化LightGBM的数据回归预测Matlab程序 多特征输入单输出 2024年优化算法

回归预测|基于鹅GOOSE优化LightGBM的数据回归预测Matlab程序 多特征输入单输出 2024年优化算法| 文章目录 前言回归预测|基于鹅GOOSE优化LightGBM的数据回归预测Matlab程序 多特征输入单输出 2024年优化算法GOOSE-LightGBM 一、GOOSE-LightGBM模型原理&#xff1a;流程&#xf…

【STM32】IIC

超级常见的外设通信方式&#xff0c;一般叫做I方C。 大部分图片来源&#xff1a;正点原子HAL库课程 专栏目录&#xff1a;记录自己的嵌入式学习之路-CSDN博客 目录 1 基本概念 1.1 总线结构 1.2 IIC协议 1.3 软件模拟IIC逻辑 2 AT24C02 2.1 设备地址与…

华为手机数据丢失如何恢复?

在智能手机普及的今天&#xff0c;华为手机凭借其卓越的性能和用户体验赢得了众多用户的青睐。然而&#xff0c;在使用过程中&#xff0c;我们难免会遇到数据丢失或误删除的情况。面对这一困境&#xff0c;许多用户可能会感到束手无策。别担心&#xff0c;本文将为你提供一份全…

什么是响应式?

表达式: 用于表达式进行插值,渲染到页面之中 语法: {{ 表达式 }} 案例 <template><h1>{{ arr[2] }}</h1><h1>{{ 9 5 }}</h1><h1>{{ "神奇" }}</h1> </template><script setup> import { ref } from vue; …

react中配置Sentry

sentry 打开sentrySentry Docs | Application Performance Monitoring &amp; Error Tracking Software官网&#xff0c; 注册。根据提示创建应用后 在 React 应用中配置 Sentry 可以按照以下步骤进行&#xff1a; 安装 Sentry SDK: 在项目根目录下运行&#xff1a; npm in…

DDR5 Channel SI设计的挑战

DDR5延续了前几代数据速率不断提高的趋势。数据传输速度在3200至6400MT/s之间。同时将继续像前几代一样使用单端数据线的方式。为了帮助减少由高数据速率引起的信号完整性问题&#xff0c;DRAM端也会考虑加入判决反馈均衡&#xff08;DFE&#xff09;来减轻反射、ISI对信号传输…

十、Java异常

文章目录 一、异常简介二、异常体系图三、常见的异常3.1 常见的运行时异常3.2 常见的编译异常 四、异常处理4.1 异常处理的方式4.2 try-catch异常处理4.2.1 try-catch异常处理基本语法4.2.2 try-catch异常处理的注意细节 4.3 throws异常处理4.3.1 throws异常处理基本介绍4.3.2 …

Android - Windows平台下Android Studio使用系统的代理

这应该是第一篇Android的博文吧。以后应该会陆续更新的。记录学习Android的点点滴滴。 之前也看过&#xff0c;不过看完书就忘了&#xff0c;现在重拾Android&#xff0c;记录学习历程。 为何要用代理 因为更新gradle太慢了。 如何使用系统的代理 先找到系统代理的ip和端口。…

YOLO与PyQt5结合-增加论文工作量-实现一个目标检测的UI界面

这是个简单的界面&#xff0c;Qtdesigner支持各种界面&#xff0c;支持替换背景添加图标等。 接下来实现一个简单YOLO目标检测界面&#xff1a; 功能&#xff1a; 1、在窗口打开视频或图片进行目标检测&#xff0c;具有中断检测功能&#xff1a;比如检测视频的时候突然打开图…

速盾:cdn可以解决带宽问题么

一、速盾 CDN 的基本概念 CDN&#xff08;Content Delivery Network&#xff09;即内容分发网络&#xff0c;速盾 CDN 是这一技术的具体应用。它的工作原理是通过在全球多地部署服务器节点&#xff0c;将网站的内容缓存到这些节点上。 速盾 CDN 具有诸多优势。首先&#xff0…