详解机器学习中的数据处理(二)——特征归一化

简介: 详解机器学习中的数据处理(二)——特征归一化

1.特征归一化


 特征工程,顾名思义,是对原始数据进行一系列工程处理,将其提炼为特征,作为输入供算法和模型使用。从本质上来讲,特征工程是一个表示和展现数据的过程。在实际工作中,特征工程旨在去除原始数据中的杂质和冗余,设计更高效的特征以刻画求解的问题与预测模型之间的关系。

 归一化和标准化都可以使特征无量纲化,归一化使得数据放缩在[0, 1]之间并且使得特征之间的权值相同,改变了原数据的分布;而标准化将不同特征维度的伸缩变换使得不同度量之间的特征具有可比性,同时不改变原始数据的分布。下面一个小节的方法部分引自诸葛越、葫芦娃的《百面机器学习》关于特值归一化的介绍。


特征归一化方法


 为了消除数据特征之间的量纲影响,我们需要对特征进行归一化处理,使得不同指标之间具有可比性。例如,分析一个人的身高和体重对健康的影响,如果使用米(m)和千克(kg)作为单位,那么身高特征会在1.6~1.8m的数值范围内,体重特征会在50~100kg的范围内,分析出来的结果显然会倾向于数值差别比较大的体重特征。想要得到更为准确的结果,就需要进行特征归一化(Normalization)处理,使各指标处于同一数值量级,以便进行分析。

 对数值类型的特征做归一化可以将所有的特征都统一到一个大致相同的数值区间内。最常用的方法主要有以下两种。

 (1)线性函数归一化(Min-Max Scaling):它对原始数据进行线性变换,使结果映射到[0, 1]的范围,实现对原始数据的等比缩放。归一化公式如下:

Xnorm=XXminXmaxXmin(1.1)(1.1)Xnorm=X−XminXmax−Xmin

其中XX为原始数据,XmaxXmaxXminXmin分别为数据最大值和最小值。

 (2)零均值归一化(Z-Score Normalization):它会将原始数据映射到均值为0、标准差为1的分布上。具体来说,假设原始特征的均值为μμ、标准差为σσ,那么归一化公式定义为:

z=xμσ(1.2)(1.2)z=x−μσ

 为什么需要对数值型特征做归一化呢?我们不妨借助随机梯度下降的实例来说明归一化的重要性。假设有两种数值型特征,x1x1的取值范围为[0, 10],x2x2的取值范围为[0, 3],于是可以构造一个目标函数符合图1.1 (a)中的等值图。在学习速率相同的情况下,x1x1的更新速度会大于x2x2,需要较多的迭代才能找到最优解。如果将x1x1x2x2归一化到相同的数值区间后,优化目标的等值图会变成图1.1 (b)中的圆形,x1x1x2x2的更新速度变得更为一致,容易更快地通过梯度下降找到最优解。



图1.1 数据归一化对梯度下降收敛速度产生的影响

 在实际应用中,通过梯度下降法求解的模型通常是需要归一化的,包括线性回归、逻辑回归、支持向量机、神经网络等模型。当然,数据归一化并不是万能的,这一方法对于决策树模型并不适用。


Matlab代码实现


 这里我给大家介绍下如何用代码实现。在MatlabMatlab中对于上面提到的两种归一化方法均有自带的处理函数,为避免二次开发我们使用其自带的函数,它们分别是最大最小值映射:mapminmax( )和z值标准化:zscore( )。这里我们分别介绍以下这两个函数,mapminmax( )函数官方文档介绍如下:


mapminmax

通过将行的最小值和最大值映射到[ -1 1] 来处理矩阵

语法

[Y,PS] = mapminmax(X,YMIN,YMAX)

[Y,PS] = mapminmax(X,FP)

Y = mapminmax('apply',X,PS)

说明

[Y,PS] = mapminmax(X,YMIN,YMAX) 通过将每行的最小值和最大值归一化为[ YMIN,YMAX] 来处理矩阵。

[Y,PS] = mapminmax(X,FP) 使用结构体作为参数: FP.ymin,FP.ymax。

Y = mapminmax('apply',X,PS) 给定 X和设置PS,返回Y。


——MATLAB官方文档


 mapminmax( )函数是按行进行归一化处理的,我们可以通过在命令行键入指令进行测试,由于数据集中的数据属性是按列的所以在计算时需要对矩阵进行转置,测试指令和运行结果如下:

