首页 > 解决方案 > 如何在所有列上使用 RobustScaler?

问题描述

现在我有一个 2 x 2 numpy 数组。通过使用 RobustScaler,它一次规范化每一列,而我希望一次规范化所有内容。有没有办法做到这一点?

标签: pythonnumpyscikit-learn

解决方案


从文档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 的功能(参见文档中的另请参阅部分)。


推荐阅读