如何从非数字变量创建多项式特征?
How to create polynomial features from non-numeric variables?
我想创建一个多项式特征 (GarageGrade),通过乘法将车库质量 (GarageQual) 与车库条件 (GarageCond) 相结合。 GarageQual 和 GarageCond 的值以字符形式给出:Po(差)、Fa(一般)、TA(典型)、Gd(良好)、Ex(优秀)。
str(combi$GarageQual)
Return: chr [1:2919] "TA" "TA" "TA" "TA" "TA" "TA" "TA" "TA" "Fa" "Gd" "TA" ...
str(combi$GarageCond)
Return: chr [1:2919] "TA" "TA" "TA" "TA" "TA" "TA" "TA" "TA" "TA" "TA" "TA" ...
首先,我分解了它们:
combi$GarageQual <- factor(combi$GarageQual)
str(combi$GarageQual)
Return:因子 w/ 5 个级别 "Ex","Fa","Gd",..:5 5 5 5 5 5 5 5 2 3 ..
combi$GarageCond <- factor(combi$GarageCond)
str(combi$GarageCond)
Return: > 5 级因子 "Ex","Fa","Gd",..: 5 5 5 5 5 5 5 5 5 ...
现在我想替换因子水平名称的向量
c("NA", "Po", "Fa", "TA", "Gd", "Ex")
使用数值向量
c(0, 1, 2, 3, 4, 5)
因此可以将这些变量相乘以创建组合特征,如下所示:
combi$GarageGrade <- combi$GarageQual * combi$GarageCond
实现结合了 GarageQual 和 GarageCond 的综合 GarageGradevariable 的最终目标的最佳方法是什么?我是否应该在一开始就考虑到级别,或者我应该直接用数字替换字符?如果是这样,我该怎么做?
一种直接的方法是按正确的顺序创建五个评级的向量,然后使用 match
将评级转换为数字。
set.seed(22)
grades <- c( "Po", "Fa", "TA", "Gd", "Ex")
GarageQual <- sample(grades, 20, replace = TRUE)
GarageCond <- sample(grades, 20, replace = TRUE)
match(GarageQual, grades) * match(GarageCond, grades)
[1] 4 6 15 12 20 20 12 20 6 4 5 8 15 5 15 1 15 1 4 6
只要指定了因子水平,使它们的顺序正确,就可以使用与您上面概述的方法类似的方法(先转换为因子,然后再转换为数字)。
as.numeric(factor(GarageQual, levels = grades)) * as.numeric(factor(GarageCond, levels = grades))
[1] 4 6 15 12 20 20 12 20 6 4 5 8 15 5 15 1 15 1 4 6
我想创建一个多项式特征 (GarageGrade),通过乘法将车库质量 (GarageQual) 与车库条件 (GarageCond) 相结合。 GarageQual 和 GarageCond 的值以字符形式给出:Po(差)、Fa(一般)、TA(典型)、Gd(良好)、Ex(优秀)。
str(combi$GarageQual)
Return: chr [1:2919] "TA" "TA" "TA" "TA" "TA" "TA" "TA" "TA" "Fa" "Gd" "TA" ...
str(combi$GarageCond)
Return: chr [1:2919] "TA" "TA" "TA" "TA" "TA" "TA" "TA" "TA" "TA" "TA" "TA" ...
首先,我分解了它们:
combi$GarageQual <- factor(combi$GarageQual)
str(combi$GarageQual)
Return:因子 w/ 5 个级别 "Ex","Fa","Gd",..:5 5 5 5 5 5 5 5 2 3 ..
combi$GarageCond <- factor(combi$GarageCond)
str(combi$GarageCond)
Return: > 5 级因子 "Ex","Fa","Gd",..: 5 5 5 5 5 5 5 5 5 ...
现在我想替换因子水平名称的向量
c("NA", "Po", "Fa", "TA", "Gd", "Ex")
使用数值向量
c(0, 1, 2, 3, 4, 5)
因此可以将这些变量相乘以创建组合特征,如下所示:
combi$GarageGrade <- combi$GarageQual * combi$GarageCond
实现结合了 GarageQual 和 GarageCond 的综合 GarageGradevariable 的最终目标的最佳方法是什么?我是否应该在一开始就考虑到级别,或者我应该直接用数字替换字符?如果是这样,我该怎么做?
一种直接的方法是按正确的顺序创建五个评级的向量,然后使用 match
将评级转换为数字。
set.seed(22)
grades <- c( "Po", "Fa", "TA", "Gd", "Ex")
GarageQual <- sample(grades, 20, replace = TRUE)
GarageCond <- sample(grades, 20, replace = TRUE)
match(GarageQual, grades) * match(GarageCond, grades)
[1] 4 6 15 12 20 20 12 20 6 4 5 8 15 5 15 1 15 1 4 6
只要指定了因子水平,使它们的顺序正确,就可以使用与您上面概述的方法类似的方法(先转换为因子,然后再转换为数字)。
as.numeric(factor(GarageQual, levels = grades)) * as.numeric(factor(GarageCond, levels = grades))
[1] 4 6 15 12 20 20 12 20 6 4 5 8 15 5 15 1 15 1 4 6