为什么我的逻辑回归模型输出不是一个2级因子?(错误:`data`和`reference`应该是具有相同级别的因子。)
通过阅读类似的问题,我知道问题在于为什么我的逻辑回归模型输出不是一个2级因子?(错误:`data`和`reference`应该是具有相同级别的因子。),r,machine-learning,classification,logistic-regression,r-caret,R,Machine Learning,Classification,Logistic Regression,R Caret,通过阅读类似的问题,我知道问题在于yhat.logisticReg不是两个级别的因素,而training.prepped$TARGET\u FLAG是。我假设这个问题可以通过改变我的模型或在预测中得到解决,因此yhat.logisticReg是一个2级因子。我该怎么做 logisticReg = glm(TARGET_FLAG ~ ., data = training.prepped, family = binomial()
yhat.logisticReg
不是两个级别的因素,而training.prepped$TARGET\u FLAG
是。我假设这个问题可以通过改变我的模型或在预测中得到解决,因此yhat.logisticReg
是一个2级因子。我该怎么做
logisticReg = glm(TARGET_FLAG ~ .,
data = training.prepped,
family = binomial())
yhat.logisticReg = predict(logisticReg, training.prepped, type = "response")
confusionMatrix(yhat.logisticReg, training.prepped$TARGET_FLAG)
Error: `data` and `reference` should be factors with the same levels.
您可能需要先选择阈值,然后将实值数据转换为二进制值,例如
a <- c(0.2, 0.7, 0.4)
threshold <- 0.5
binary_a <- factor(as.numeric(a>threshold))
str(binary_a)
Factor w/ 2 levels "0","1": 1 2 1
a库插入符号具有方法confusionMatrix
,该方法实现了多个度量。调用总体
可以获得准确度。如果您想要另一个度量,您可以检查他们是否实现了它,然后调用它
library(caret)
acc = c()
for(value in yhat.logisticReg)
{
predictions <- ifelse(yhat.logisticReg <= value, 0, 1)
confusion_matrix = confusionMatrix(predictions, yhat.logisticReg)
acc = c(acc,confusion_matrix$overall["Accuracy"])
}
best_acc = max(acc)
best_threshold = yhat.logisticReg[which.max(acc)]
库(插入符号)
acc=c()
for(以yhat.logisticReg为单位的值)
{
预测嘿,雅各布,你正在尝试将一个因子与一个数值进行比较。你需要将yhat.logisticReg
转换为二进制。我认为这是一个类似的问题。你建议我如何做?我可以在predict
行之后简单地做一个列表理解if/else语句吗?还是有更好的选择@Filipe Lauaur您希望优化哪一个指标?我有一个R代码,可以找到解决您问题的最佳阈值。这比使用if/else更好。我需要预测“崩溃”或“不崩溃”。其中,1
表示崩溃,0
表示无崩溃。我不完全确定哪一个指标最适合优化,但我认为,confusionMatrix
函数报告的“准确度”是一个不错的选择@Filipe LauarI获取准确度中的错误错误(预测,yhat.logisticReg):找不到函数“准确性”
正如我所说,函数精度在某些软件包中存在,我将使用有效的代码更新答案。当我调用best_acc
时,我得到结果1075.698
,当我调用best_threshold
时,它返回NA
。这似乎是个错误。对不起,雅各布,那个分位数是个错误。我更新了代码,我想现在它可以工作了。这(通过我所做的编辑)解决了我的问题,尽管Filipe是正确的,0.5可能不是提供最高精度的阈值。binary\u a threshold)
也可以工作,级别将为“真”和“假”这可能更合适,但在编写时,它与我的TARGET\u FLAG
变量相匹配。或者更好地选择使测试集上的AUC或kappa最大化的阈值。
library(caret)
acc = c()
for(value in yhat.logisticReg)
{
predictions <- ifelse(yhat.logisticReg <= value, 0, 1)
confusion_matrix = confusionMatrix(predictions, yhat.logisticReg)
acc = c(acc,confusion_matrix$overall["Accuracy"])
}
best_acc = max(acc)
best_threshold = yhat.logisticReg[which.max(acc)]