【问题标题】:How to create polynomial features from non-numeric variables?如何从非数字变量创建多项式特征?
【发布时间】:2018-11-30 21:08:44
【问题描述】:

我想创建一个多项式特征 (GarageGrade),它通过乘法将车库质量 (GarageQual) 与车库条件 (GarageCond) 结合起来。 GarageQual 和 GarageCond 的值以字符形式给出:Po(差)、Fa(一般)、TA(典型)、Gd(良好)、Ex(优秀)。

str(combi$GarageQual)

返回:chr [1:2919] “TA” “TA” “TA” “TA” “TA” “TA” “TA” “TA” “Fa” “Gd” “TA” ...

str(combi$GarageCond)

返回:chr [1:2919]“TA”“TA”“TA”“TA”“TA”“TA”“TA”“TA”“TA”“TA”“TA”...

首先,我考虑了它们:

combi$GarageQual <- factor(combi$GarageQual)
str(combi$GarageQual)

返回:因子 w/ 5 个级别 "Ex","Fa","Gd",..: 5 5 5 5 5 5 5 5 2 3 ..

combi$GarageCond <- factor(combi$GarageCond)
str(combi$GarageCond)

返回:> 因子 w/ 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 的最终目标的最佳方法是什么?我是否应该从一开始就考虑级别,还是应该直接用数字替换字符?如果是这样,我该怎么做?

【问题讨论】:

    标签: r feature-engineering


    【解决方案1】:

    直接的方法是按正确顺序创建五个评级的向量,然后使用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
    

    【讨论】:

    • 太棒了,谢谢@Jay,它有效!后续问题:如果我想对多个变量执行此操作,有没有办法将所有成绩一起应用?以下是获得成绩向量的变量: qual_cols
    • 是的,看看?lapply。像sapply(combi[qual_cols], match, grades) 这样的东西可能就是你需要的。
    猜你喜欢
    • 2022-07-06
    • 2019-11-16
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    • 2012-03-30
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    相关资源
    最近更新 更多