Пользовательский биннинг в sklearn.preprocessing? - PullRequest
2 голосов
/ 06 октября 2019

У меня есть список непрерывных переменных с именем size_array. Я масштабировал их от [0, 1] следующим образом:

max_abs_scaler = preprocessing.MinMaxScaler()
scaled = max_abs_scaler.fit_transform(size_array)

Есть ли способ масштабировать их в диапазоне [-1, 1], где медиана (или процентиль) равна 0? Мои данные искажены вправо, поэтому значения выше медианы сильно разбросаны, а значения слева от медианы не разбросаны. Я попытался масштабировать их следующим способом:

def using_median():
    if x >= median:
        return (x - median)/(max - median)
    else:
        return (median - x)/(median - min)

Но это не сработало. Есть ли другой способ сделать это с sklearn.preprocessing?

1 Ответ

1 голос
/ 06 октября 2019

Я бы рекомендовал использовать PowerTransformer () . Это может очень хорошо работать для искаженных дистрибутивов.

посмотрите этот пример:

from sklearn import preprocessing
import matplotlib.pyplot as plt
import numpy as np

pt = preprocessing.PowerTransformer()
X_lognormal = np.random.RandomState(616)\
    .lognormal(size=(300, 2))

_,ax = plt.subplots(1,2,sharey=True)
ax[0].hist(X_lognormal)

ax[1].hist(pt.fit_transform(X_lognormal))

enter image description here

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