Normalization sklearn



假设我有一个熊猫数据框,我只想借助此函数规范化某些属性,而不是整个数据框:

preprocessing.normalize

我想将这些规范化的列放置到我的数据框中。但我不能,因为它有不同的格式(numpy 数组)。

我已经看到了如何以其他方式进行规范化,例如我这样做:

s0 = X.iloc[:,13:15] 
X.iloc[:,13:15] = (s0 - s0.mean()) / (s0.max() - s0.min())
X.head()

但我真的需要使用sklearn来做到这一点。谢谢,堆栈!

您正在做的是最小-最大缩放。 scikit 中的"normalize"具有不同的含义,然后您想做什么。

试试MinMaxScaler。

大多数 sklearn 转换器只输出 numpy 数组。对于数据帧,只需将列重新分配给数据帧,如以下示例所示:

import pandas as pd
import numpy as np
df = pd.DataFrame(data=np.array([[1, 2, 3], [4, 5, 6], [7, 8, 9]]), columns=['A', 'B', 'C'])

现在假设您只想对 A 列和 C 进行最小-最大缩放:

from sklearn.preprocessing import MinMaxScaler
minmax = MinMaxScaler()
df[['A', 'C']] = minmax.fit_transform(df[['A', 'C']])
(s0 - s0.mean())/(s0.max() -

s0.min()) 被称为平均归一化,据我所知,Scikit-learn中没有转换器来执行这种转换。

MinMaxScaler 按照以下公式进行转换:(s0 - s0.min())/(s0.max()

- s0.min())

您可以使用scikit-learn对选定的变量进行此转换,如下所示:

肮脏的方式:

scaler = MinMaxScaler() # or any other scaler from sklearn
scaler.fit(X[[var1, var2, var20]])
X_transf[[var1, var2, var20]] = scaler.transform(X[[var1, var2, var20]])

使用ColumnTransfomer的更好方法:

features_numerical = [var1, var2, var20]
numeric_transformer = Pipeline(steps=[('scaler', StandardScaler())])
preprocessor = ColumnTransformer(
    transformers=[('numerical', numeric_transformer, features_numerical)], remainder='passthrough'}) # to keep all other features in the data set
preprocessor.fit_transform(X)

返回的变量是一个 numpy 数组,因此需要重新转换为 pandas 数据帧并添加变量名称。

有关如何使用来自 sklearn 的柱式变压器的更多信息,请点击此处。

您需要从 sklearn 导入 ColumnTransformer 和 Pipeline,以及选择的缩放器。

相关内容

  • 没有找到相关文章

最新更新