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

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

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数据集整理和数据处理代码,可搜索思绪无限查找。

相关文章
|
12天前
|
机器学习/深度学习 算法 数据可视化
机器学习模型中特征贡献度分析:预测贡献与错误贡献
本文将探讨特征重要性与特征有效性之间的关系,并引入两个关键概念:预测贡献度和错误贡献度。
43 3
|
3月前
|
机器学习/深度学习 数据采集 大数据
驾驭大数据洪流:Pandas与NumPy在高效数据处理与机器学习中的核心作用
【7月更文挑战第13天】在大数据时代,Pandas与NumPy是Python数据分析的核心,用于处理复杂数据集。在一个电商销售数据案例中,首先使用Pandas的`read_csv`加载CSV数据,通过`head`和`describe`进行初步探索。接着,数据清洗涉及填充缺失值和删除异常数据。然后,利用`groupby`和`aggregate`分析销售趋势,并用Matplotlib可视化结果。在机器学习预处理阶段,借助NumPy进行数组操作,如特征缩放。Pandas的数据操作便捷性与NumPy的数值计算效率,共同助力高效的数据分析和建模。
56 3
|
3月前
|
机器学习/深度学习 数据采集 数据处理
重构数据处理流程:Pandas与NumPy高级特性在机器学习前的优化
【7月更文挑战第14天】在数据科学中,Pandas和NumPy是数据处理的关键,用于清洗、转换和计算。用`pip install pandas numpy`安装后,Pandas的`read_csv`读取数据,`fillna`处理缺失值,`drop`删除列。Pandas的`apply`、`groupby`和`merge`执行复杂转换。NumPy加速数值计算,如`square`进行向量化操作,`dot`做矩阵乘法。结合两者优化数据预处理,提升模型训练效率和效果。
48 1
|
3月前
|
存储 机器学习/深度学习 人工智能
人工智能平台PAI使用问题之特征平台是否可以与Java进行对接
阿里云人工智能平台PAI是一个功能强大、易于使用的AI开发平台,旨在降低AI开发门槛,加速创新,助力企业和开发者高效构建、部署和管理人工智能应用。其中包含了一系列相互协同的产品与服务,共同构成一个完整的人工智能开发与应用生态系统。以下是对PAI产品使用合集的概述,涵盖数据处理、模型开发、训练加速、模型部署及管理等多个环节。
|
4月前
|
机器学习/深度学习 人工智能 JSON
人工智能平台PAI产品使用合集之创建特征视图时遇到报错,该如何排查
阿里云人工智能平台PAI是一个功能强大、易于使用的AI开发平台,旨在降低AI开发门槛,加速创新,助力企业和开发者高效构建、部署和管理人工智能应用。其中包含了一系列相互协同的产品与服务,共同构成一个完整的人工智能开发与应用生态系统。以下是对PAI产品使用合集的概述,涵盖数据处理、模型开发、训练加速、模型部署及管理等多个环节。
|
4月前
|
机器学习/深度学习 存储 人工智能
人工智能平台PAI产品使用合集之选择使用Hologres作为在线特征存储,响应延时大概在多久
阿里云人工智能平台PAI是一个功能强大、易于使用的AI开发平台,旨在降低AI开发门槛,加速创新,助力企业和开发者高效构建、部署和管理人工智能应用。其中包含了一系列相互协同的产品与服务,共同构成一个完整的人工智能开发与应用生态系统。以下是对PAI产品使用合集的概述,涵盖数据处理、模型开发、训练加速、模型部署及管理等多个环节。
|
4月前
|
机器学习/深度学习 数据采集 存储
人工智能平台PAI产品使用合集之FeatureStore是否支持推荐场景下的session特征
阿里云人工智能平台PAI是一个功能强大、易于使用的AI开发平台,旨在降低AI开发门槛,加速创新,助力企业和开发者高效构建、部署和管理人工智能应用。其中包含了一系列相互协同的产品与服务,共同构成一个完整的人工智能开发与应用生态系统。以下是对PAI产品使用合集的概述,涵盖数据处理、模型开发、训练加速、模型部署及管理等多个环节。
|
4月前
|
机器学习/深度学习 人工智能 前端开发
人工智能平台PAI产品使用合集之创建了实时特征视图,里面的数据是通过什么传入的
阿里云人工智能平台PAI是一个功能强大、易于使用的AI开发平台,旨在降低AI开发门槛,加速创新,助力企业和开发者高效构建、部署和管理人工智能应用。其中包含了一系列相互协同的产品与服务,共同构成一个完整的人工智能开发与应用生态系统。以下是对PAI产品使用合集的概述,涵盖数据处理、模型开发、训练加速、模型部署及管理等多个环节。
|
4月前
|
机器学习/深度学习 算法 C++
机器学习归一化特征编码(二)
这篇文档讨论了机器学习中的特征编码,特别是独热编码(OneHotEncoder)在处理离散变量时的作用。它指出,对于多分类变量,独热编码是常用方法,但对二分类变量通常不需要。在Python的`sklearn`库中,`OneHotEncoder`可以用来实现这一过程,并可以通过设置`drop='if_binary'`来忽略二分类变量。文档还提到了逻辑回归,解释了正则化参数`C`和`penalty`,并列举了不同的优化算法,如`liblinear`、`lbfgs`等。
|
4月前
|
机器学习/深度学习 API Python
机器学习特征降维
这篇内容概述了特征降维在机器学习中的重要性,包括三个主要方法:低方差过滤法、PCA(主成分分析)和相关系数法。低方差过滤法通过删除方差低于阈值的特征来减少无关信息;PCA通过正交变换降低数据的维数,保留大部分信息;相关系数法(如皮尔逊和斯皮尔曼相关系数)用于评估特征间的相关性,去除高度相关的特征以简化模型。这些技术有助于提高模型效率和泛化能力。
下一篇
无影云桌面