当前位置:   article > 正文

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

机器学习中标准化数据

数据预处理之数据标准化


前言

这是一个新的专题!

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


机器学习(ML)

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

在这里插入图片描述

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


数据预处理

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


数据标准化

数据标准化(Normalization)是指:将数据按照一定的比例进行缩放,使其落入一个特定的小区间。

为什么要进行数据标准化呢?
去除数据的单位限制,将其转化为无量纲的纯数值,便于不同量级、不同单位或不同范围的数据转化为统一的标准数值,以便进行比较分析和加权。我们以著名的海伦约会对象数据为例说明一下,如下为部分数据:
在这里插入图片描述
数据集中共有三个特征,分别是:每年飞行公里数、玩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)xmin(x)
公式中,x为原始数据中的一个数据,max(x)表示原始数据中的最大值,min(x)表示原始数据中的最大值。

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

# 借助Python的三方库pandas实现对数据集的读取与处理,numpy实现科学计算
# 代码主要通过jupyter notebook编写完成,复制时注意输出格式
import numpy as np
import pandas as pd

# 读取数据
df = pd.read_csv("datingTestSet.csv",header=None,names=['里程数','时间百分比','公升数','标签'])
labels = np.array(df['标签'])
df.drop('标签', axis=1, inplace=True)		# 删除标签值

df.head(10)		# 展示数据前十行
  • 1
  • 2
  • 3
  • 4
  • 5
  • 6
  • 7
  • 8
  • 9
  • 10
  • 11

示例输出:
在这里插入图片描述

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

def Min_Max(data):
    """
    Min_Max归一化
    """
    min_val = np.min(data)
    max_val = np.max(data)
    # 极差
    ranges = max_val - min_val
    norm_data = (data - min_val) / ranges
    return norm_data

norm_data = Min_Max(df)
norm_data.head(10)
  • 1
  • 2
  • 3
  • 4
  • 5
  • 6
  • 7
  • 8
  • 9
  • 10
  • 11
  • 12
  • 13

示例输出:
在这里插入图片描述

(2)Z-Score标准化

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

代码如下(示例):

def Z_Score(data):    
    mean = np.mean(data)    # 均值
    std_dev = np.std(data)    # 标准差
    norm_data = (data - mean) / std_dev    
    return norm_data

norm_data = Z_Score(df)
norm_data.head(10)
  • 1
  • 2
  • 3
  • 4
  • 5
  • 6
  • 7
  • 8

示例输出:
>blog.csdnimg.cn/direct/127e2327a00b44f6816756d741579645.png)

(3)小数定标标准化

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

代码如下(示例):

def DecimalScaler(data):
    exponent = np.ceil(np.log10(data.abs().max()))
    norm_data=data/10**exponent
    return norm_data

norm_data = DecimalScaler(df)
norm_data.head(10)
  • 1
  • 2
  • 3
  • 4
  • 5
  • 6
  • 7

示例输出:
在这里插入图片描述

(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为原始数据中的一个数据,μ表示原始数据的均值。

代码如下(示例):

def MeanScaler(data):
    '''
    均值归一化
    '''
    min_val = np.min(data)
    max_val = np.max(data)
    mean = np.mean(data) 
    norm_data = (data - mean) / (max_val - min_val)

    return norm_data

norm_data = MeanScaler(df)
norm_data.head(10)
  • 1
  • 2
  • 3
  • 4
  • 5
  • 6
  • 7
  • 8
  • 9
  • 10
  • 11
  • 12
  • 13

示例输出:
在这里插入图片描述

(5)向量归一化

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

代码如下(示例):

def VectorScaler(data):
    """
    向量归一化
    """
    norm_data = data / np.sum(data)

    return norm_data

norm_data = VectorScaler(df)
norm_data.head(10)
  • 1
  • 2
  • 3
  • 4
  • 5
  • 6
  • 7
  • 8
  • 9
  • 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)

代码如下(示例):

def lg_scaler(data):
    """
    lg函数标准化
    """
    max_val = np.max(data)
    norm_data = np.log10(data) / np.log10(max_val)

    return norm_data

norm_data = lg_scaler(df)
norm_data.head(10)
  • 1
  • 2
  • 3
  • 4
  • 5
  • 6
  • 7
  • 8
  • 9
  • 10
  • 11

示例输出:在这里插入图片描述


总结

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


参考

完整代码连接

声明:本文内容由网友自发贡献,不代表【wpsshop博客】立场,版权归原作者所有,本站不承担相应法律责任。如您发现有侵权的内容,请联系我们。转载请注明出处:https://www.wpsshop.cn/w/很楠不爱3/article/detail/414856
推荐阅读
相关标签
  

闽ICP备14008679号