有没有一种方法可以在Python中使用MinMax缩放来缩放变量,以避免极端值0和1?

问题描述

我正在使用心理数据,目前正在使用以下缩放功能

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

我打算在调查中使用它来将分数返回给10分以内的人,并试图避免将离群值/具有最低或最高分数的人的极端得分设为0或10。

例如,我希望分数为9.8,而不是10,因为从视觉角度看分数为10可能会令人不舒服。我知道这需要在评分中加入一定程度的错误,但是我认为这不是返回分数与原始分数相差不大的问题。

我尝试使用以下代码将最高/最低降低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中的极端现象的标准方法

解决方法

你要找的是CLAMP;考虑 numpy 的 clip() 方法

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)