我正在尝试在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。
答案 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