label_encoder
是一个列表,它在python中是一个有序集合,您可以使用它来存储任何类型的对象。它被错误地命名,它应该是label_encoders
,plurl。
我们首先创建一个空的:
label_encoders = []
然后,当我们遇到需要编码列
if item.isdigit():
# Don't need to endcode.
else:
# Do need to encode.
我们创建了一个新的preprocessing.LabelEncoder()
对象,并将其保存以备后用
label_encoders.append(preprocessing.LabelEncoder())
最后,我们使用最近创建的LabelEncoder
对象实际编码列
X_encoded[:, i] = label_encoders[-1].fit_transform(X[:, i])
我们需要存储新LabelEncoder
对象地方,因为我们几乎肯定会遇到在未来的测试集或新的生产数据,并且将需要编码数据就像我们编码我们的训练数据一样。
我可能会写这样的代码,这是稍微更清晰
label_encoders = []
X_encoded = np.empty(X.shape)
for i, item in enumerate(X[0]):
if item.isdigit():
X_encoded[:, i] = X[:, i]
else:
label_encoder = preprocessing.LabelEncoder()
X_encoded[:, i] = label_encoder.fit_transform(X[:, i])
label_encoders.append(label_encoder)
谢谢!我没有意识到preprocessing.LabelEncoder()返回一个列表。
它不!列表来自行
label_encoders = []
的preprocessing.LabelEncoder()
调用返回一个LabelEncoder
类型的对象。这实现了sklearn transformation interface,它允许您使用fit_transform
和transform
方法对您的要素进行编码。
它将'LabelEncoder'的一个实例添加到列表中;该实例适用于后续行。 (投票迁移。) –