如何解决Python中使用均方误差的梯度下降法发散到无穷大
我正在尝试应用均方误差梯度下降解决方案来找到某些数据的指数最佳拟合方程。我的解决方案有一半的时间可以正常工作,但另一半完全失败......例如,当我发送 time1 和 values1 列表时,解决方案似乎发散到无穷大。但是,如果我从这些相同的列表中删除最后一个项目,那么代码会生成正确的值(列出 time2 和 values2)。有趣的是,如果列表的最后一个值更改为 15,则该解决方案也有效。但是任何大于 16 的值都会失败。
我完全不知道为什么这不起作用。任何帮助将不胜感激。我怀疑该解决方案源于一些我不完全理解的数学......
def Grad_a_MSE(X,Y,param1,param2):#where param1 = a and param2 = b
e=0
N=len(X)
for i in range(len(X)):
e=e+2/N*(param1 + param2*X[i]-Y[i])
return e
def Grad_b_MSE(X,param2):
e=0
N=len(X)
for i in range(len(X)):
e=e+2/N*X[i]*(param1 + param2*X[i]-Y[i])
return e
def MSEtotal(time,total_cells):
'''
computes the gradient descent MSE
'''
total_cells = np.log(np.array(total_cells)) #log transforming data
a = 10
b = 1
epochs = 1000 #num times of interation
epsilon_a = 0.01
epsilon_b = 0.01
for k in range(epochs):
temp_a = a
temp_b = b
a = a - epsilon_a * Grad_a_MSE(time,total_cells,temp_a,temp_b)
b = b - epsilon_b * Grad_b_MSE(time,temp_b)
return (a,b)
time1 = [0,4,6,11,14,17]
values1 = [2000000.0,1590179.267489712,2045193.672839506,10078939.432098765,15084990.442386832,18604270.462962963]
print(MSEtotal(time1,values1))
time2 = [0,14]
values2 = [2000000.0,15084990.442386832]
print(MSEtotal(time2,values2))
版权声明:本文内容由互联网用户自发贡献,该文观点与技术仅代表作者本人。本站仅提供信息存储空间服务,不拥有所有权,不承担相关法律责任。如发现本站有涉嫌侵权/违法违规的内容, 请发送邮件至 dio@foxmail.com 举报,一经查实,本站将立刻删除。