python数据归一化_python 数据归一化/标准化

本文介绍了Python中两种常见的数据预处理方法——0-1标准化和Z-score标准化。0-1标准化将数据映射到[0,1]区间,Z-score标准化使数据服从均值为0、标准差为1的标准正态分布。这两种方法常用于距离度量和分类聚类算法中,以消除数据单位和量级的影响。示例代码展示了如何实现这两个过程,并通过案例说明了它们的应用。" 112010094,10542806,使用PICKit3编程pic12f1823单片机,"['pic12f1823单片机入门', '单片机编程', '嵌入式硬件']
摘要由CSDN通过智能技术生成

#数据的标准化(normalization)是将数据按比例缩放,使之落入一个小的特定区间。

# 在某些比较和评价的指标处理中经常会用到,去除数据的单位限制,将其转化为无量纲的纯数值,便于不同单位或量级的指标能够进行比较和加权

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

# (1)0-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())

# 数据标准化

# (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()

# 标准化数据

# 经过处理的数据符合标准正态分布,即均值为0,标准差为1

print(df_z)

print('标准化后value1的均值为:%.2f, 标准差为:%.2f' % (u_z, std_z))

# 什么情况用Z-score标准化:

# 在分类、聚类算法中,需要使用距离来度量相似性的时候,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())

#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

# 查看综合指标状况

image.png

评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值