数据标准化的常见方法之Min-max

1. 数据标准化的目的

  数据标准化表示将数据按比例缩放,使之落入一个小的特定区间,一般的目的在于:去除数据的单位限制,转化为量纲的纯数值,便于不同单位或数量级的指标能够进行比较和加权。数据的归一化便是一个典型的案例。

1.1 数据的归一化

  1. 把数转换为(0,1)之间的小数
  2. 把有量纲的表达式转换为无量纲的表达式

1.2 归一化的好处

  归一化的好处在于:在多指标评价体系中,由于各个评价指标的性质,通常具有不同的量纲和数量级。当各指标间的水平相差很大时,如果直接用原始指标值进行分析,就会突出数值较高的指标在综合分析中的作用,相对削弱值水平低指标的作用。因此,为了保证结果的可靠性,需要对原始数据进行标准化处理。
  经验上来说,归一化就是让不同维度之间的特征在数值上有一定比较性,可以大大提高分类器的准确性。

2. Min-max标准化

2.1 定义

  对序列 x 1 , x 2 , . . . , x n x_1,x_2,...,x_n x1,x2,...,xn进行变换:
y i = x i − m i n 1 ≤ j ≤ n { x j } m a x 1 ≤ j ≤ n { x j } − m i n 1 ≤ j ≤ n { x j } y_i=\frac{x_i-min_{1≤j≤n\{x_j\}}}{max_{1≤j≤n\{x_j\}}-min_{1≤j≤n\{x_j\}}} yi=max1jn{xj}min1jn{xj}ximin1jn{xj}
  则新序列 y 1 , y 2 , . . . , y n ∈ [ 0 , 1 ] y_1,y_2,...,y_n∈[0,1] y1,y2,...,yn[0,1]且无量纲。一般的数据需要时都可以考虑先进行规范化处理。
  Min-max标准化是对原始数据进行线性变换,将值映射到[0,1]之间。

2.2 实现代码

import numpy as np
import math

"""
around(arr,decimals=?)?maintain x decimals
"""

class DataNormalization:
    def __init__(self):
        self.arr = np.array([1,2,3,4,5,6,7,8,9])
        self.x_max = self.arr.max() 
        self.x_min = self.arr.min()
        self.x_mean = self.arr.mean()
        self.x_std = self.arr.std()

    def Min_MaxNorm(self):
        arr = np.around(((self.arr - self.x_min) / (self.x_max - self.x_min)), decimals = 4)
        print("Min_MaxNorm:{}".format(arr))

if __name__ == "__main__":
    a = DataNormalization()
    a.Min_MaxNorm()

运行结果如下:

Min_MaxNorm:[0.    0.125 0.25  0.375 0.5   0.625 0.75  0.875 1.   ]

本文参考链接:数据标准化的常见方法(Min-Max标准化、Z-Score标准化等)

min-max标准化,也称为最小最大规范化或范围归一化,是一种常见数据预处理技术,它的目的是将原始数值转换到0-1或-1到1之间。在C语言中,这个过程通常涉及以下步骤: 1. **计算范围**:首先找到数据集中的最小值(min_value)和最大值(max_value)。 2. **转换公式**:对于每个数据点x,应用下面的公式进行标准化: ``` normalized_value = (x - min_value) / (max_value - min_value) ``` 如果你想得到-1到1的范围,可以稍微修改一下公式: ``` normalized_value = 2 * (x - min_value) / (max_value - min_value) - 1 ``` 3. **结果存储**:标准化后的结果会被存储在一个新的数组或变量中。 以下是C语言中进行min-max标准化的一个简单示例: ```c #include <stdio.h> void minMaxNormalize(float input[], float output[], int size, float min, float max) { for (int i = 0; i < size; i++) { output[i] = (input[i] - min) / (max - min); } } int main() { float data[] = {10, 20, 30, 40, 50}; float normalized_data[5]; float min = *min_element(data, data + sizeof(data) / sizeof(data[0])); float max = *max_element(data, data + sizeof(data) / sizeof(data[0])); minMaxNormalize(data, normalized_data, sizeof(data)/sizeof(data[0]), min, max); // 打印标准化后的数据 for (int i = 0; i < sizeof(normalized_data)/sizeof(normalized_data[0]); i++) { printf("%.2f ", normalized_data[i]); } return 0; } ``` 在这个例子中,`minMaxNormalize`函数接受输入数组、输出数组、大小以及原数据的最小值和最大值作为参数。
评论 2
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

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

余额充值