Python实现数据归一化:Min-Max、Z-score与小数定标详解

小岛来信
小岛来信
发布时间:2026-10-15| 5人浏览过
原创

本文详细介绍Python中三种常用的数据归一化算法:Min-Max、Z-score及小数定标。通过公式解析、逻辑步骤与完整代码示例,阐述各方法的适用场景与局限性,帮助开发者在建模前有效消除量纲影响并提升模型精度。

1.前言

归一化算法Normalization旨在将不同量纲的数据转换为统一的数值范围,通常限定在[0,1]或[-1,1]区间内。在进行机器学习建模之前,对数据进行归一化处理是常见的预处理步骤。

进行数据归一化的主要原因包括:

  • 降低计算复杂度
  • 可能提升模型的预测精度
  • 消除不同特征间的量纲差异

接下来将介绍三种常见的标准化方法:最大最小值法、正态中心化法(Z-score)以及小数定标法。

2.Min-Max方法

2.1 公式

2.2 算法实现逻辑

  • 1. 找出数据集中的最大值与最小值
  • 2. 应用归一化公式进行计算
  • 3. 输出结果(为便于可视化展示,配套提供了代码实现)

2.3 代码

import numpy as np
import pandas as pd
import matplotlib.pyplot as plt

# 1.最小最大标准化
Data = np.array([[0.2,0.9,29],
                [0.9,0.1,100],
                [0.5,0.5,30]]) #最小-最大归一化算法
# 1.1数据转化
def MinMax(data):
    min = 0
    max = 1
    C = data[:,2]
    min = np.min(C)
    max = np.max(C)
    for one in data:
        one[2] = (one[2]-min) / (max-min)
    print('转化后的矩阵:\n',data)
    return data


# 1.2可视化
def ShowData(Data,ShowD1):
    length = len(Data)
    X = np.ones(Data.shape[0])
    plt.figure(1)
    plt.subplot(121)
    for i in range(length):
        plt.scatter(X*(i+1),Data[:,i])
    plt.subplot(122)
    for i in range(length):
        plt.scatter(X*(i+1),ShowD1[:,i])
    plt.show()
ShowData(Data,MinMax(Data.copy()))

转化后的矩阵:

[[0.2 0.9 0. ] [0.9 0.1 1. ] [0.5 0.5 0.01408451]]

2.4局限

  • 当数据规模过大时,该方法适应性较差
  • 归一化后的数据范围固定在[0,1],对于原始数据中同时存在正负值的情况需谨慎使用

3 Z-score标准化

3.1 公式

3.2 算法实现逻辑

  • 输入原始数据
  • 计算数据的均值与方差,随后利用中心化公式进行转换
  • 输出标准化后的结果

3.3 代码

def Zscore(data):
    x_mean = np.mean(data[:2])
    length = len(data[:,2])
    vari = np.sqrt((np.sum((data[:2]-x_mean)**2))/length)
    print('方差:',vari)
    data[:,2] = (data[:,2]-x_mean)/vari
    print('Z-score标准化后的矩阵是',data)
    return data

ShowData(Data,Zscore(Data.copy()))

方差: 51.569160680908254 Z-score标准化后的矩阵是 [[0.2 0.9 0.13864876] [0.9 0.1 1.5154406 ] [0.5 0.5 0.15804019]]

3.4 局限

  • 在样本量较少的情况下,表现可能不佳
  • 标准化后的数据范围包含正负值,通常分布在[-1,1]附近

4 小数定标法

4.1 公式

4.2 算法实现逻辑

  • 输入原始数据
  • 计算绝对值并确定最大值
  • 将每个数值除以最大值的数量级(10的k次方)
  • 输出处理后的数据

4.3 代码实现

# 小数定标归一化算法
def Decimals(data):
    C = np.abs(data[:,2])
    max = int(np.sort(C)[-1]) # 按从小到大排序,取最后一位,及最大值
    k = len(str(max))
    print('绝对值最大的位数:\n',k)
    data[:2] = data[:,2] /(10**k)
    print('小数点定标准化后的矩阵:\n',data)
    return data
ShowData(Data,Decimals(Data.copy()))

绝对值最大的位数:

3

小数点定标准化后的矩阵:

[[2.9e-02 1.0e-01 3.0e-02] [2.9e-02 1.0e-01 3.0e-02] [5.0e-01 5.0e-01 3.0e+01]]

4.4 局限

  • 结果受最大值影响较大

至此,关于Python实现归一化算法的详细介绍结束。如需了解更多Python归一化相关内容,请查阅本站过往文章或继续浏览后续文章,感谢支持!

相关标签:

免责声明:本文内容仅供参考,不代表本站观点。转载或引用请注明出处。

Python 相关产品和应用

全部下载
Selenium

Selenium

4.51.0 · Windows

用于浏览器自动化和 Web 测试的 Python 工具。

scikit-learn

scikit-learn

1.9.1 · Windows

常用 Python 机器学习算法与模型评估工具库。

Black

Black

26.10.1 · Windows

强调一致性的 Python 自动代码格式化工具。

Ruff

Ruff

0.17.1 · macOS

由 Rust 编写的高速 Python 代码检查和格式化工具。

pytest

pytest

9.1.1 · Windows

简洁而强大的 Python 自动化测试框架。

FastAPI

FastAPI

0.146.0 · Windows

高性能 Python API 框架,支持类型提示和自动接口文档。

Flask

Flask

3.1.3 · Windows

轻量灵活的 Python Web 应用框架。

Django

Django

6.1.2 · Windows

成熟的 Python Web 框架,适合构建内容站点和业务系统。

Spyder

Spyder

6.1.7 · Windows

面向科学计算与数据分析的 Python 集成开发环境。

SciPy

SciPy

1.18.1 · Windows

面向科学、工程和技术计算的 Python 算法库。