当前位置:   article > 正文

Python数据预处理--数据归一化_numpy 数据预处理 特征归一化

numpy 数据预处理 特征归一化


介绍:数据的标准化(normalization)是将数据按比例缩放,使之落入一个小的特定区间。在某些比较和评价的指标处理中经常会用到,去除数据的单位限制,将其转化为无量纲的纯数值,便于不同单位或量级的指标能够进行比较和加权

最典型的就是数据的归一化处理,即将数据统一映射到[0,1]区间上

分类:0-1标准化 / Z-score标准化

0-1标准化

介绍:# 将数据的最大最小值记录下来,并通过Max-Min作为基数(即Min=0,Max=1)进行数据的归一化处理
计算方法:x = (x - Min) / (Max - Min)

引入库

import numpy as np
import pandas as pd
import matplotlib.pyplot as plt
%matplotlib inline
  • 1
  • 2
  • 3
  • 4

创建数据

df = pd.DataFrame({"value1":np.random.rand(10)*20,
                  'value2':np.random.rand(10)*100})
print(df.head())
  • 1
  • 2
  • 3

*


在这里插入图片描述

标准化数据

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())
  • 1
  • 2
  • 3
  • 4
  • 5
  • 6
  • 7
  • 8
  • 9
  • 10
  • 11

*

在这里插入图片描述

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())
  • 1
  • 2
  • 3

标准化数据

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))
  • 1
  • 2
  • 3
  • 4
  • 5
  • 6
  • 7
  • 8
  • 9
  • 10
  • 11
  • 12
  • 13
  • 14

*

在这里插入图片描述

常用场景

在分类、聚类算法中,需要使用距离来度量相似性的时候,Z-score表现更好

案例应用

案例介绍;八类产品的两个指标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())
  • 1
  • 2
  • 3
  • 4
  • 5

*

在这里插入图片描述

进行标准化处理

df_n1 = data_norm(df,'value1','value2')

  • 1
  • 2

*

在这里插入图片描述

查看综合指标状况

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
  • 1
  • 2
  • 3
  • 4

*

在这里插入图片描述

Python数据预处理

声明:本文内容由网友自发贡献,不代表【wpsshop博客】立场,版权归原作者所有,本站不承担相应法律责任。如您发现有侵权的内容,请联系我们。转载请注明出处:https://www.wpsshop.cn/w/Gausst松鼠会/article/detail/174499
推荐阅读
相关标签
  

闽ICP备14008679号