Значение атрибута min_ в MinMaxScaler в scikit learn - PullRequest
0 голосов
/ 15 февраля 2019

Из документации:

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_?

1 Ответ

0 голосов
/ 16 февраля 2019

Вы можете найти хорошее объяснение того, как MinMaxScaler работает на следующем сайте: http://benalexkeen.com/feature-scaling-with-scikit-learn/#Min-Max-Scaler

enter image description here

В 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.В вашем примере мы можем воспроизвести каждый шаг:

1-й: вычислить data_range:

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

2-й: вычислить 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_ и min_ для преобразования наших данных:

x *= self.scale_
x += self.min_
Добро пожаловать на сайт PullRequest, где вы можете задавать вопросы и получать ответы от других членов сообщества.
...