SKLearn MinMaxScaler - 仅缩放特定列

Posted

技术标签:

【中文标题】SKLearn MinMaxScaler - 仅缩放特定列【英文标题】:SKLearn MinMaxScaler - scale specific columns only [duplicate] 【发布时间】:2017-10-05 15:57:22 【问题描述】:

我想使用 MinMaxScaler 缩放 Pandas 数据帧中的部分(但不是全部)列。我该怎么做?

【问题讨论】:

【参考方案1】:

演示:

In [90]: df = pd.DataFrame(np.random.randn(5, 3), index=list('abcde'), columns=list('xyz'))

In [91]: df
Out[91]:
          x         y         z
a -0.325882 -0.299432 -0.182373
b -0.833546 -0.472082  1.158938
c -0.328513 -0.664035  0.789414
d -0.031630 -1.040802 -1.553518
e  0.813328  0.076450  0.022122

In [92]: from sklearn.preprocessing import MinMaxScaler

In [93]: mms = MinMaxScaler()

In [94]: df[['x','z']] = mms.fit_transform(df[['x','z']])

In [95]: df
Out[95]:
          x         y         z
a  0.308259 -0.299432  0.505500
b  0.000000 -0.472082  1.000000
c  0.306662 -0.664035  0.863768
d  0.486932 -1.040802  0.000000
e  1.000000  0.076450  0.580891

同样的结果也可以使用sklearn.preprocessing.minmax_scale

from sklearn.preprocessing import minmax_scale

df[['x','z']] = minmax_scale(df[['x','z']])

【讨论】:

指出minmax_scale 适用于开箱即用的单个数据框列可能对某些人有所帮助,其中MinMaxScaler 似乎需要多个列。如果您只想扩展xdf['x'] = minmax_scale(df['x'])。如果您的缩放值不是浮动的,那么 df['x'] = minmax_scale(df['x'].astype(np.float64)),以避免 dtype 转换警告。【参考方案2】:

由于 sklearn >= 0.20,您可以使用 Column Transformer 完成此操作

standard_transformer = Pipeline(steps=[
        ('standard', StandardScaler())])

minmax_transformer = Pipeline(steps=[
        ('minmax', MinMaxScaler())])


preprocessor = ColumnTransformer(
        remainder='passthrough', #passthough features not listed
        transformers=[
            ('std', standard_transformer , ['z']),
            ('mm', minmax_transformer , ['x','y'])
        ])

【讨论】:

以上是关于SKLearn MinMaxScaler - 仅缩放特定列的主要内容,如果未能解决你的问题,请参考以下文章

Python,sklearn:使用 MinMaxScaler 和 SVC 的管道操作顺序

[转]sklearn中MinMaxScaler/StandardScaler的区别

为啥 sklearn MinMaxScaler() 返回超出范围的值而不是错误?

使用Sklearn的MinMaxScaler做最简单的归一化

如何在旧的 MinMaxScaler 上重新调整新数据库? [复制]

sklearn 中的 MinMax Scaler 不会标准化 0 到 1 之间的列值