使用C5.0构建决策树报错‘models require a factor outcome’的原因及解决方法
C5.0决策树报错“models require a factor outcome”的原因及解决办法
数据集
Age Job House Credit Loan.Approved 1 Young FALSE No Fair No 2 Young FALSE No Good No 3 Young TRUE No Good Yes 4 Young TRUE Yes Fair Yes 5 Young FALSE No Fair No 6 Middle FALSE No Fair No 7 Middle FALSE No Good No 8 Middle TRUE Yes Good Yes 9 Middle FALSE Yes Excellent Yes 10 Middle FALSE Yes Excellent Yes 11 Old FALSE Yes Excellent Yes 12 Old FALSE Yes Good Yes 13 Old TRUE No Good Yes 14 Old TRUE No Excellent Yes 15 Old FALSE No Fair No
尝试的代码
LoanDFrame$Job <- as.factor(LoanDFrame$Job) tr <- C5.0(Loan.Approved ~ Age + Job + House + Credit, data = LoanDFrame)
错误提示
models require a factor outcome
原因分析
C5.0是分类决策树算法,强制要求目标变量(即公式中的Loan.Approved)必须是因子(factor)类型。你仅将Job转换为因子,但Loan.Approved仍为字符型(character)或其他非因子类型,不符合模型对输入的要求,因此触发该错误。从数据集来看,Loan.Approved的取值是Yes/No,属于二分类标签,必须以因子类型传入模型才能让C5.0识别分类类别。
解决办法
- 转换目标变量为因子
在构建模型前,先将Loan.Approved转为因子类型,代码如下:
# 转换目标变量为因子 LoanDFrame$Loan.Approved <- as.factor(LoanDFrame$Loan.Approved) # 构建决策树模型 tr <- C5.0(Loan.Approved ~ Age + Job + House + Credit, data = LoanDFrame)
- 统一转换分类特征为因子
除目标变量外,数据集中的Age、House、Credit也属于分类特征,建议一并转为因子类型,避免模型处理时出现异常:
# 批量转换分类特征 LoanDFrame$Age <- as.factor(LoanDFrame$Age) LoanDFrame$House <- as.factor(LoanDFrame$House) LoanDFrame$Credit <- as.factor(LoanDFrame$Credit)
内容的提问来源于stack exchange,提问作者roTenshi2
相关产品推荐
相关产品推荐

