前往小程序,Get更优阅读体验!
立即前往
首页
学习
活动
专区
工具
TVP
发布
社区首页 >专栏 >用 Python 做归一化与标准化

用 Python 做归一化与标准化

作者头像
生信菜鸟团
发布2021-05-24 10:28:46
10.4K0
发布2021-05-24 10:28:46
举报
文章被收录于专栏:生信菜鸟团生信菜鸟团

1 归一化

对原始数据缩放到 0-1 之间,是线性变换。也叫最大最小标准化,离散标准化。

区间也可以设置为其他,一般为 0 - 1。

1、公式:

min 为数据最小值,max 为数据最大值,x 为原始数据值,X 为归一化后的值。

2、特点

虽然归一化可以保留原始数据中存在的关系,但是计算用到的最大值与最小值非常容易受异常点影响,所以只适合精确小数据量。

3、实现

方法一:

使用 sklearn 包来实现归一化:

代码语言:javascript
复制
  from sklearn.preprocessing import MinMaxScaler
  preprocess = MinMaxScaler()
  raw_data = [[10, 10, 100, 1000],
              [5, 1, 21, 5],
              [1, 2, 15, 1]]
  data = preprocess.fit_transform(raw_data)

会输出 array 数据格式,可以看到最后一列中的 1000 由于数据值太大,导致 5 相对其来说只能得到 0.004,在实际数据中,如果 1000 为噪声数据就会极大的影响最终的分析结果。当然,如果数据准确且数据较少的情况下,推荐使用该方法。

代码语言:javascript
复制
  Out[3]: 
  array([[1.        , 1.        , 1.        , 1.        ],
         [0.44444444, 0.        , 0.07058824, 0.004004  ],
         [0.        , 0.11111111, 0.        , 0.        ]])

方法二:

使用 pandas 包

代码语言:javascript
复制
  import pandas as pd
  df = pd.DataFrame([[10, 10, 100, 1000],
              [5, 1, 21, 5],
              [1, 2, 15, 1]])
  df1 = df.apply(lambda x: (x - np.min(x)) / (np.max(x) - np.min(x)))
  # 方法二:
  df2 = (df - df.min()) / (df.max() - df.min())

输出,与 sklearn 结果一致,格式为 dataframe

代码语言:javascript
复制
            0         1         2         3
  0  1.000000  1.000000  1.000000  1.000000
  1  0.444444  0.000000  0.070588  0.004004
  2  0.000000  0.111111  0.000000  0.000000

方法三:

代码语言:javascript
复制
  import pandas as pd
  df = pd.DataFrame([[10, 10, 100, 1000],
              [5, 1, 21, 5],
              [1, 2, 15, 1]])
  df1 = df.apply(lambda x: (x - np.min(x)) / (np.max(x) - np.min(x)))
  # 方法二:
  df2 = (df - df.min()) / (df.max() - df.min())

输出,与 sklearn 结果一致,格式为 dataframe

代码语言:javascript
复制
            0         1         2         3
  0  1.000000  1.000000  1.000000  1.000000
  1  0.444444  0.000000  0.070588  0.004004
  2  0.000000  0.111111  0.000000  0.000000

2 标准化

标准化方法很多,今天先介绍使用最多的 z-score 标准化。

这种方法是将原始数据变换到均值为 0,方差为 1 的范围内。

1、公式
2、特点

对于大数据样本量,如果出现异常点,少量异常点对于平均值影响小,方差也小,对最终结果影响不大。因此,该方法适合样本量大,数据噪点多的数据集

3、实现
代码语言:javascript
复制
  from sklearn.preprocessing import StandardScaler
  preprocess = StandardScaler()
  raw_data = [[10, 10, 100, 1000],
              [5, 1, 21, 5],
              [1, 2, 15, 1]]
  data = preprocess.fit_transform(raw_data)
  data.mean_
  data.std_
  # 标准差
  df.std()

输出

代码语言:javascript
复制
  array([[ 1.26750044,  1.40693001,  1.41138272,  1.41420503],
         [-0.09053575, -0.82760589, -0.62823743, -0.70284713],
         [-1.1769647 , -0.57932412, -0.78314529, -0.71135789]])

本文参与 腾讯云自媒体分享计划,分享自微信公众号。
原始发表:2021-05-12,如有侵权请联系 cloudcommunity@tencent.com 删除

本文分享自 生信菜鸟团 微信公众号,前往查看

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

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

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