Python 规范化学习

Python 规范化学习,python,python-3.x,pandas,scikit-learn,normalization,Python,Python 3.x,Pandas,Scikit Learn,Normalization,假设我有一个pandas数据帧,我只想标准化一些属性,但不想借助此函数规范化整个数据帧: preprocessing.normalize 我想把这些规范化的列放入我的数据帧中,但我不能,因为它有不同的格式(numpy数组) 我已经看到了如何以其他方式进行规范化,例如,我喜欢这样: s0 = X.iloc[:,13:15] X.iloc[:,13:15] = (s0 - s0.mean()) / (s0.max() - s0.min()) X.head() 但我真的需要用sklearn来做。

假设我有一个pandas数据帧,我只想标准化一些属性,但不想借助此函数规范化整个数据帧:

preprocessing.normalize
我想把这些规范化的列放入我的数据帧中,但我不能,因为它有不同的格式(numpy数组)

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

s0 = X.iloc[:,13:15] 
X.iloc[:,13:15] = (s0 - s0.mean()) / (s0.max() - s0.min())
X.head()
但我真的需要用sklearn来做。
谢谢,斯塔克

您所做的是最小-最大缩放<代码>“规范化”在scikit中的含义与您想要做的不同

试试看

大多数sklearn变压器仅输出numpy阵列。对于dataframe,只需将列重新分配给dataframe,如下例所示:

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']])

您所做的是最小-最大缩放<代码>“规范化”在scikit中的含义与您想要做的不同

试试看

大多数sklearn变压器仅输出numpy阵列。对于dataframe,只需将列重新分配给dataframe,如下例所示:

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中没有转换器可以学习执行此转换

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

您可以使用scikit学习对所选变量执行以下转换:

肮脏的方式:

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]])
使用ColumnTransformer的更好方法:

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数组,因此需要重新转换到dataframe中并添加变量名

有关如何使用sklearn中列转换器的更多信息

您需要从sklearn导入ColumnTransformer和管道,以及所选的定标器。

(s0-s0.mean())/(s0.max()-s0.min())被称为均值归一化,据我所知,Scikit learn中没有转换器来执行此转换

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

您可以使用scikit学习对所选变量执行以下转换:

肮脏的方式:

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]])
使用ColumnTransformer的更好方法:

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数组,因此需要重新转换到dataframe中并添加变量名

有关如何使用sklearn中列转换器的更多信息


您需要从sklearn导入ColumnTransformer和管道,以及所选的定标器。

您的意思是
s0-s0.min()
还是
s0-s0.mean()
?前者是最小/最大刻度,后者是什么?你是指
s0-s0.min()
还是
s0-s0.mean()
?前者是最小/最大刻度,后者是什么?