Python版本:3.5
数学公式编辑器:MathType
标准分数
标准分数(Standard Score,又称z-score、z分数或标准化值),是将集合中的单个数与集合的均值相减的结果除以集合的标准差得到标准化的结果,该方法类似于正态分布的标准化转换,转换函数为:
另外还有以集合的均值作为基准的极差标准化方法,将集合中的单个数与集合的均值相减再除以极差即得到标准化的结果,标准化后的数据落在区间[-1,1],且均值为0,极差为1,转换函数为:
log函数标准化
通过以10为底数的log函数将原始值转换为其对数值,转换后的值区间并不在[0,1]之间,故还要除以最大值的对数,转换函数为:
Python实现标准化处理
使用pandas和numpy的库先创建5个数的随机数组,并存储在pandas的DataFrame数据结构里便于后期处理。
未标准化前的原始值创建好数组后先逐一计算数组的均值、最大值、最小值、标准差和最大值的对数,在这里先计算并放置于全局变量可以避免后面调用的时候重复计算,对大量数据而言能减少计算时间。编写标准化函数后将标准化的结果存到新的列中,标准化后的结果如下:
标准化后的结果源码如下:
import pandas as pd
import numpy as np
RANDOM_SEED = 100
np.random.seed(RANDOM_SEED) # # 设置随机种子,确保每次随机数一致
df = pd.DataFrame(np.random.randint(1, 100, 5), columns=['value']) # 创建5个数的数组
v_mean = df['value'].mean() # 均值
v_max = df['value'].max() # 最大值
v_min = df['value'].min() # 最小值
v_std = df['value'].std() # 标准差
v_log_max = np.log10(v_max) # 最大值的对数
df['z_score'] = df['value'].map(lambda x: (x - v_mean) / v_std) # z分数标准化
df['min_max'] = df['value'].map(lambda x: (x - v_min) / (v_max - v_min)) # 极差标准化,以最小值为基准
df['min_max_mean'] = df['value'].map(lambda x: (x - v_mean) / (v_max - v_min)) # 极差标准化,以均值为基准
df['log_max'] = df['value'].map(lambda x: np.log10(x) / v_log_max) # log函数标准化
网友评论