2

我有一个包含 5 个特征的数据集。其中两个特征非常相似,但没有相同的最小值和最大值。

... | feature 2 | feature 3 | ...
--------------------------------
..., 208.429993, 206.619995, ...
..., 207.779999, 205.050003, ...
..., 206.029999, 203.410004, ...
..., 204.429993, 202.600006, ...
..., 206.429993, 204.25, ...

feature 3总是小于feature 2,重要的是在缩放后保持这种状态。但是由于特征 2 和特征 3 没有完全相同的minmax值,因此在缩放之后,它们最终都会默认将 0 和 1 作为最小值和最大值。这将删除值之间的关系。事实上,缩放后,第一个样本变为:

 ... | feature 2 | feature 3 | ...
--------------------------------
 ...,  0.00268,   0.00279, ...

这是我不想要的。我似乎找不到手动更改的最小值和最大值的方法MinMaxScaler。还有其他丑陋的技巧,例如操纵数据并将特征 2 和特征 3 合二为一,以便之后再次进行缩放和拆分。但我想首先知道是否有由 处理的解决方案sklearn,例如对多个功能使用相同的最小值和最大值。

否则,最简单的解决方法就可以了。

4

1 回答 1

2

用一列安装缩放器并转换两者。尝试使用您发布的数据:

    feature_1   feature_2
0   208.429993  206.619995
1   207.779999  205.050003
2   206.029999  203.410004
3   204.429993  202.600006

from sklearn.preprocessing import MinMaxScaler
scaler = MinMaxScaler()
scaler.fit(df['feature_2'].values.reshape(-1,1))

scaler.transform(df)

array([[1.45024949, 1.        ],
       [1.288559  , 0.60945366],
       [0.85323442, 0.20149259],
       [0.45522189, 0.        ]])

如果您缩放超出用于适合缩放器的范围的数据,则缩放后的数据将超出 [0,1]。

避免它的唯一方法是单独缩放每一列。

这是否是一个问题取决于您想在缩放后对数据做什么。

于 2020-06-04T21:44:59.353 回答