Scikit-learn库中用于特征缩放的类MinMaxScaler用法详细介绍并举例说明
目录
- Scikit-learn库中用于特征缩放的类MinMaxScaler用法详细介绍并举例说明
-
- 1.类MinMaxScaler介绍
-
- [1.1 转换公式](#1.1 转换公式)
-
- [(1) 核心转换公式](#(1) 核心转换公式)
- (2)转换公式举例
- [1.2 MinMaxScaler参数](#1.2 MinMaxScaler参数)
-
- [(1) feature_range : tuple (min, max), default=(0, 1)](#(1) feature_range : tuple (min, max), default=(0, 1))
- [(2) copy : bool, default=True](#(2) copy : bool, default=True)
- [(3) clip : bool, default=False](#(3) clip : bool, default=False)
- [1.3 MinMaxScaler属性](#1.3 MinMaxScaler属性)
- 2.类MinMaxScaler使用举例
-
- [2.1 举例代码](#2.1 举例代码)
- [2.2 运行结果](#2.2 运行结果)
- 3.总结
在机器学习训练时候,预处理是进行训练前的重要步骤。本文讲解python语言编程中预处理常用的类MinMaxScaler详细用法。
1.类MinMaxScaler介绍
MinMaxScaler作为 Scikit-learn 库中用于特征缩放的一个类,通过将特征值缩放到一个指定的最小值和最大值(通常是0到1之间)来实现数据标准化。
class MinMaxScaler(OneToOneFeatureMixin, TransformerMixin, BaseEstimator)
通过缩放将每个特征转换到一个指定范围。其估计器分别缩放和转换每个特征,使其在训练集给定范围内,比如在0到1之间。
1.1 转换公式
(1) 核心转换公式
转换由以下公式给出:
X s t d = X − X . m i n ( a x i s = 0 ) X . m a x ( a x i s = 0 ) − X . m i n ( a x i s = 0 ) X_{std} =\frac{ X - X. min(axis=0)}{ X. max(axis=0) - X. min(axis=0) } Xstd=X.max(axis=0)−X.min(axis=0)X−X.min(axis=0)
X s c a l e d = X s t d ∗ ( m a x − m i n ) + m i n X_{scaled} = X_{std} * (max - min) + min Xscaled=Xstd∗(max−min)+min
其中 m i n , m a x min, max min,max= feature_range, X X X表示任意一个特征向量, X . m i n ( a x i s = 0 ) X. min(axis=0) X.min(axis=0)表示特征向量 X X X中的最小值, X . m a x ( a x i s = 0 ) X. max(axis=0) X.max(axis=0)表示特征向量 X X X中的最大值。
这种变换通常被用作零均值、单位方差缩放的替代方案。
MinMaxScaler不会减少异常值的影响,但它会将它们线性地缩小到一个固定的范围内,其中出现的最大数据点对应于最大值,最小数据点对应着最小值。
(2)转换公式举例
比如,求解X=[5,10,20,40,80 ],转换到0到1之间。将
X = [ 5 10 20 40 80 ] X=\begin{bmatrix} 5 & 10 & 20 & 40 & 80 \end{bmatrix} X=[510204080]带入上面公式。
根据上面公式有:
X s t d = X − X . m i n ( a x i s = 0 ) X . m a x ( a x i s = 0 ) − X . m i n ( a x i s = 0 ) = X − 5 80 − 5 X_{std} =\frac{ X - X.min(axis=0)}{ X. max(axis=0) - X.min(axis=0) } =\frac{ X - 5}{ 80 - 5 } Xstd=X.max(axis=0)−X.min(axis=0)X−X.min(axis=0)=80−5X−5
X s c a l e d = X s t d ∗ ( 1 − 0 ) + 0 = X s t d = X − 5 80 − 5 X_{scaled} = X_{std} * (1 - 0) + 0= X_{std} =\frac{ X - 5}{ 80 - 5 } Xscaled=Xstd∗(1−0)+0=Xstd=80−5X−5
因此可得转换后数据为
X s c a l e d = 1 75 [ 0 5 15 35 75 ] = 1 15 [ 0 1 3 7 15 ] X_{scaled} =\frac{1}{ 75}\begin{bmatrix} 0 &5 &15 &35 &75 \end{bmatrix}=\frac{1}{15}\begin{bmatrix} 0 &1 &3 &7 &15 \end{bmatrix} Xscaled=751[05153575]=151[013715]
1.2 MinMaxScaler参数
(1) feature_range : tuple (min, max), default=(0, 1)
表示被转换数据的期望范围。
(2) copy : bool, default=True
设置为False以执行就地行规范化并避免复制(如果输入已经是numpy数组)。
(3) clip : bool, default=False
设置为True,将保留数据的转换值剪切到提供的feature range
"(特征范围)。
1.3 MinMaxScaler属性
min_ : 是一个 (n_features,) 形状的ndarray。表示每个特征的最小调整。相当于min - X. min(axis=0) * self. scale_
。其中X表示任意一特征向量,X.min表示特征X中的最小值,min表示 feature_range中的下边界min.
scale_ : 是一个(n_features,)形状的 ndarray,数据的每个特征相对缩放。相当于 (max - min) / (X. max(axis=0) - X. min(axis=0))
data_min_ :是一个 (n_features,)形状的 ndarray,表示数据中每个特征的最小值。
data_max_ : 是一个(n_features,)形状的 ndarray,表示数据中每个特征的最大值。
data_range_ : 是一个(n_features,)形状的 ndarray,表示数据中每个特征的范围(data_max_ - data_min_)
n_features_in_ : 是一个int类型,表示特征数量。
n_samples_seen_ : 是一个int类型,表示估计器处理的样本数量。它将在新的调用到fit时重置,但会在"partial_fit"调用之间递增。
feature_names_in_ : 是形状(n_features_in_
,) 的ndarray。在term:fit
中所见的特征的名称。仅当"X"的特征名称都是字符串时才定义。
2.类MinMaxScaler使用举例
2.1 举例代码
python
from sklearn.preprocessing import MinMaxScaler
import numpy as np
# 1.设置数据
my_data = np.array([[1, 40, 5], [2, 50, 10], [3, 60,20],[4,70,40],[5,80,80]])
# 2.创建MinMaxScaler对象,按照列转换到(0,1)
scaler = MinMaxScaler(feature_range=(0,1))
# 3.转换数据
#3.1 转换
scaled_data = scaler.fit_transform(my_data)
# 3.2 查看相关属性
print("\n数据的特征数量:", scaler.n_features_in_)
print("每个特征的样本数量:", scaler.n_samples_seen_)
print("\n数据的每个特征最小值:", scaler.data_min_)
print("数据的每个特征最大值:", scaler.data_max_)
print("每个特征的范围:", scaler.data_range_)
print("\n数据的每个特征相对调整比例:", scaler.scale_)
print("每个特征相对于最小值的调整:", scaler.min_)
# 3.3 查看数据转换前后
print("\n原始数据:")
print(my_data)
print("\n缩放后的数据:")
print(scaled_data)
# 4.将缩放后的数据转换回原始数据
original_data = scaler.inverse_transform(scaled_data)
print("\n还原后的数据:")
print(original_data)
2.2 运行结果
(1)打印查看属性值

(2)转换前后数据值

(3)还原后的数据

3.总结
本文详细讲述了类MinMaxScaler的计算公式和使用用法等。类MinMaxScaler可以将预处理数据缩放到给定范围,适用于需要将数据缩放到特定范围的场景,尤其是在使用梯度下降法的优化算法中,对数据进行预处理。