2017-05-05 68 views
2

我很困惑,因为如果您首先执行OneHotEncoder,然后执行StandardScaler,那么将会出现问题,因为缩放器还将缩放之前由OneHotEncoder转换的列。有没有办法同时执行编码和缩放,然后将结果连接在一起?单热编码分类变量和连续尺度连续变量

+0

OneHotEncoder具有参数'categorical_features'指定的列进行编码。您可以使用[FeatureUnion](http://scikit-learn.org/stable/modules/generated/sklearn.pipeline.FeatureUnion.html)分别执行两项操作,然后将它们合并在一起。 –

回答

4

当然可以。只是分别缩放和一热编码的单独的列按需要:

# Import libraries and download example data 
from sklearn.preprocessing import StandardScaler, OneHotEncoder 

dataset = pd.read_csv("http://www.ats.ucla.edu/stat/data/binary.csv") 
print(dataset.head(5)) 

# Define which columns should be encoded vs scaled 
columns_to_encode = ['rank'] 
columns_to_scale = ['gre', 'gpa'] 

# Instantiate encoder/scaler 
scaler = StandardScaler() 
ohe = OneHotEncoder(sparse=False) 

# Scale and Encode Separate Columns 
scaled_columns = scaler.fit_transform(dataset[columns_to_scale]) 
encoded_columns = ohe.fit_transform(dataset[columns_to_encode]) 

# Concatenate (Column-Bind) Processed Columns Back Together 
processed_data = np.concatenate([scaled_columns, encoded_columns], axis=1) 
0

不能得到您的观点OneHotEncoder用于名义数据,而StandardScaler用于数字数据。所以你不应该把它们一起用于你的数据。

+0

请告诉我如何在标称数据(特别是** string **类型)上使用'OneHotEncoder'。与其他人一样,我需要这个功能。 –

+0

您可以先使用LabelEncoder,然后使用OneHotEncoder: 'import numpy as np winds = np.array([['SE'],['NW'],['NW'],['NE'], [ 'SE']]) 从sklearn.preprocessing进口sklearn.preprocessing进口LabelEncoder OneHotEncoder int_encoded = LabelEncoder()fit_transform(风[:。,0])重塑((LEN(风), - 1) ) one_hot_encoded = OneHotEncoder(稀疏=假).fit_transform(int_encoded) #收到此: 阵列([[0。,0,1], [0,1,0], [0.,1,0], [1,0,0,0], [0.,0.1]]) –