【发布时间】:2019-11-08 20:08:23
【问题描述】:
我正在使用来自 Kaggle 的数据集“信用卡”。我使用随机森林进行预测,而对于训练集,我使用 smot 函数来平衡我的数据。
我对用于解释机器学习的包 iml 有问题:当我为我的模型使用函数“FeatureImp”时,它给了我一个错误:
Ops.factor 中的错误(实际,预测):因子的水平集不同。
我该怎么做才能解决问题并开始使用 iml?
预测变量是类:factor = 0/1。我已经控制了 Class 变量的类和它的因素。我在 FeatureImp 中使用了损失函数“ce”。
library(DMwR)
smote_creditcard <- SMOTE(Class ~ ., creditcard_train, k=10, perc.over=400,perc.under = 50)
#con perc.over=100 praticamente raddoppio i casi della classe minore
table(smote_creditcard$Class)
# 0 1
# 796 1990
prop.table(table(smote_creditcard$Class))
smote_creditcard$Class<-as.factor(smote_creditcard$Class)
creditcard_random <- randomForest(formula = Class ~ .,
data = smote_creditcard,ntree=1000,mtry=5)
library(iml)
X<-smote_creditcard[which(names(smote_creditcard)!="Class")]
y<-smote_creditcard$Class
predictor<-Predictor$new(creditcard_random,data=X,y=y,type="prob")
imp<-FeatureImp$new(predictor,loss="ce")
Ops.factor 中的错误(实际,预测): 水平组的因素是不同的
【问题讨论】:
-
看来你的预测值和实际值有不同的水平,尝试使用
levels()在他们身上知道它。 -
0 levels(predict(creditcard_random,smote_creditcard)) levels(smote_creditcard$Class) 我认为你给我的建议是正确的代码。输出相同,为:“0”“1”。
标签: r machine-learning