Есть ли способ масштабировать переменные с минимальным масштабированием в Python, чтобы избежать экстремальных значений 0 и 1?

#python #psychopy #economics #minmax

#python #psychopy #экономика #minmax

Вопрос:

Я работаю с психометрическими данными и на данный момент использую следующую функцию масштабирования:

 from sklearn.preprocessing import MinMaxScaler 
scaler = MinMaxScaler()
score= scaler.fit_transform(df['raw_score'])*10
  

Я намерен использовать это в опросе, чтобы возвращать оценки людям из 10, и я пытаюсь избежать экстремального значения 0 или 10 для выбросов / людей, имеющих минимальный или максимальный балл.

Например, вместо оценки 10 я бы предпочел, чтобы оценка была 9,8, поскольку просмотр оценки как 10 может быть неудобным с визуальной точки зрения. Я понимаю, что это влечет за собой включение уровня ошибки в подсчете очков, но я не думаю, что это было бы проблемой, поскольку возвращаемые оценки не слишком далеки от оригинала.

Я попытался с помощью следующего кода увеличить max / уменьшить min на 1%, чтобы скорректировать оценки:

 def rescale(score, minimum, maximum):
    if type(score) == pd.Series:
        score = score[0]
    else:
        score = score
        
    if score >= maximum:
        maximum = 1.1* score

    if score <= minimum:
        minimum = 0.9* score

    return ((score - minimum)/(maximum - minimum)) * 10
  

Мне было интересно, существует ли стандартный метод исключения экстремумов в Python?

Комментарии:

1. Как насчет простого умножения результата на 0.96 , а затем добавления 0.2 ? Это преобразует 0 в 0.2 , 10 в 9.8 , но сохраняет среднюю точку 5.0 at 5.0 . И вы можете легко отменить процесс для любого значения.

Ответ №1:

то, что вы ищете, называется CLAMP; рассмотрим clip() метод из numpy

 import numpy as np  
np.clip([0,2.35,6.4,8.0,8.9,9.999,10.0,10,10.1], 0.2, 9.8)