需要Scikit代码说明

时间:2017-02-13 00:38:05

标签: scikit-learn

机器学习/ Python Noob在这里。有人可以向我解释下面的代码吗?我不明白以下行是如何运作的。

# This line in the code below, what does it do?
label_encoder.append(preprocessing.LabelEncoder())

label_encoder = []
X_encoded = np.empty(X.shape)
for i,item in enumerate(X[0]):
    if item.isdigit():
        X_encoded[:, i] = X[:, i]
    else:
        label_encoder.append(preprocessing.LabelEncoder())
        X_encoded[:, i] = label_encoder[-1].fit_transform(X[:, i])

谢谢!

1 个答案:

答案 0 :(得分:3)

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_transformtransform方法对功能进行编码。