ARTICLE DETAIL

资讯详情

深耕网站建设、视觉设计与SEO优化的一线实战洞察。

机器学习数据预处理之数据标准化(附Python代码实现)

机器学习数据预处理之数据标准化(附Python代码实现)

数据预处理之数据标准化归一化

文章目录

  • 数据预处理之数据标准化归一化
  • 前言
  • 机器学习(ML)
  • 数据预处理
  • 数据标准化
      • (1)Min-Max标准化
      • (2)Z-Score标准化
      • (3)小数定标标准化
      • (4)均值归一化法
      • (5)向量归一化
      • (6)指数转换
  • 总结
  • 参考

前言

这是一个新的专题!

欢迎来到全新的篇章,这里我们将会学到机器学习的一些小知识。
在这里我们可以学到:
1、Python第三方库numpy、pandas以及sklearn库的使用
2、机器学习的基本概念和流程
3、机器学习的一些基本算法


机器学习(ML)

机器学习(Machine Learning)是从数据中自动分析获得模型,并利用模型对未知数据进行预测。

机器学习工作流程可总结如下:
1.获取数据
2.数据基本处理
3.特征工程
4.机器学习(模型训练)
5.模型评估
6.结果达到要求,形成知识;
没有达到要求,重新上面步骤


数据预处理

数据预处理(Data Preprocessing)是指:在使用数据进行建模或分析前,对其进行的处理。
真实环境中产生的数据往往都不是完整、不一致的“脏数据”,无法直接用来建模或进行数据分析。为了提高数据挖掘质量,需要对数据进行一定的处理。
常见的数据预处理包括:标准化、归一化、离散化、抽样、降维、去噪等。
今天我们主要介绍数据的标准化与归一化。


数据标准化

数据标准化(Normalization)是指:将原始数据按一定规则进行缩放,使其落在特定的数值范围内,通常为 [0, 1] 或 [-1, 1],以便于不同量纲或分布差异较大的特征在后续分析中具有可比性。该过程常用于机器学习、数据分析和统计建模中,以消除量纲影响,提升算法收敛速度与模型性能。

数据归一化(Scaling)是指:是将不同量纲或取值范围的数据转换到统一的尺度上,通常映射到 [0, 1] 或 [-1, 1] 区间。其主要目的是消除特征之间的量纲差异,提升模型训练效率与收敛速度,尤其在基于距离的算法(如KNN、SVM)和神经网络中尤为重要。

为什么要进行数据标准化与归一化呢?
去除数据的单位限制,将其转化为无量纲的纯数值,便于不同量级、不同单位或不同范围的数据转化为统一的标准数值,以便进行比较分析和加权。我们以著名的海伦约会对象数据为例说明一下,如下为部分数据:

数据集中共有三个特征,分别是:每年飞行公里数、玩videoGame的时间占比、每周消耗雪糕公升数,第四列表示的是海伦对该样本的喜爱程度。公里数的数值远远大于后两者特征的值,如果直接计算的话,模型的准确程度肯定大打折扣。

此外,数据标准化的好处有:加速模型的收敛速度,提高模型的精度。

常见的数据标准化方法有以下6种。

(1)Min-Max标准化

Min-Max标准化是指对原始数据进行线性变换,将值映射到[0,1]之间,数据分布不变。
Min-Max标准化的计算公式为:
x ′ = x − m i n ( x ) m a x ( x ) − m i n ( x ) x ′ = \frac{x−min(x)}{max(x)−min(x)}x′=max(x)−min(x)x−min(x)​
公式中,x为原始数据中的一个数据,max(x)表示原始数据中的最大值,min(x)表示原始数据中的最大值。

数据读入代码如下(示例):

# 借助Python的三方库pandas实现对数据集的读取与处理,numpy实现科学计算# 代码主要通过jupyter notebook编写完成,复制时注意输出格式importnumpyasnpimportpandasaspd# 读取数据df=pd.read_csv("datingTestSet.csv",header=None,names=['里程数','时间百分比','公升数','标签'])labels=np.array(df['标签'])df.drop('标签',axis=1,inplace=True)# 删除标签值df.head(10)# 展示数据前十行

示例输出:

Min-Max标准化代码如下(示例):