powershell
>> x1 = [1 2 4; 1 1 1; 3 2 2; 0 0 0]
x1 =
     1     2     4
     1     1     1
     3     2     2
     0     0     0
>> [y1,PS] = mapminmax(x1');
>> y1'
ans =
   -0.3333    1.0000    1.0000
   -0.3333         0   -0.5000
    1.0000    1.0000         0
   -1.0000   -1.0000   -1.0000


 zscore( )的使用文档介绍如下,该函数按列将每个元素归一化为均值到0,标准差为1的分布上,详情可参考zscore( )函数官方文档


zscore

z值标准化

语法

Z = zscore(X)

Z = zscore(X,flag)

Z = zscore(X,flag,'all')

说明

Z = zscore(X) 为X的每个元素返回Z值,将X每列数据映射到均值为0、标准差为1的分布上。Z与的大小相同X。

Z = zscore(X,flag) 使用由flag表示的标准偏差来缩放X。

Z = zscore(X,flag,'all') 使用X中的所有值的平均值和标准偏差来归一化X。


——MATLAB官方文档


 zscore( )函数是按列的均值和标准差进行归一化处理的,我们可以通过在命令行键入指令进行测试,测试指令和运行结果如下:

powershell
>> x2 = [1 2 4; 1 1 1; 3 2 2; 0 0 0]
x2 =
     1     2     4
     1     1     1
     3     2     2
     0     0     0
>> y2 = zscore(x2);
>> y2
y2 =
   -0.1987    0.7833    1.3175
   -0.1987   -0.2611   -0.4392
    1.3908    0.7833    0.1464
   -0.9934   -1.3056   -1.0247


 对此我们以UCI数据集中的wine( )数据集为例对其数据进行线性函数归一化及零均值归一化,首先在官网下载页下载并保存文件“wine.data”保存在自定义文件夹下,用MatlabMatlab打开文件部分数据截图如下图所示:



 在该目录下新建MatlabMatlab文件“data_normal.m”并在编辑器中键入如下代码:

java
% Normalization
% author:sixu wuxian, website:https://wuxian.blog.csdn.net
clear;
clc;
% 读取数据
wine_data = load('wine.data'); % 读取数据集数据
data = wine_data(:,2:end);     % 读取属性
label = wine_data(:, 1);       % 读取标签
% y =(ymax-ymin)*(x-xmin)/(xmax-xmin)+ ymin;
xmin = -1;
xmax = 1;
[y1, PS] = mapminmax(data', xmin, xmax); % 最大最小值映射归一化
mapminmax_data = y1'; 
save('wine_mapminmax.mat', 'mapminmax_data', 'label'); % 保存归一化数据
% y = (x-mean)/std
zscore_data = zscore(data);  % 零均值归一化
save('wine_zscore.mat', 'zscore_data', 'label');% 保存归一化数据


 以上代码运行后将结果分别保存在文件“wine_mapminmax.mat”和“wine_zscore.mat”中,通过工作区的变量显示情况可以看出数据已归一化到较理想情况,如下图所示:




2. 代码资源获取


 这里对博文中涉及的数据及代码文件做一个整理,本文涉及的代码文件如下图所示。所有代码均在MatlabMatlabR2016bR2016b中调试通过,点击即可运行。


后续博文会继续分享数据处理系列的代码,敬请关注博主的机器学习数据处理分类专栏。

【资源获取】


 若您想获得博文中介绍的填充缺失数据涉及的完整程序文件(包含数据集的原始文件、归一化代码文件及整理好的文件),可点击下方卡片关注公众号“AI技术研究与分享”,后台回复“NM20200301”,后续系列的代码也会陆续分享打包在里面。

 更多的UCI数据及处理方式已打包至博主面包多网页,里面有大量的UCI数据集整理和数据处理代码,可搜索思绪无限查找。

相关文章
|
8月前
|
机器学习/深度学习 算法 Python
机器学习特征筛选:向后淘汰法原理与Python实现
向后淘汰法(Backward Elimination)是机器学习中一种重要的特征选择技术,通过系统性地移除对模型贡献较小的特征,以提高模型性能和可解释性。该方法从完整特征集出发,逐步剔除不重要的特征,最终保留最具影响力的变量子集。其优势包括提升模型简洁性和性能,减少过拟合,降低计算复杂度。然而,该方法在高维特征空间中计算成本较高,且可能陷入局部最优解。适用于线性回归、逻辑回归等统计学习模型。
331 7
|
10月前
|
机器学习/深度学习 存储 设计模式
特征时序化建模:基于特征缓慢变化维度历史追踪的机器学习模型性能优化方法
本文探讨了数据基础设施设计中常见的一个问题:数据仓库或数据湖仓中的表格缺乏构建高性能机器学习模型所需的历史记录,导致模型性能受限。为解决这一问题,文章介绍了缓慢变化维度(SCD)技术,特别是Type II类型的应用。通过SCD,可以有效追踪维度表的历史变更,确保模型训练数据包含完整的时序信息,从而提升预测准确性。文章还从数据工程师、数据科学家和产品经理的不同视角提供了实施建议,强调历史数据追踪对提升模型性能和业务洞察的重要性,并建议采用渐进式策略逐步引入SCD设计模式。
390 8
特征时序化建模:基于特征缓慢变化维度历史追踪的机器学习模型性能优化方法
|
5月前
|
存储 分布式计算 API
基于PAI-FeatureStore的LLM embedding功能,结合通义千问大模型,可通过以下链路实现对物品标题、内容字段的离线和在线特征管理。
本文介绍了基于PAI-FeatureStore和通义千问大模型的LLM embedding功能,实现物品标题、内容字段的离线与在线特征管理。核心内容包括:1) 离线特征生产(MaxCompute批处理),通过API生成Embedding并存储;2) 在线特征同步,实时接入数据并更新Embedding至在线存储;3) Python SDK代码示例解析;4) 关键步骤说明,如客户端初始化、参数配置等;5) 最佳实践,涵盖性能优化、数据一致性及异常处理;6) 应用场景示例,如推荐系统和搜索排序。该方案支持端到端文本特征管理,满足多种语义理解需求。
182 1
|
机器学习/深度学习 算法 数据可视化
机器学习模型中特征贡献度分析:预测贡献与错误贡献
本文将探讨特征重要性与特征有效性之间的关系,并引入两个关键概念:预测贡献度和错误贡献度。
985 3
|
8月前
|
存储 机器学习/深度学习 缓存
特征平台PAI-FeatureStore的功能列表
本内容介绍了阿里云PAI FeatureStore的功能与使用方法,涵盖离线和在线特征管理、实时特征视图、行为序列特征视图、FeatureStore SDK的多语言支持(如Go、Java、Python)、特征生产简化方案、FeatureDB存储特性(高性能、低成本、及时性)、训练样本导出以及自动化特征工程(如AutoFE)。同时提供了相关文档链接和技术细节,帮助用户高效构建和管理特征工程。适用于推荐系统、模型训练等场景。
234 2
|
8月前
PAI-Rec推荐平台对于实时特征有三个层次
PAI-Rec推荐平台针对实时特征有三个处理层次:1) 离线模拟反推历史请求时刻的实时特征;2) FeatureStore记录增量更新的实时特征,模型特征导出样本准确性达99%;3) 通过callback回调接口记录请求时刻的特征。各层次确保了实时特征的准确性和时效性。
205 0
|
10月前
|
存储 分布式计算 MaxCompute
使用PAI-FeatureStore管理风控应用中的特征
PAI-FeatureStore 是阿里云提供的特征管理平台,适用于风控应用中的离线和实时特征管理。通过MaxCompute定义和设计特征表,利用PAI-FeatureStore SDK进行数据摄取与预处理,并通过定时任务批量计算离线特征,同步至在线存储系统如FeatureDB或Hologres。对于实时特征,借助Flink等流处理引擎即时分析并写入在线存储,确保特征时效性。模型推理方面,支持EasyRec Processor和PAI-EAS推理服务,实现高效且灵活的风险控制特征管理,促进系统迭代优化。
239 6
|
机器学习/深度学习 并行计算 大数据
【Python篇】深入挖掘 Pandas:机器学习数据处理的高级技巧
【Python篇】深入挖掘 Pandas:机器学习数据处理的高级技巧
340 3
|
机器学习/深度学习 算法 搜索推荐
机器学习入门(四):距离度量方法 归一化和标准化
机器学习入门(四):距离度量方法 归一化和标准化
|
机器学习/深度学习 数据可视化 数据处理
掌握Python数据科学基础——从数据处理到机器学习
掌握Python数据科学基础——从数据处理到机器学习
205 0

热门文章

最新文章

下一篇
oss云网关配置