增加逻辑回归中的迭代次数

数据挖掘 r 逻辑回归
2022-03-11 12:47:32

在 R 中进行逻辑回归时,我使用带有 family = 'binomial' 的 glm 实现了 68% 的准确度。我不知道如何通过我的代码指定迭代次数。有什么建议吗?随机梯度下降的应用是否适用于 epoch。如果是这样,我如何在我的代码中应用它?我想提高模型的准确性。以下是我的代码:

rm(list=ls())
library(dplyr)
data1 <- read.csv("~/hj.csv", head`enter preformatted text here`er=T)
train<- data1[1:116,]
VALUE<-as.numeric(rownames(train))
testset<- data1[1:116,]
mylogit <- glm(VALUE ~ POINT1 + POINT2 + POINT3 + POINT4 , data = data1, family ="binomial")
testset$predicted.value = predict(mylogit, newdata = testset, type="response")
for (i in 1: nrow(testset)){
  if(testset$predicted.value[i] <= 0.50)
    testset$outcome[i] <- 0 
  else testset$outcome[i] <- 1
}
print(testset)
tab = table(testset$VALUE, testset$outcome) %>% as.matrix.data.frame()
accuracy = sum(diag(tab))/sum(tab)
print(accuracy)
print(tab)
table(testset$VALUE, testset$outcome)

在此处输入图像描述

1个回答

R 中的逻辑回归使用迭代重新加权最小二乘算法。您可以通过以下方式指定最大迭代次数和精度:

m <- glm(..., family = "binomial", control = list(maxit = 2, epsilon=1))

请在此处阅读 glm.control 的文档

您可以检查拟合中使用的实际迭代次数:

m$iter

但是......默认设置应该足够了。

> glm.control()

$epsilon
[1] 1e-08

$maxit
[1] 25

$trace
[1] FALSE

默认的最大迭代次数是 25 次,我**怀疑**通过将其更改为更大的值,你会得到什么。精度是1e-08,已经很小了。

不应该盲目地调整迭代次数,它很可能无济于事。试试这个:

> glm(admit ~ gre + gpa + rank, data = mydata, family = "binomial", control = list(trace=TRUE))

Deviance = 458.875865177 Iterations - 1
Deviance = 458.517518881 Iterations - 2
Deviance = 458.517492476 Iterations - 3
Deviance = 458.517492476 Iterations - 4

我从http://www.ats.ucla.edu/stat/r/dae/logit.htm获得了数据集(因为我没有你的数据文件)。

你看到我有trace=TRUE吗?我打印出每次迭代的偏差。R 停止是因为迭代 3 和 4 之间的偏差差异太小。我的模型只需要 4 次迭代。

我的建议:

  • 打印每次迭代的偏差并说服自己不需要超过 25 次迭代
  • 正确检查您的模型你需要更多的自变量吗?您是否需要转换变量以提高预测准确性?
  • 问问自己 60% 的准确率够吗?在许多领域,60% 是巨大的成功。
  • 你的模型需要交互吗?请注意,饱和模型将为您提供完美的准确性,但它具有所有交互项。您的模型假设您的自变量的影响在预测对数奇数时是相加的。这是一个公平的假设吗?
  • 您想在 R 中运行自动逐步模型选择算法吗?您可能会得到比自己手动完成的更好的模型。

您可能需要考虑一些有用的链接: