import numpy as np
import math
def df(a1,m):
f1=f(a1)
h=0.01
a1[m]=a1[m]+h
f2=f(a1)
return (f2-f1)/h
def f(a1):
e=[]
for tr in range(5):
z=a[0]
for i in range(2):
z=z+a1[i+1]*x[tr][i]
e.append(z)
sig=0
for tr in range(5):
sig=sig+(y[tr]-1/(1+math.exp(-e[tr])))*(y[tr]-1/(1+math.exp(-e[tr])))
return sig
a=[0.4,0.5,0.2]
x=[[0.7,0.2],[0.3,0.5],[0.4,0.7],[0.1,0.1],[0.2,0.2]]
y=[1,1,1,0,0]
trs=0
while trs<100:
trs=trs+1
dg=[0,0,0]
for m in range(3):
dg[m]=df(a,m)
e=-0.01*f(a)
mu=0
for m in range(3):
mu=mu+dg[m]*dg[m]
mu=math.sqrt(mu)
delta=[0,0,0]
for m in range(3):
delta[m]=e*dg[m]/mu
ax=[0,0,0]
for m in range(3):
ax[m]=a[m]+delta[m]
f_de=f(a)
f_delta=f(ax)
if f_delta<f_de:
for m in range(3):
a[m]=ax[m]
print(a)
最終更新:2018年02月12日 14:37