首页 > 解决方案 > scikit learn中MinMaxScaler中属性min_的含义

问题描述

从文档:

sklearn.preprocessing.MinMaxScaler.min_ : ndarray, shape (n_features,) 每个特征调整为最小值。

我不明白这意味着什么,也无法在其他地方找到更好的解释。

from sklearn import preprocessing
import numpy as np

x_test = np.array([[ 1., -1.,  2.],
                   [ 2.,  0.,  0.],
                   [ 0.,  1., -1.]])

scaler = preprocessing.MinMaxScaler().fit(x_test)

print(scaler.min_)

输出:

[0.         0.5        0.33333333]

所以它不仅仅是数据中观察到的最小值(实际上是data_min_)。这个 min_ 属性代表什么?

标签: scikit-learnattributes

解决方案


MinMaxScaler您可以在以下站点上找到一个很好的解释:http: //benalexkeen.com/feature-scaling-with-scikit-learn/#Min-Max-Scaler

在此处输入图像描述

在 scikit-learn 中,您可以:

import numpy as np
from sklearn import preprocessing

x = np.array([[1., -1.,  2.],
              [2.,  0.,  0.],
              [0.,  1., -1.]])

print(x)
# [[ 1. -1.  2.]
#  [ 2.  0.  0.]
#  [ 0.  1. -1.]]

scaler = preprocessing.MinMaxScaler().fit(x)
x_transformed = scaler.transform(x)

print(x_transformed)
# [[0.5        0.         1.        ]
#  [1.         0.5        0.33333333]
#  [0.         1.         0.        ]]

的拟合实例MinMaxScaler在内部保存方法:

# [[ 1. -1.  2.]
#  [ 2.  0.  0.]
#  [ 0.  1. -1.]]

print(scaler.data_min_)
#  [ 0. -1. -1.]

print(scaler.data_max_)
#  [ 2.  1.  2.]

或者,您可以计算和缩放每个值numpy

x_plain_np = np.apply_along_axis(lambda col: (col- np.min(col)) / (np.max(col) - np.min(col)), 0, x)

print(x_plain_np)
# [[0.5        0.         1.        ]
#  [1.         0.5        0.33333333]
#  [0.         1.         0.        ]]

这是所有关于self.min_

data_range = data_max - data_min
self.scale_ = ((feature_range[1] - feature_range[0]) /
               _handle_zeros_in_scale(data_range))
self.min_ = feature_range[0] - data_min * self.scale_

(0, 1)是 的默认值feature_range。在您的示例中,我们可以重现每个步骤:

第一:计算data_range

data_range = scaler.data_max_ - scaler.data_min_
print(data_range)  # [2. 2. 3.]

第二:计算scale_

scale_ = ((scaler.feature_range[1] - scaler.feature_range[0]) / # 1 - 0
          preprocessing.data._handle_zeros_in_scale(data_range))  # we have no zeros
print(scale_)  # [0.5        0.5        0.33333333]

第三:计算min_

min_ = scaler.feature_range[0] - scaler.data_min_ * scale_
print(min_)  # [0.         0.5        0.33333333]

我们的结果与内部结果相匹配:

print(min_)         # [0.         0.5        0.33333333]
print(scaler.min_)  # [0.         0.5        0.33333333]

最后我们可以使用scale_andmin_来转换我们的数据:

x *= self.scale_
x += self.min_

推荐阅读