defMin_Max(data):""" Min_Max归一化 """min_val=np.min(data)max_val=np.max(data)# 极差ranges=max_val-min_val norm_data=(data-min_val)/rangesreturnnorm_data norm_data=Min_Max(df)norm_data.head(10)

示例输出:

(2)Z-Score标准化

Z-Score标准化是指基于原始数据的均值和标准差来进行数据的标准化,公式如下:
x ′ = x − μ σ x ′ = \frac{x−μ}{σ}x′=σx−μ​
公式中,x为原始数据中的一个数据,μ表示原始数据的均值,σ表示原始数据的标准差。

代码如下(示例):

defZ_Score(data):mean=np.mean(data)# 均值std_dev=np.std(data)# 标准差norm_data=(data-mean)/std_devreturnnorm_data norm_data=Z_Score(df)norm_data.head(10)

示例输出:

(3)小数定标标准化

小数定标标准化是通过移动数据的小数位数,将数据映射到[-1,1]区间上,移动的小数位数取决于数据绝对值的最大值。例如一组数据为[-10,12,-234,78,-987,789],其中绝对值最大为-987,即改组数据所有数值小数点移动三位即可得到标准化后的数据。小数定标标准化公式如下:
x ′ = x 10 j x ′ = \frac{x}{10^j}x′=10jx​
式中j表示小数点移动位数。

代码如下(示例):

defDecimalScaler(data):exponent=np.ceil(np.log10(data.abs().max()))norm_data=data/10**exponentreturnnorm_data norm_data=DecimalScaler(df)norm_data.head(10)

示例输出:

(4)均值归一化法

均值归一化是指通过原始数据中的均值、最大值和最小值来进行数据的标准化。其计算公式如下:
x ′ = x − μ m a x ( x ) − m i n ( x ) x ′ = \frac{x-μ}{max(x)−min(x)}x′=max(x)−min(x)x−μ​
公式中,x为原始数据中的一个数据,μ表示原始数据的均值。

代码如下(示例):

defMeanScaler(data):''' 均值归一化 '''min_val=np.min(data)max_val=np.max(data)mean=np.mean(data)norm_data=(data-mean)/(max_val-min_val)returnnorm_data norm_data=MeanScaler(df)norm_data.head(10)

示例输出:

(5)向量归一化

向量归一化是指:通过原始数据中的每个值除以该特征所有数据之和来进行数据的标准化。其计算公式如下:
x ′ = x ∑ i = 1 n x i x ′ = \frac{x}{\sum_{i=1}^n x_i}x′=∑i=1n​xi​x​
公式中,分母表示的是原始数据的该特征所有数据之和。

代码如下(示例):

defVectorScaler(data):""" 向量归一化 """norm_data=data/np.sum(data)returnnorm_data norm_data=VectorScaler(df)norm_data.head(10)

示例输出:

(6)指数转换

指数转换是指:通过对原始数据的值进行相应的指数函数进行数据的标准化。指数转换常见的函数方法有lg函数、Softmax函数和Sigmoid函数。
此处我们只介绍lg函数的标准化处理,因为当数据的值过大时Softmax函数和Sigmoid函数标准化并不完全适用(虽然不详细介绍但依旧提供手写代码实现,点击此处即可前往全部代码链接),熟悉神经网络或深度学习的朋友知道上述两种函数常用作激活函数。
lg函数对应的标准化计算公式如下:
x ′ = l g ( x ) l g ( m a x ( x ) ) x ′ = \frac{lg(x)}{lg(max(x))}x′=lg(max(x))lg(x)​

代码如下(示例):

deflg_scaler(data):""" lg函数标准化 """max_val=np.max(data)norm_data=np.log10(data)/np.log10(max_val)returnnorm_data norm_data=lg_scaler(df)norm_data.head(10)

示例输出:


总结

本篇博客我们简单介绍了机器学习及其基本流程,以及数据预处理的基本概念,主要讲解了数据标准化的目的与意义,详细讲述了常用的6种数据标准化的方法,并通过手写Python代码对海伦约会对象数据集进行了展示。
当然,在Python的机器学习三方库sklearn库中对数据标准化归一化做了完美的封装,感兴趣的小伙伴可以在评论区里积极交流或是私信与我交流。


参考

完整代码连接

返回列表