关于机器学习:机器学习-Label-vs-One-Hot-Encoder

39次阅读

共计 1437 个字符,预计需要花费 4 分钟才能阅读完成。

如果您是机器学习的老手,您可能会对这两者感到困惑——Label 编码器和 One-Hot 编码器。这两个编码器是 Python 中 SciKit Learn 库的一部分,它们用于将分类数据或文本数据转换为数字,咱们的预测模型能够更好地了解这些数字。明天,本文通过一个简略的例子来理解一下两者的区别。

1. Label Encoding

首先,您能够在此处找到 Label Encoder 的 SciKit Learn 文档。当初,让咱们思考以下数据:

在本例中,第一列是国家列,全是文本。正如您当初可能晓得的那样,如果咱们要在数据上运行任何类型的模型,咱们就不能在数据中蕴含文本。因而,在咱们运行模型之前,咱们须要为模型筹备好这些数据。

为了将这种分类文本数据转换为模型可了解的数值数据,咱们应用了标签编码器类。因而,要对第一列进行标签编码,咱们所要做的就是从 sklearn 库中导入 LabelEncoder 类,拟合并转换数据的第一列,而后用新的编码数据替换现有的文本数据。让咱们看一下代码。

from sklearn.preprocessing import LabelEncoder
labelencoder = LabelEncoder()
x[:, 0] = labelencoder.fit_transform(x[:, 0])

咱们假如数据在一个名为“x”的变量中。运行这段代码后,如果您查看 x 的值,您会看到第一列中的三个国家已被数字 0、1 和 2 替换。

这就是标签编码的全部内容。然而依据数据,标签编码引入了一个新问题。例如,咱们将一组国家名称编码为数字数据。这实际上是分类数据,行之间没有任何关系。

这里的问题是,因为同一列中有不同的数字,模型会误会数据的某种程序,0 < 1 < 2。但事实并非如此。为了克服这个问题,咱们应用 One Hot Encoder。

2. One Hot Encoder

当初,正如咱们曾经探讨过的,依据咱们领有的数据,咱们可能会遇到这样的状况:在标签编码之后,咱们可能会混同咱们的模型,认为列中的数据具备某种程序或层次结构,而实际上咱们显然不这样做没有它。为防止这种状况,咱们对该列进行“OneHotEncode”。

One Hot Encoder 的作用是,它须要一个具备分类数据的列,该列曾经过标签编码,而后将该列拆分为多个列。这些数字将替换为 1 和 0,具体取决于哪一列具备什么值。在咱们的示例中,咱们将取得三个新列,每个国家一列 – 法国、德国和西班牙。

对于第一列值为法国的行,“法国”列将为“1”,其余两列将为“0”。同样,对于第一列值为 Germany 的行,“Germany”列的值为“1”,其余两列的值为“0”。

One Hot Encoder 的 Python 代码也非常简单:

from sklearn.preprocessing import OneHotEncoder
onehotencoder = OneHotEncoder(categorical_features = [0])
x = onehotencoder.fit_transform(x).toarray()

正如您在构造函数中看到的,咱们指定哪一列必须进行 One Hot Encoder,在本例中为 [0]。而后咱们用咱们刚刚创立的 one hot encoder 对象拟合和转换数组“x”。就是这样,咱们的数据集中当初有了三个新列:

如您所见,咱们有三个新列,别离为 1 和 0,具体取决于行代表的国家 / 地区。

这就是 Label Encoding 和 One Hot Encoding 之间的区别。

本文由 mdnice 多平台公布

正文完
 0