为什么我进入 Z1 2 列而不是 3 列以及如何使用 hotEncoder 修复它
why I get in Z1 2 columns instead of 3 and how to fix it using hotEncoder
我将 hotEncoder 用于具有 5 个值的列 给了我 5 列(对于 Z)。没关系
现在我有另一列有 3 个值,但我在 Z1 中有 2 列而不是 3 列
我需要在代码中做什么来修复我将在 Z1 中获得 3 列?
另外,我想要hotEncoder代码的解释。为什么我必须在这里使用 np.hstack?
非常感谢!!
X = df.iloc[:, :-1].values
Y = df.iloc[:, -1].values
labelencoder_X5 = LabelEncoder()
labelencoder_X6 = LabelEncoder()
X[:, 5] = labelencoder_X5.fit_transform(X[:, 5])
X[:, 6] = labelencoder_X6.fit_transform(X[:, 6])
onehotencoder = OneHotEncoder(sparse=False)
Z= onehotencoder.fit_transform(X[:, [5]])
X = np.hstack(( Z, X[:,:5] , X[:,6:])).astype('float')
#handling the dummy variable trap
X = X[:, 1:]
onehotencoder = OneHotEncoder(sparse=False)
Z1= onehotencoder.fit_transform(X[:, [6]])
X = np.hstack(( Z1, X[:,:6] , X[:,7:])).astype('float')
#handling the dummy variable trap
X = X[:, 1:]
您通过转换第 6 列得到 Z1
,但这不是原始数据的第 6 列。在前面的代码块中,在使用 hstack
.
重新定义 X
时,您将第 5(原始)列的虚拟变量放在第一位
但是,一些通用的评论是有序的。
- onehot-encoding前不需要label-encode;那是旧 sklearn 版本的产物。
- 您可以一次性使用一个
OneHotEncoder
和 fit_transform
两个分类列。
- 您可以使用参数
drop='first'
来“处理虚拟变量陷阱” OneHotEncoder
。
- 您可以使用
ColumnTransformer
来避免手动使用 hstack
。
也就是说,我建议改为:
tfmr = ColumnTransformer(
transformers=[('ohe', OneHotEncoder(drop='first', sparse=False), [5,6])],
remainder='passthrough'
)
X_preproc = tfmr.fit_transform(X)
我将 hotEncoder 用于具有 5 个值的列 给了我 5 列(对于 Z)。没关系 现在我有另一列有 3 个值,但我在 Z1 中有 2 列而不是 3 列 我需要在代码中做什么来修复我将在 Z1 中获得 3 列?
另外,我想要hotEncoder代码的解释。为什么我必须在这里使用 np.hstack? 非常感谢!!
X = df.iloc[:, :-1].values
Y = df.iloc[:, -1].values
labelencoder_X5 = LabelEncoder()
labelencoder_X6 = LabelEncoder()
X[:, 5] = labelencoder_X5.fit_transform(X[:, 5])
X[:, 6] = labelencoder_X6.fit_transform(X[:, 6])
onehotencoder = OneHotEncoder(sparse=False)
Z= onehotencoder.fit_transform(X[:, [5]])
X = np.hstack(( Z, X[:,:5] , X[:,6:])).astype('float')
#handling the dummy variable trap
X = X[:, 1:]
onehotencoder = OneHotEncoder(sparse=False)
Z1= onehotencoder.fit_transform(X[:, [6]])
X = np.hstack(( Z1, X[:,:6] , X[:,7:])).astype('float')
#handling the dummy variable trap
X = X[:, 1:]
您通过转换第 6 列得到 Z1
,但这不是原始数据的第 6 列。在前面的代码块中,在使用 hstack
.
X
时,您将第 5(原始)列的虚拟变量放在第一位
但是,一些通用的评论是有序的。
- onehot-encoding前不需要label-encode;那是旧 sklearn 版本的产物。
- 您可以一次性使用一个
OneHotEncoder
和fit_transform
两个分类列。 - 您可以使用参数
drop='first'
来“处理虚拟变量陷阱”OneHotEncoder
。 - 您可以使用
ColumnTransformer
来避免手动使用hstack
。
也就是说,我建议改为:
tfmr = ColumnTransformer(
transformers=[('ohe', OneHotEncoder(drop='first', sparse=False), [5,6])],
remainder='passthrough'
)
X_preproc = tfmr.fit_transform(X)