MinMaxScaling:针对 pandas DataFrame 和 NumPy 数组的最小-最大缩放

一个用于对 pandas DataFrame 或 NumPy 数组进行最小-最大缩放的函数。

from mlxtend.preprocessing import MinMaxScaling

除了 Z-score 归一化(或标准化)之外,另一种方法是最小-最大缩放(通常也简单地称为“归一化”——这是引起歧义的常见原因)。这种方法将数据缩放到一个固定范围——通常是 0 到 1。与标准化相比,这种有界范围的代价是我们将得到更小的标准差,这可能会抑制异常值的影响。

最小-最大缩放通常通过以下公式完成

一类对尺度不敏感的算法包括基于树的学习算法。以一般的 CART 决策树算法为例。在不深入探讨信息增益和不纯度度量的情况下,我们可以将决策视为“特征 x_i >= 某个值?”直观地,我们可以看到这个特征的尺度(厘米、华氏度、标准化尺度——真的无关紧要)并不重要。

特征缩放重要的算法示例有

  • 使用欧氏距离度量的 k 近邻算法,如果希望所有特征贡献相等
  • k-均值(参见 k 近邻)
  • 逻辑回归、支持向量机(SVM)、感知机、神经网络等,如果您使用基于梯度下降/上升的优化方法,否则某些权重更新速度会比其他权重快得多
  • 线性判别分析、主成分分析、核主成分分析,因为您想找到最大化方差的方向(在这些方向/特征向量/主成分正交的约束下);您希望特征在同一尺度上,因为在“更大测量尺度”上的变量会被更加强调。

这里列出的情况远不止这些……我总是建议您思考算法及其作用,然后通常就很清楚是否需要对您的特征进行缩放了。

此外,我们还需要考虑是想“标准化”还是“归一化”(此处:缩放到 [0, 1] 范围)我们的数据。有些算法假定数据以 0 为中心。例如,如果我们初始化一个使用 tanh 激活单元的小型多层感知机,将其权重设为 0 或以零为中心的小随机值,我们希望“均匀地”更新模型权重。根据经验法则,我会说:如果拿不准,就标准化数据,这通常不会有坏处。

示例 1 - 缩放 Pandas DataFrame

import pandas as pd

s1 = pd.Series([1, 2, 3, 4, 5, 6], index=(range(6)))
s2 = pd.Series([10, 9, 8, 7, 6, 5], index=(range(6)))
df = pd.DataFrame(s1, columns=['s1'])
df['s2'] = s2
df
s1 s2
0 1 10
1 2 9
2 3 8
3 4 7
4 5 6
5 6 5
from mlxtend.preprocessing import minmax_scaling

minmax_scaling(df, columns=['s1', 's2'])
s1 s2
0 0.0 1.0
1 0.2 0.8
2 0.4 0.6
3 0.6 0.4
4 0.8 0.2
5 1.0 0.0

示例 2 - 缩放 NumPy 数组

import numpy as np

X = np.array([[1, 10], [2, 9], [3, 8], 
              [4, 7], [5, 6], [6, 5]])
X
array([[ 1, 10],
       [ 2,  9],
       [ 3,  8],
       [ 4,  7],
       [ 5,  6],
       [ 6,  5]])
from mlxtend.preprocessing import minmax_scaling

minmax_scaling(X, columns=[0, 1])
array([[0. , 1. ],
       [0.2, 0.8],
       [0.4, 0.6],
       [0.6, 0.4],
       [0.8, 0.2],
       [1. , 0. ]])

API

minmax_scaling(array, columns, min_val=0, max_val=1)

对 pandas DataFrame 进行最小-最大缩放。

参数

  • array : pandas DataFrame 或 NumPy ndarray,形状 = [n_rows, n_columns]。

  • columns : array-like 对象,形状 = [n_columns]

    类似数组的对象,包含列名,例如 ['col1', 'col2', ...] 或列索引 [0, 2, 4, ...]

  • min_val : intfloat,可选(默认值=0

    重新缩放后的最小值。

  • max_val : intfloat,可选(默认值=1

    重新缩放后的最大值。

返回值

  • df_new : pandas DataFrame 对象。

    数组或 DataFrame 的副本,其中包含重新缩放的列。

示例

有关使用示例,请参阅 https://mlxtend.cn/mlxtend/user_guide/preprocessing/minmax_scaling/