没有具体的建模数值,因为根据不同形态的建模,需要设置的数值都是不同的,最基础的是可选择的缩放参数。
例如:
w = torch.Tensor(3, 5)
nn.init.xavier_uniform(w, gain=nn.init.calculate_gain('relu'))
非线性回归的初始值设置方法:
1.查阅他人已有文献,采用其参数作为初始值;
2.将可线性化的方程进行变换(如对数变换),将其线性化后采用线性回归的计算参数,得到的参数进行相应的变换后代入原方程作为初始值;
3.更改算法,R语言可以尝试minpack包的nls.LM()函数,quantreg包的 dynrq()函数进行分位数回归
4.瞎蒙
你的t有问题,我没法算;我原来logitist都用非线性最小二乘求解参数,即
nls(formula=w~k/I(1+a*exp(-b*t)),start=c(k=134,a=1,b=1))
剩下的应该都差不多吧
nls的数据源必须有误差。不能精确等于公式返回值(零残差)。循环次数大于50通常是使用 函数精确返回值 作为数据源去拟合函数。必须给y值加上随机误差。
z=function(x,a,b){a*sin(x)+b*cos(x)}x=seq(1,10,9/500)
y=z(x,1,1) # a=1 b=1 是期望拟合出的结果。
cor=data.frame(x=x,y=y)
cor$res=runif(length(cor$x),min=-0.005,max=0.005)
cor$yres=cor$y+cor$res
#yres =y加上随机误差,y是精确返回值
> nls(cor$yres~z(cor$x,a,b),data=cor,start=list(a=0.8,b=1.3))
Nonlinear regression model
model: cor$yres ~ z(cor$x, a, b)
data: cor
a b
0.9999 1.0002
residual sum-of-squares: 0.004213
Number of iterations to convergence: 1
Achieved convergence tolerance: 2.554e-07
#使用精确返回值拟合就会出错。
> nls(cor$y~z(cor$x,a,b),data=cor,start=list(a=1,b=1))
Error in nls(cor$y ~ z(cor$x, a, b), data = cor, start = list(a = 1, b = 1)) :
循环次数超过了50这个最大值