现在我有一个2 x 2 numpy数组。通过使用RobustScaler,它可以一次对每一列进行标准化,而我希望一次对所有项目进行标准化。反正有这样做吗?
答案 0 :(得分:0)
从文档RobustScaler:
删除位数并根据分位数范围缩放数据
因此,您需要计算整个数组的中位数和分位数范围,为此,您可以使用np.median和np.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的功能(另请参见文档中的小节)。