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

    '''
    【课程2.3】  数据归一化/标准化
    
     数据的标准化(normalization)是将数据按比例缩放,使之落入一个小的特定区间。
     在某些比较和评价的指标处理中经常会用到,去除数据的单位限制,将其转化为无量纲的纯数值,便于不同单位或量级的指标能够进行比较和加权
     
    最典型的就是数据的归一化处理,即将数据统一映射到[0,1]区间上
    
    0-1标准化 / Z-score标准化
    
    '''
    import numpy as np
    import pandas as pd
    import matplotlib.pyplot as plt
    % matplotlib inline
    # 数据标准化
    # (10-1标准化
    # 将数据的最大最小值记录下来,并通过Max-Min作为基数(即Min=0,Max=1)进行数据的归一化处理
    # x = (x - Min) / (Max - Min)
    
    df = pd.DataFrame({"value1":np.random.rand(10)*20,
                      'value2':np.random.rand(10)*100})
    print(df.head())
    print('------')
    # 创建数据
    
    def data_norm(df,*cols):
        df_n = df.copy()
        for col in cols:
            ma = df_n[col].max()
            mi = df_n[col].min()
            df_n[col + '_n'] = (df_n[col] - mi) / (ma - mi)
        return(df_n)
    # 创建函数,标准化数据
    
    df_n = data_norm(df,'value1','value2')
    print(df_n.head())
    # 标准化数据

      输出:

          value1     value2
    0   1.058973  80.176250
    1   2.268353  72.748326
    2   8.845245  38.677480
    3   6.787782  61.089715
    4  19.699524  91.723522
    ------
          value1     value2  value1_n  value2_n
    0   1.058973  80.176250  0.000000  0.741446
    1   2.268353  72.748326  0.064879  0.618601
    2   8.845245  38.677480  0.417706  0.055126
    3   6.787782  61.089715  0.307330  0.425787
    4  19.699524  91.723522  1.000000  0.932418
    # 数据标准化
    # (2)Z-score标准化
    # Z分数(z-score),是一个分数与平均数的差再除以标准差的过程 → z=(x-μ)/σ,其中x为某一具体分数,μ为平均数,σ为标准差
    # Z值的量代表着原始分数和母体平均值之间的距离,是以标准差为单位计算。在原始分数低于平均值时Z则为负数,反之则为正数
    # 数学意义:一个给定分数距离平均数多少个标准差?
    
    df = pd.DataFrame({"value1":np.random.rand(10) * 100,
                      'value2':np.random.rand(10) * 100})
    print(df.head())
    print('------')
    # 创建数据
    
    def data_Znorm(df, *cols):
        df_n = df.copy()
        for col in cols:
            u = df_n[col].mean()
            std = df_n[col].std()
            df_n[col + '_Zn'] = (df_n[col] - u) / std
        return(df_n)
    # 创建函数,标准化数据
    
    df_z = data_Znorm(df,'value1','value2')
    u_z = df_z['value1_Zn'].mean()
    std_z = df_z['value1_Zn'].std()
    print(df_z)
    print('标准化后value1的均值为:%.2f, 标准差为:%.2f' % (u_z, std_z))
    # 标准化数据
    # 经过处理的数据符合标准正态分布,即均值为0,标准差为1
    
    # 什么情况用Z-score标准化:
    # 在分类、聚类算法中,需要使用距离来度量相似性的时候,Z-score表现更好

      输出:

        value1     value2
    0  87.320919  48.352809
    1  26.031312   7.175187
    2  30.446934  51.214317
    3  95.423791  86.417366
    4  83.931369  82.795884
    ------
          value1     value2  value1_Zn  value2_Zn
    0  87.320919  48.352809   0.910447  -0.206182
    1  26.031312   7.175187  -0.853275  -1.425002
    2  30.446934  51.214317  -0.726208  -0.121484
    3  95.423791  86.417366   1.143622   0.920495
    4  83.931369  82.795884   0.812906   0.813302
    5  42.323130  77.843953  -0.384448   0.666730
    6  92.152700   2.869294   1.049490  -1.552452
    7  15.126391  78.057041  -1.167085   0.673037
    8   7.050190  24.868290  -1.399492  -0.901302
    9  77.020849  93.592031   0.614043   1.132858
    标准化后value1的均值为:0.00, 标准差为:1.00
    # 案例应用
    # 八类产品的两个指标value1,value2,其中value1权重为0.6,value2权重为0.4
    # 通过0-1标准化,判断哪个产品综合指标状况最好
    
    df = pd.DataFrame({"value1":np.random.rand(10) * 30,
                      'value2':np.random.rand(10) * 100},
                     index = list('ABCDEFGHIJ'))
    #print(df.head())
    #print('------')
    # 创建数据"
    
    df_n1 = data_norm(df,'value1','value2')
    # 进行标准化处理
    
    df_n1['f'] = df_n1['value1_n'] * 0.6 + df_n1['value2_n'] * 0.4
    df_n1.sort_values(by = 'f',inplace=True,ascending=False)
    df_n1['f'].plot(kind = 'line', style = '--.k', alpha = 0.8, grid = True)
    df_n1
    # 查看综合指标状况

      输出:

  • 相关阅读:
    Discuz!NT 系统架构分析
    jquery pager
    Nhibernate分页方法
    Discuz nt模板机制
    WTclient创建OPC client方法
    OPC
    Regular Expressions in Java
    How to use VS to manipulate Access
    OPC客户端设计
    How to use VS to manipulate Excel使用MFC读写Excel
  • 原文地址:https://www.cnblogs.com/654321cc/p/9623648.html
Copyright © 2011-2022 走看看