Loading

特征处理—归一化(Normalization)—标准化(Standardization)


返回 我的研究方向(Research Interests)



什么是特征处理


通过 特定的统计方法(数学方法) 数据 转换成 算法要求的数据

  • 数值型数据
    • 归一化
    • 标准化
    • 缺失值
  • 类别型数据:one-hot编码
  • 时间类型:时间的切分

归一化(Normalization)


目的

使得某一个特征对最终的结果不会造成更大的影响,即【三个特征同等重要的时候,就需要进行归一化】

归一化公式如下:

\[X^{'} = \frac{x-min}{max-min} \]

\[X^{''} =X^{'}*(mx-mi)+mi \]

注:作用于每一列,max为一列的最大值,min为一列的最小值,那么x”为最终结果,mx,mi分别为指定区间值默认mx为1,mi为0

例如:
image
得到如下
image

特点、缺点、应用

特点:通过对原始数据进行变换把数据映射到(默认为[0,1])之间

缺点、应用:异常点对最大值最小值的影响太大, 所以这种方法鲁棒性较差,只适合传统精确小数据场景
image

实现代码(sklearn库)

from sklearn.preprocessing import MinMaxScaler  # sklearn归一化API


def normalization():
    """
    归一化处理
    :return: NOne
    """
    mm = MinMaxScaler(feature_range=(0, 1))  # 【 每个特征缩放到给定范围(默认[0, 1]) feature_range = (0, 1) 】

    # X:numpy array格式的数据[n_samples,n_features]
    # 返回值:转换后的形状相同的array
    data = mm.fit_transform([[90, 2, 10, 40],
                             [60, 4, 15, 45],
                             [75, 3, 13, 46]])

    print(data)

    return None


if __name__ == '__main__':
    normalization()


输出:
[[1.         0.         0.         0.        ]
 [0.         1.         1.         0.83333333]
 [0.5        0.5        0.6        1.        ]]

标准化(Standardization)


目的

通过对原始数据进行变换把数据变换到均值为0,方差为1范围内
标准化公式如下:

\[X^{'} =\frac{x-mean}{σ} \]

\[var =\frac{(x_1-mean)^2+(x_2-mean)^2+...(x_n-mean)^2}{n} \]

\[σ=\sqrt{var} \]

注:作用于每一列,mean为平均值,σ为标准差(考量数据的稳定性)
方差:
衡量随机变量或一组数据时离散程度的度量,
方差越大,说明数据越离散,就是都是离平均值远;方差为0, 说明所有这个特征所有值都一样

例如:
image

应用

应用:在已有样本足够多的情况下比较稳定,适合现代嘈杂大数据场景。

实现代码(sklearn库)

from sklearn.preprocessing import StandardScaler  # sklearn标准化API


def standardization():
    """
    标准化缩放
    :return:
    """
    std = StandardScaler()

    # 处理之后每列来说所有数据都聚集在均值0附近方差为1
    #  X:numpy array格式的数据[n_samples,n_features]
    #  返回值:转换后的形状相同的array
    data = std.fit_transform([[90, 2, 10, 40],
                              [60, 4, 15, 45],
                              [75, 3, 13, 46]])

    print(data)

    return None


if __name__ == '__main__':
    standardization()


输出:
[[ 1.22474487 -1.22474487 -1.29777137 -1.3970014 ]
 [-1.22474487  1.22474487  1.13554995  0.50800051]
 [ 0.          0.          0.16222142  0.88900089]]

归一化、标准化对比


对于归一化来说:
如果出现异常点,影响了最大值和最小值,那么结果显然会发生改变。

对于标准化来说:
如果出现异常点,由于具有一定数据量,少量的异常点对于平均值的影响并不大,从而方差改变较小。

缺失值


  • 删除:如果每列或者行数据缺失值达到一定的比例,建议放弃整行或者整列
  • 插补:可以通过缺失值每行或者每列的平均值、中位数来填充
from sklearn.preprocessing import Imputer
import numpy as np

def im():
    """
    缺失值填补
    :return:
    """
    # missing_values 需要填补的值的类型
    # strateg 填补策略
    # axis 按行(1)按列(0)填补
    im = Imputer(missing_values="NaN", strategy="mean",axis=0)

    data = im.fit_transform([[1,2],[np.nan,3],[7,6]])
    print(data)

    return None


if __name__ == '__main__':
    im()

posted @ 2021-04-16 23:17  言非  阅读(7567)  评论(0编辑  收藏  举报