机器学习中的 Label Encoder和One Hot Encoder
如果您是机器学习的新手,您可能会对这两者感到困惑 - Label Encoder和One Hot Encoder。这两个编码器是Python中SciKit Learn库的一部分,它们用于将分类数据或文本数据转换为数字,我们的预测模型可以更好地理解这些数字。今天,让我们通过一个简单的例子来理解两者之间的区别。
标签编码(Label Encoder)
现在,让我们考虑以下数据:
在本例中,第一列是country列,它都是文本。你可能已经知道,如果我们要在数据上运行任何类型的模型,我们就不能在数据中包含文本。在运行模型之前,我们需要为模型准备这些数据。
为了将这类分类文本数据转换为模型可理解的数值数据,我们使用标签编码器类。所以我们要做的,标签编码第一列,就是从sklearn库导入LabelEncoder类,对数据的第一列进行拟合和转换,然后用新的编码数据替换现有的文本数据。让我们看一下Python代码
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)。
独热编码(One Hot Encoder)
现在,正如我们已经讨论过的,根据我们所拥有的数据,我们可能会遇到一些情况,在标签编码之后,我们可能会混淆我们的模型,认为一个列有某种顺序或层次的数据,而我们显然没有。为了避免这种情况,我们对该列进行了“OneHotEncode”。
One Hot Encoder所做的是,它取一个具有分类数据的列,该列已经被标签编码,然后将该列分割为多个列。数字被1和0替换,这取决于哪个列有什么值。在我们的示例中,我们将得到三个新列,每个国家一个——法国、德国和西班牙。
对于第一个列值为法国的行,“France”列将有一个“1”,另外两个列将有“0”。类似地,对于第一个列值为Germany的行,' Germany '列将有' 1 ',其他两列将有' 0 '。
一个热编码的Python代码也非常简单:
from sklearn.preprocessing import OneHotEncoder
onehotencoder = OneHotEncoder(categorical_features = [0])
x = onehotencoder.fit_transform(x).toarray()
正如您在构造函数中看到的,我们指定哪个列必须是一个热编码,在这种情况下为[0]。然后我们用我们刚刚创建的onehotencoder对象拟合并转换数组'x'。就是这样,我们现在在数据集中有三个新列:
如您所见,我们有三个新的列,分别为1和0,具体取决于行所代表的国家/地区。