归一化,标准化的小总结

♀尐吖头ヾ 提交于 2019-12-24 20:45:44

摘要

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

前言

  • 问:数据为什么要归一化或者标准化?
  • 答:当一组数据中,所有特征对数据分析的作用都是一样,但是数值大小却差别很大的时候,就需要用到归一化或者标准化。

归一化

  • 特点:通过对原数据的处理,转换数据范围在0-1之间
  • 实现公式:
    x1=xminmaxminx2=x1×(mxmi)+mix1=\frac{x-min}{max-min} \qquad \qquad x2=x1\times(mx-mi)+mi
  • 公式介绍:x2:最终值;x:每个特征的每个数据;max:该特征最大值;min:该特征最小值;mx:生成数据范围最大值;mi:生成数据最小值。mi,mx=0,1 (默认)
  • 作用域:每一个特征(也就是每一列)
  • 缺点:异常值对最大值和最小值影响很大,它对异常点处理不好,鲁棒性差。
  • 适用场景:适合传统精确小数据场景(场景较少)

标准化

  • 特点:通过对原始数据进行变换,把数据变为均值为0,方差为1的范围
  • 实现公式:
    x1=xmeanδx1=\frac{x-mean}{\delta}
  • 公式介绍: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]])))

易学教程内所有资源均来自网络或用户发布的内容,如有违反法律规定的内容欢迎反馈
该文章没有解决你所遇到的问题?点击提问,说说你的问题,让更多的人一起探讨吧!