我正在使用R语言进行一个机器学习练习,使用的是movielens数据集的扩展版本(1000万行),我的任务是利用训练集中的数据预测验证集中的评分。目前我的模型如下:
用户u对电影i的评分 = mu + b_i + b_u + epsilon,其中mu是平均评分,b_i是每部电影的影响,b_u是每个用户的影响。Epsilon应该是随机误差项,但目前它还包含了我尚未考虑的电影类型的影响。
为参考,这里是我当前数据集的截图 – 请注意,resid列包含了减去mu、b_i和b_u后的剩余评分。
我卡住了,因为我不知道如何对电影类型的影响进行建模。有人有关于我如何继续的建议吗?
回答:
主要思路: 将“类型”字段中的每个值转换为单独的字段,如(喜剧,浪漫)并设值为(是/否,0/1)。
我用下面的样本数据向你展示。这应该能给你一个概念,你可以用自己的数据继续进行。
sample <- tribble(~ Values, "apple|banana", "orange|apple", "banana|guava")sample
操作步骤如下:
-
使用tidyr包中的separate函数分隔字段中的值
sample %>% separate(Values, into = c("val1","val2"), sep = "\\|") -> sample2sample2
-
使用tidyr包中的gather函数将所有单个值收集到一个列中
sample2 %>% gather(key = "col_name", value = "col_val", val1, val2) ->sample3sample3
-
最后,使用“col_val”字段获得所需的输出,即独热编码(one-hot encoding)。
sample4 <- sample3 %>% select(2)sample4as.data.frame(model.matrix( ~ . -1, sample4))
告诉我这是否对你有帮助。
祝你学习愉快!!!