前往小程序,Get更优阅读体验!
立即前往
首页
学习
活动
专区
工具
TVP
发布
社区首页 >专栏 >Scaling与Normalization的区别

Scaling与Normalization的区别

作者头像
生信编程日常
发布2020-10-26 15:59:56
1.9K0
发布2020-10-26 15:59:56
举报
文章被收录于专栏:生物信息学、python、R、linux

scale与normalize,是我们在做前期数据处理的时候经常做的操作,但是它们经常会被混淆,现在网上的一些讨论也比较混乱。

代码语言:javascript
复制
import pandas as pd
import numpy as np

# for Box-Cox Transformation
from scipy import stats

# for min_max scaling
from mlxtend.preprocessing import minmax_scaling
from sklearn import preprocessing

# plotting modules
import seaborn as sns
import matplotlib.pyplot as plt

# set seed for reproducibility
np.random.seed(0)
1. Scaling

特征缩放,特点是不改变数据分布情况。比如min-max或者Z-score (主要有如下四种方法,详见:Feature_scaling).

Min-Max scale:

代码语言:javascript
复制
original_data = np.random.beta(5, 1, 1000) * 60

# mix-max scale the data between 0 and 1
scaled_data = minmax_scaling(original_data, columns=[0])
# 或者
scaled_data = preprocessing.minmax_scale(original_data)

# plot both together to compare
fig, ax = plt.subplots(1,2)
sns.distplot(original_data, ax=ax[0])
ax[0].set_title("Original Data")
sns.distplot(scaled_data, ax=ax[1])
ax[1].set_title("Scaled data")

Z-score:

代码语言:javascript
复制
s_scaler = preprocessing.StandardScaler(with_mean=True, with_std=True)
df_s = s_scaler.fit_transform(original_data.reshape(-1,1))

# plot both together to compare
fig, ax = plt.subplots(1,2)
sns.distplot(original_data, ax=ax[0])
ax[0].set_title("Original Data")
sns.distplot(df_s, ax=ax[1])
ax[1].set_title("Scaled data")
2. Normalization

Normalization则会改变数据的分布。比如Box-Cox转换,可以将数据转为正态分布。

代码语言:javascript
复制
# normalize the exponential data with boxcox
normalized_data = stats.boxcox(original_data)

# plot both together to compare
fig, ax=plt.subplots(1,2)
sns.distplot(original_data, ax=ax[0])
ax[0].set_title("Original Data")
sns.distplot(normalized_data[0], ax=ax[1])
ax[1].set_title("Normalized data")

换一个分布看一下:

代码语言:javascript
复制
original_data = np.random.exponential(size=1000)
# normalize the exponential data with boxcox
normalized_data = stats.boxcox(original_data)

# plot both together to compare
fig, ax=plt.subplots(1,2)
sns.distplot(original_data, ax=ax[0])
ax[0].set_title("Original Data")
sns.distplot(normalized_data[0], ax=ax[1])
ax[1].set_title("Normalized data")

参考:

  1. https://www.kaggle.com/alexisbcook/scaling-and-normalization
  2. https://link.zhihu.com/?target=https%3A//en.wikipedia.org/wiki/Feature_scaling
本文参与 腾讯云自媒体同步曝光计划,分享自作者个人站点/博客。
如有侵权请联系 cloudcommunity@tencent.com 删除

本文分享自 作者个人站点/博客 前往查看

如有侵权,请联系 cloudcommunity@tencent.com 删除。

本文参与 腾讯云自媒体同步曝光计划  ,欢迎热爱写作的你一起参与!

评论
登录后参与评论
0 条评论
热度
最新
推荐阅读
目录
  • 1. Scaling
  • 2. Normalization
领券
问题归档专栏文章快讯文章归档关键词归档开发者手册归档开发者手册 Section 归档