Scikit-learn库中用于特征缩放的类MinMaxScaler用法详细介绍并举例说明

Scikit-learn库中用于特征缩放的类MinMaxScaler用法详细介绍并举例说明

目录

在机器学习训练时候,预处理是进行训练前的重要步骤。本文讲解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可以将预处理数据缩放到给定范围,适用于需要将数据缩放到特定范围的场景,尤其是在使用梯度下降法的优化算法中,对数据进行预处理。

相关推荐
AntBlack44 分钟前
Python 打包笔记 : 你别说 ,PyStand 确实简单易上手
后端·python·创业
Pocker_Spades_A1 小时前
Python刷题:Python基础
开发语言·python
xiangzhihong81 小时前
GitHub神秘组织3小时极速复刻Manus
人工智能·深度学习·机器学习
上官-王野2 小时前
大模型day01自然语言+大模型+环境
python·ai·conda
dowhileprogramming2 小时前
Flask 框架简介
python·flask
凡人的AI工具箱2 小时前
PyTorch深度学习框架60天进阶学习计划第14天:循环神经网络进阶
人工智能·pytorch·python·深度学习·学习·ai编程
开开心心就好3 小时前
电脑睡眠智能管控:定时、依状态灵活调整,多模式随心选
javascript·windows·python·安全·django·pdf·电脑
夜幕龙4 小时前
深度生成模型(五)——生成对抗网络 GAN
人工智能·深度学习·机器学习·生成对抗网络