归一化,标准化的小总结

摘要

  • python3.65
  • 名词替换:每一个样本为每一行;每一个特征为每一列
  • 归一化,标准化,标准化代码实现都在代码片中。

前言

  • 问:数据为什么要归一化或者标准化?
  • 答:当一组数据中,所有特征对数据分析的作用都是一样,但是数值大小却差别很大的时候,就需要用到归一化或者标准化。
归一化
  • 特点:通过对原数据的处理,转换数据范围在0-1之间
  • 实现公式:
    x 1 = x − m i n m a x − m i n x 2 = x 1 × ( m x − m i ) + m i x1=\frac{x-min}{max-min} \qquad \qquad x2=x1\times(mx-mi)+mi x1=maxminxminx2=x1×(mxmi)+mi
  • 公式介绍:x2:最终值;x:每个特征的每个数据;max:该特征最大值;min:该特征最小值;mx:生成数据范围最大值;mi:生成数据最小值。mi,mx=0,1 (默认)
  • 作用域:每一个特征(也就是每一列)
  • 缺点:异常值对最大值和最小值影响很大,它对异常点处理不好,鲁棒性差。
  • 适用场景:适合传统精确小数据场景(场景较少)
标准化
  • 特点:通过对原始数据进行变换,把数据变为均值为0,方差为1的范围
  • 实现公式:
    x 1 = x − m e a n δ x1=\frac{x-mean}{\delta} x1=δxmean
  • 公式介绍:x1:最终值;x:该特征的每个数据;mean:该特征的平均值; δ \delta δ:该特征的标准差。
  • 作用域:每一个特征(也就是每一列)
  • 补充:如果出现异常点的话,由于具有一定的数据量,少量的异常点对平均值的影响不大,方差改变较小,进而x1的值影响较小。
代码片
#!/usr/local/bin/python3
# -*- coding: utf-8 -*-
# Author  : rusi_

from sklearn.preprocessing import MinMaxScaler, StandardScaler  # 归一化预处理
import numpy as np


def be_one():
    """
    归一化处理
    :return: None
    """
    test_list = [[-1, -1, 2], [2, 4, 2],[6, 6, -1]]
    mm = MinMaxScaler(feature_range=(2, 3))  # 默认为0,1的范围
    data = mm.fit_transform(test_list)
    print(data)
    return None


def stand():
    """
    标准化处理
    :return: None
    """
    std = StandardScaler()
    data = std.fit_transform([[-1, -1, 2],
                              [2, 4, 2],
                              [6, 6, -1]])
    print(data)
    return None


def transform(dem_array):
    """
    标准化算法实现
    :param dem_array: array数组
    :return: 标准化后的arry数组
    """
    # 计算每列的均值以及标准差
    mean = np.array([np.mean(dem_array[:, i]) for i in range(dem_array.shape[1])])
    scale = np.array([np.std(dem_array[:, i]) for i in range(dem_array.shape[1])])
    res_array = np.empty(shape=dem_array.shape, dtype=float)
    for col in range(dem_array.shape[1]):
        res_array[:, col] = (dem_array[:, col] - mean[col]) / scale[col]
    return res_array


if __name__ == '__main__':
    # be_one()
    # stand()
    print(transform(np.array([[-1, -1, 2],
                              [2, 4, 2],
                              [6, 6, -1]])))

  • 0
    点赞
  • 2
    收藏
    觉得还不错? 一键收藏
  • 0
    评论
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

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

抵扣说明:

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

余额充值