zoukankan      html  css  js  c++  java
  • 数据标准化

    数据标准化的目的是使其缩放到相同的数据区间,以减少规模、特征、分布差异对模型的影响。

    除了用做模型计算,标准化后的数据还具有直接计算并生成符合指标的意义,是加权指标的必要步骤。

    1. 实现中心化和正太分布的Z-Score

    Z-Score标准化是基于原始数据的均值和标准差进行的标准化,假设原转换数据为x,新数据为 x' ,那么 x' = (x-mean)/std

    这种方法适合大多数类型的数据,是默认的标准化方法。标准化后的数据是以0为均值,1为方差的正太分布。但Z-Score方法是一种中心化方法,会改变原有数据的分布结构,不适合对稀疏矩阵做处理

    注意:很多时候,数据集会存在稀疏性,表现为标准差小、很多元素值为0,最常见的稀疏数据集是用来做协同过滤的数据集,绝大部分的数据都为0,仅有少部分数据为1。对稀疏矩阵做标准化,不能采用中心化的方式,否则会破坏稀疏矩阵的结构

    2. 实现归一化的Max-Min

    Max-Min标准化是对原始数据进行线性变换,假设原转换数据为 x,新数据为 x',那么x' = (x-min)/(max-min)

    这种标准化得到的数据完全落入[0, 1]区间内(Z-Score没有类似区间)

    这种方法还能较好的保持原有数据结构

    3. 用于稀疏矩阵的MaxAbs

    最大值绝对值标准化(MaxAbs)即根据最大值的绝对值进行标准化,假设原转换的数据x,新数据 x',那么 x' = x/|max|

    MaxAbs方法跟Max-Min用法类似,也将数据落入一定区间,区间为[-1, 1]

    这种方法保持原有数据结构,可用于稀疏矩阵、稀疏的CSR或CSC矩阵。

    注意:CSR(Compressed Sparse Row,行压缩)和 CSC(Compressed Sparse Column,列压缩)是稀疏矩阵的两种存储格式,这两种稀疏矩阵在 scipy.sparse包中应用广泛。(稀疏矩阵的格式:COO、CSR、DIA、ELL、HYB等)。

    4. 针对离群点的 RobustScaler

    假如数据有离群点,使用Z-Score标准化,结果并不理想,因为异常点的特征往往在标准化后失去离群特征

    可以使用 RobustScaler针对离群点做标准化处理。该方法对数据中心化和数据的缩放健壮性有更强的参数控制能力。

    5. 代码实操:Python标准化处理

    import numpy as np
    from sklearn import preprocessing
    import matplotlib.pyplot as plt
    
    
    plt.rcParams['font.sans-serif']=['SimHei']      # 用来正常显示中文标签
    plt.rcParams['axes.unicode_minus'] = False      # 用来正常显示负号
    
    
    data = np.loadtxt('data6.txt', delimiter='	')
    
    
    # Z-Score标准化
    zscore_scaler = preprocessing.StandardScaler()
    data_scale_1 = zscore_scaler.fit_transform(data)
    
    
    # Max-Min标准化
    minmax_scaler = preprocessing.MinMaxScaler()
    data_scale_2 = minmax_scaler.fit_transform(data)
    
    
    
    # MaxAbsScaler标准化
    maxabs_scaler = preprocessing.MaxAbsScaler()
    data_scale_3 = maxabs_scaler.fit_transform(data)
    
    
    
    # RobustScaler标准化
    robustscalerr_scaler = preprocessing.RobustScaler()
    data_scale_4 = robustscalerr_scaler.fit_transform(data)
    
    
    
    # 展示多网格结果
    data_list = [data, data_scale_1, data_scale_2, data_scale_3, data_scale_4]
    # 创建尺寸列表
    scalar_list = [15, 10, 15, 10, 15, 10]
    # 创建颜色列表
    color_list = ['black', 'green', 'blue', 'yellow', 'red']
    # 创建样式列表
    marker_list = ['o', ',', '+', 's', 'p']
    # 创建标题列表
    title_list = ['scource data', 'zscore_scaler', 'minmax_scaler', 'maxabsscaler_scaler',
                  'robustscalerr_scaler']
    for i, data_single in enumerate(data_list):     # enumerate():将可遍历的对象组合成一个索引序列
        plt.subplot(2, 3, i+1)
        plt.scatter(data_single[:, :-1], data_single[:, -1], s=scalar_list[i],
                    marker = marker_list[i], c=color_list[i])
        # plt.title(title_list[i])
    # plt.suptitle('原始数据和标准化后的数据')
    plt.show()

    实例代码用空行分为8个部分:

    (1)导入库,Numpy做数据读取,Sklearn.preprocessing模块做标准化处理,matplotlib.pyplot做可视化。

    (2)用来正常显示中文,负号。

    (3)np.loadtxt()导入数据,文件以tab分割。

    (4)Z-Score标准化。通过preprocessing.StandardScaler建立模型,然后应用fit_transform进行转换。除了StandardScaler类外,还可以用preprocessing.scale(X)做标准化处理,二者的差别是preprocessing.StandardScaler方法可以满足一次性的标准化处理,又能将转换数据集的特征保存下来,分别通过fittransform对多个数据集(测试集、训练集)做相同规则的转换。

    (5)Max-Min标准化。通过preprocessing.MinMaxScaler建立模型,然后用用fit_transform进行转换。也可以用sklearn.preprocessing.minmax_scale

    (6)MaxAbsScaler标准化。通过

  • 相关阅读:
    shp转geojson
    Vue如何使用$refs
    Cesium加载轨迹
    Nodejs调用Python函数时传递参数
    JavaScript字符串截取:截取'final:'之后的字符串,然后再按照“,”分割。。
    Cesium平移操作
    架空输电线路障碍物巡检的无人机低空摄影测量方法研究
    cesium沿着路线飞行
    业界常用四种命名法则
    电脑优化
  • 原文地址:https://www.cnblogs.com/keye/p/14964266.html
Copyright © 2011-2022 走看看