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
:int
或float
,可选(默认值=0
)重新缩放后的最小值。
-
max_val
:int
或float
,可选(默认值=1
)重新缩放后的最大值。
返回值
-
df_new
: pandas DataFrame 对象。数组或 DataFrame 的副本,其中包含重新缩放的列。
示例
有关使用示例,请参阅 https://mlxtend.cn/mlxtend/user_guide/preprocessing/minmax_scaling/