【发布时间】:2016-10-04 20:55:41
【问题描述】:
我有一个数据框 df,我正在构建一个机器学习模型(C5.0 决策树)来预测列的类别(loan_approved):
结构(非真实数据):
id occupation income loan_approved
1 business 4214214 yes
2 business 32134 yes
3 business 43255 no
4 sailor 5642 yes
5 teacher 53335 no
6 teacher 6342 no
流程:
- 我将数据帧随机拆分为test和train,在train上学习 数据集(第 1、2、3、5、6 行训练,第 4 行作为测试)
- 为了在一个或多个列中考虑新的分类级别,我使用了 try 函数
功能:
error_free_predict = function(x){
output = tryCatch({
predict(C50_model, newdata = test[x,], type = "class")
}, error = function(e) {
"no"
})
return(output)
}
应用了预测功能:
test <- mutate(test, predicted_class = error_free_predict(1:NROW(test)))
问题:
id occupation income loan_approved predicted_class
1 business 4214214 yes no
2 business 32134 yes no
3 business 43255 no no
4 sailor 5642 yes no
5 teacher 53335 no no
6 teacher 6342 no no
问题:
我知道这是因为测试数据框有一个新级别,而火车数据中不存在,但我的函数不应该在除此之外的所有情况下都有效吗?
P.S: 没有用 sapply 因为太慢了
【问题讨论】:
-
您的实际问题是什么?是不是只返回“不”?
predict调用返回的错误是什么? -
问题在于预测函数在“职业”列中遇到了新的因子水平,并且不仅针对这一行失败,而且将整个数据帧视为失败案例
-
听起来您应该对拆分进行分层,以便每个拆分中每个类别的数量大致相同。
-
@Aaron: 我打算在生产中使用它,我可能会看到至少一个新职业/级别的记录