数据处理常用操作归一化和标准化,基于python内置list方式与numpy方式实现对比分析

在数据分析处理中,数据归一化和数据标准化是两个常用的技术,用于改善数据的质量和可分析性。以下是关于这两种技术的详细介绍:

一、数据归一化

数据归一化(Normalization)是将数据按比例缩放,使之落入一个小的特定区间,通常是将数据统一映射到[0,1]区间上。其目的是去除数据的单位限制,将其转化为无量纲的纯数值,以便于不同单位或量级的指标能够进行比较和加权,同时加快训练网络的收敛性。

最大最小归一化(Min-Max scaling)是最常用的归一化方法之一。这种方法通过对原始数据的线性变换,使得结果映射到[0,1]之间。具体地,它使用以下公式进行转换:

X=(X-minV)/(maxV-minV)

其中,X是原始数据,maxV和 minV 分别是原始数据集的最大值和最小值。

数据归一化的应用主要体现在以下几个方面:

  1. 提高模型的精度:通过缩小数据的取值范围,可以避免因变量之间差别过大导致模型预测精度不准确的问题。
  2. 消除数据的偏差:通过将不同特征尺度统一化,可以消除部分由数据集特征引起的偏差,从而形成更为可靠的分析结论。
  3. 提高模型的训练速度:在模型的训练过程中,数据归一化可以显著提高训练的速度,减少计算量和计算时间。

二、数据标准化

数据标准化(Standardization)是将不同来源、格式、规格的数据进行统一处理,使其具有可比较性和可操作性的过程。其目的是提高数据质量、可用性、可靠性等指标,以更好地支持数据分析和应用。

数据标准化的类型包括:

  1. 数值标准化:将不同数值范围、精度、单位的数据转换为统一格式,例如将温度从摄氏度转换为华氏度、Kelvin度等。
  2. 文本标准化:将不同语言、编码、格式的文本数据转换为统一格式,例如将中文转换为英文、ASCII码等。
  3. 时间标准化:将不同时间格式、规则、时区的时间数据转换为统一格式,例如将UTC时间转换为本地时间、日期格式等。
  4. 空值处理:将数据中的缺失、错误、重复等值进行处理,例如将缺失值填充为默认值、平均值等。
  5. 数据类型转换:将不同数据类型(如整数、浮点数、字符串、日期等)的数据转换为统一类型,例如将字符串转换为整数、浮点数等。

数据标准化和归一化在数据分析和处理中起着至关重要的作用。它们可以确保数据的质量和可分析性,提高模型的精度和训练速度,从而更好地支持数据驱动的决策和预测。在我们平时的数据处理和建模计算中,基本上上面两种数据预处理的方法都会经常使用到的,从实现层面来说是比较简单的,这里主要是提供两种方式的实现来进行对比分析,在最开始接触学习python的时候基本上所有的计算我都是习惯于使用list的方式去完成,很少使用numpy之类的工具,后面项目中使用的更多的都是诸如numpy、pandas之类的方式,因为效率更高一点。

首先来看最大最小归一化:

def func1(data_list):
    """
    一维列表最大最小归一化,自定义方法实现
    """
    minV, maxV = min(data_list), max(data_list)
    res_list = []
    for i in range(len(data_list)):
        one_value = (data_list[i] - minV) / (maxV - minV)
        res_list.append(one_value)
    print("res_list: ", res_list)



def func2(data_list):
    """
    一维列表最大最小归一化,借助于np实现
    """
    arr = np.array(data_list)
    res = (arr - arr.min()) / (arr.max() - arr.min())
    print("res_list: ", res.tolist())

func1是最开始学习的时候自己习惯的实现方式,func2是后面项目中经常使用到的方式更为简洁高效。

接下来来看标准化的实现,如下所示:

def func3(data_list):
    """
    一维列表标准化,自定义方法实现
    """
    avg = sum(data_list) / len(data_list)
    std = math.sqrt(sum((x - avg) ** 2 for x in data_list) / len(data_list))
    res_list = []
    for i in range(len(data_list)):
        one_value = (data_list[i] - avg) / std
        res_list.append(one_value)
    print("res_list: ", res_list)



def func4(data_list):
    """
    一维列表标准化,借助于np实现
    """
    arr = np.array(data_list)
    res = (arr - arr.mean()) / arr.std()
    print("res_list: ", res.tolist())

func3是最开始学习的时候自己习惯的实现方式,func4是后面项目中经常使用到的方式更为简洁高效。

上面实例代码都是基于一维列表数据来进行实验的,如果说实际样本数据是二维甚至是高维的话道理都是一样的,对于二维矩阵来说本质就是元素为一维列表的列表数据而已,以此类推即可实现。

评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包

打赏作者

Together_CZ

你的鼓励将是我创作的最大动力

¥1 ¥2 ¥4 ¥6 ¥10 ¥20
扫码支付:¥1
获取中
扫码支付

您的余额不足,请更换扫码支付或充值

打赏作者

实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值