在机器学习中,我们经常想把分类变量转换成某种数字格式,以便于算法使用。
一种方法是通过标签编码,根据字母顺序为每个分类值分配一个整数值。
例如,下面的截图显示了如何将一个名为 "团队"的分类变量中的每个唯一值转换成一个基于字母顺序的整数值:

在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"