如何在所有列上使用RobustScaler?

时间:2018-09-25 14:45:10

标签: python numpy scikit-learn

现在我有一个2 x 2 numpy数组。通过使用RobustScaler,它可以一次对每一列进行标准化,而我希望一次对所有项目进行标准化。反正有这样做吗?

1 个答案:

答案 0 :(得分:0)

从文档RobustScaler

  

删除位数并根据分位数范围缩放数据

因此,您需要计算整个数组的中位数和分位数范围,为此,您可以使用np.mediannp.percentile函数,这是sklearn在后台执行的操作。代码:

import numpy as np
from sklearn.preprocessing import robust_scale

data = np.array([[3, 6],
                 [9, 12]], dtype=np.float64)
result = robust_scale(data, axis=0)
print(result)

reshape = data.reshape((1, 4))
result = robust_scale(reshape, axis=1)

me = np.median(data.flat) # 7.5
percentiles = np.percentile(data, (25.0, 75.0)) # 5.25 9.75

data -= me
data /= (percentiles[1] - percentiles[0])

print(data)

输出

[[-1. -1.]
 [ 1.  1.]]
[[-1.         -0.33333333]
 [ 0.33333333  1.        ]]

在示例中,我使用了(25.0, 75.0),因为这是分位数范围的默认值,功能robust_scale也等效于RobustScaler的功能(另请参见文档中的小节)。