MinMaxScaling:适用于pandas数据框和NumPy数组的最小-最大缩放
一个用于对 pandas DataFrame 或 NumPy 数组进行最小-最大缩放的函数。
from mlxtend.preprocessing import MinMaxScaling
一种替代Z-score标准化(或标准化)的方法是所谓的最小-最大缩放(通常也被简单称为“归一化”——这通常会导致歧义)。 在这种方法中,数据被缩放到一个固定范围——通常是0到1。 与标准化相比,具有这个有限范围的代价是我们会得到较小的标准差,这可能会抑制异常值的影响。
最小-最大缩放通常通过以下公式进行:
$$X_{sc} = \frac{X - X_{min}}{X_{max} - X_{min}}.$$
一种不受尺度影响的算法家族包括基于树的学习算法。我们以一般的CART决策树算法为例。在不深入讨论信息增益和不纯度度量的情况下,我们可以将决策视为“特征x_i >= some_val吗?”直观上,我们可以看到这个特征的尺度(厘米、华氏度、标准化尺度)实际上并不重要。
一些特征缩放很重要的算法示例包括:
- 使用欧几里得距离度量的k近邻算法,如果希望所有特征贡献相等
- k均值(参见k近邻)
- 逻辑回归、支持向量机、感知机、神经网络等,如果您使用基于梯度下降/上升的优化,否则某些权重的更新速度会比其他权重快得多
- 线性判别分析、主成分分析、核主成分分析,因为您希望找到最大化方差的方向(在这些方向/特征向量/主成分是正交的约束下);您希望特征处于同一尺度,因为这将使“较大测量尺度”的变量得到更多强调。
还有很多情况我无法一一列举……我始终建议您考虑算法的工作原理,然后通常能很明显地判断我们是否需要对特征进行缩放。
此外,我们还希望考虑是“标准化”还是“归一化”(在这里指缩放到[0, 1]范围)我们的数据。一些算法假设我们的数据以0为中心。例如,如果我们将一个小型多层感知机的权重初始化为0或以0为中心的小随机值,我们希望同等更新模型权重。 作为一个经验法则,我会说:当有疑问时,标准化数据,这不会有害。
示例 1 - 缩放一个 Pandas 数据框
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)
Min max scaling of pandas' DataFrames.
Parameters
-
array
: pandas DataFrame or NumPy ndarray, shape = [n_rows, n_columns]. -
columns
: array-like, shape = [n_columns]Array-like with column names, e.g., ['col1', 'col2', ...] or column indices [0, 2, 4, ...]
-
min_val
:int
orfloat
, optional (default=0
)minimum value after rescaling.
-
max_val
:int
orfloat
, optional (default=1
)maximum value after rescaling.
Returns
-
df_new
: pandas DataFrame object.Copy of the array or DataFrame with rescaled columns.
Examples
For usage examples, please see https://rasbt.github.io/mlxtend/user_guide/preprocessing/minmax_scaling/