我正在使用credit.csv构建学习树,数据可在以下网址找到:
https://github.com/stedy/Machine-Learning-with-R-datasets/blob/master/credit.csv
我已经做了以下步骤:
credit<-read.csv("credit.csv")
set.seed(12345)
credit_rand<-credit[order(runif(1000)),]
credit_train<-credit_rand[1:900,]
credit_test<-credit_rand[901:1000,]
library(C50)
credit_model<-C5.0(credit_train[-21],credit_train$default)
在我关注的指南中,似乎我应该删除默认值的最后一列,但是我收到以下错误:
Error en C5.0.default(credit_train[, -21], credit_train$default) :
C5.0 models require a factor outcome
我尝试将最后一行更改为:
credit_model<-C5.0(credit_train[,-21],credit_train$default)
但完全没有成功。
任何帮助?
答案 0 :(得分:9)
你的问题是C5.0 models require a factor outcome
。您已将结果指定为credit_train$default
,这是1/2结果,但R已将其读作数字,而不是因子:
str(credit_train$default)
int [1:900] 2 1 1 1 2 1 2 2 1 1 ...
然后解决方案是将其转换为因子:
credit_train$default<-as.factor(credit_train$default)
str(credit_train$default)
Factor w/ 2 levels "1","2": 2 1 1 1 2 1 2 2 1 1 ...
然后进行训练:
credit_model<-C5.0(credit_train[-21],credit_train$default)
答案 1 :(得分:0)
在原始数据provided by the publisher中,类变量(默认)存储在第17列,而不是第21列。除非过去几个月发生了重大变化,否则您的文件很可能存在不是正确的。
在我购买本书后从该网站获得的文件中,类变量“default”是一个具有两个级别(“是”和“否”)的因子,应该如此。
根据该书,相应地,应该执行的命令是
credit_model <- C5.0(credit_train[-17], credit_train$default)
接着是
credit_pred <- predict(credit_model, credit_test)
然后它就像一个魅力。
# > CrossTable(credit_test$default, credit_pred,
# + prop.chisq = FALSE, prop.c = FALSE, prop.r = FALSE,
# + dnn = c('actual default', 'predicted default'))
#
#
# Cell Contents
# |-------------------------|
# | N |
# | N / Table Total |
# |-------------------------|
#
#
# Total Observations in Table: 100
#
#
# | predicted default
#actual default | no | yes | Row Total |
#---------------|-----------|-----------|-----------|
# no | 57 | 11 | 68 |
# | 0.570 | 0.110 | |
#---------------|-----------|-----------|-----------|
# yes | 16 | 16 | 32 |
# | 0.160 | 0.160 | |
#---------------|-----------|-----------|-----------|
# Column Total | 73 | 27 | 100 |
#---------------|-----------|-----------|-----------|