在实现线性回归时获取NaN

时间:2018-04-01 17:32:45

标签: r linear-regression

我正在尝试在R中实现线性回归。下面是我的代码:

library(ggplot2)
df <- data.frame()

df<-cbind(c(10000,20000,5000,5123,5345,5454,11000,23000,6000,6100,6300),
c(5600,21000,1000,2000,2300,3000,7000,21400,3200,3250,3300))

df <- as.data.frame(df)
colnames(df)<-c("Population","Profit")

plot(df,df$Population,df$Profit)

X<-df$Population
Y<-df$Profit
X<-cbind(1,X)
theta<-c(0,0)
m<-nrow(X)
cost=sum(((X %*% theta)-Y)^2)/(2*m)
alpha<-0.001
iterations<-1500

for(i in 1:iterations){
  temp1 <- theta[1] - alpha * (1/m) * sum(((X%*%theta)- Y))
  temp2 <- theta[2] <- theta[2] - alpha * (1/m) * sum(((X%*%theta)- Y)*X[,2])
  theta[1] = temp1
  theta[2] = temp2
}

但我将theta值视为NaN。需要帮助来理解为什么要获得NaN。

1 个答案:

答案 0 :(得分:2)

如果我们使用print作为其中一个&#39; temp&#39;,则值会在某个时间点变为无限,然后在下一次迭代中变为NaN

iterations <- 62

for(i in 1:iterations){
  temp1 <- theta[1] - alpha * (1/m) * sum(((X%*%theta)- Y))
  temp2 <- theta[2] <- theta[2] - alpha * (1/m) * sum(((X%*%theta)- Y)*X[,2])
  print(temp1)
  #print(temp2)
  theta[1] = temp1
  theta[2] = temp2
}

-print output

#[1] 6.640909
#[1] -981047.5
#[1] 122403140248
#[1] -1.527201e+16
#[1] 1.90546e+21
#[1] -2.377406e+26
#[1] 2.966245e+31
#[1] -3.700928e+36
#[1] 4.617578e+41
#...
#...
#[1] 1.894035e+286
#[1] -2.363151e+291
#[1] 2.948459e+296
#[1] -3.678737e+301
#[1] Inf
#[1] NaN