如何在R中进行标签编码(有例子)

507 阅读1分钟

在机器学习中,我们经常想把分类变量转换成某种数字格式,以便于算法使用。

一种方法是通过标签编码,根据字母顺序为每个分类值分配一个整数值。

例如,下面的截图显示了如何将一个名为 "团队"的分类变量中的每个唯一值转换成一个基于字母顺序的整数值:

在R中,有两种常见的方法来执行标签编码。

方法1:使用Base R

df$my_var <- as.numeric(factor(df$my_var))

方法2:使用CatEncoders包

library(CatEncoders)

#define original categorical labels
labs = LabelEncoder.fit(df$my_var)

#convert labels to numeric values
df$team = transform(labs, df$my_var)

下面的例子展示了如何在实践中使用每种方法。

例1:使用Base R进行标签编码

下面的代码显示了如何使用base R的factor()函数将一个叫做team的分类变量转换为一个数字变量:

#create data frame
df <- data.frame(team=c('A', 'A', 'B', 'B', 'B', 'B', 'C', 'C'),
                 points=c(25, 12, 15, 14, 19, 23, 25, 29))

#view data frame
df

  team points
1    A     25
2    A     12
3    B     15
4    B     14
5    B     19
6    B     23
7    C     25
8    C     29

#perform label encoding on team variable
df$team <- as.numeric(factor(df$team))

#view updated data frame
df

  team points
1    1     25
2    1     12
3    2     15
4    2     14
5    2     19
6    2     23
7    3     25
8    3     29

请注意团队列中的新值:

  • "A "已经变成了1
  • "B "变成了2
  • "C "变成了3

我们已经成功地将团队列从分类变量转换为数字变量。

例2:使用CatEncoders包进行标签编码

下面的代码显示了如何使用CatEncoders()包中的函数来将一个叫做team的分类变量转换为数字变量:

library(CatEncoders)

#create data frame
df <- data.frame(team=c('A', 'A', 'B', 'B', 'B', 'B', 'C', 'C'),
                 points=c(25, 12, 15, 14, 19, 23, 25, 29))

#define original categorical labels
labs = LabelEncoder.fit(df$team)

#convert labels to numeric values
df$team = transform(labs, df$team)

#view updated data frame
df

  team points
1    1     25
2    1     12
3    2     15
4    2     14
5    2     19
6    2     23
7    3     25
8    3     29

再一次,我们在团队列中生成了以下新的值:

  • "A "变成了1
  • "B "变成了2
  • "C "变成了3

这与前一个例子的结果一致。

请注意,使用这种方法,你也可以使用inverse.transform()来获得团队列中的原始值:

#display original team labels
inverse.transform(labs, df$team)

[1] "A" "A" "B" "B" "B" "B" "C" "C"