import math
import numpy as np
def dg(m,a1):
h=0.01
g1=sumg(a1)
a2=[]
for ap in a1:
a2.append(ap)
a2[m]=a2[m]+h
g2=sumg(a2)
return (g2-g1)/h
def sumg(a1):
z=0
for i in range(len(x)):
z=z+(y[i]-g(a1,x[i]))*(y[i]-g(a1,x[i]))
return z
def g(a1,x1):
f1=f(a1,x1)
g1=1/(1+math.exp(-f1))
return g1
def f(a1,x1):
f1=a1[0]
for i in range(len(x1)):
f1=f1+a1[i+1]*x1[i]
return f1
y=[0,0,0,1,1]
x=[[5,2,3],[7,4,4],[5,6,-1],[1,8,7],[2,10,2]]
a=[]
for i in range(4):
a.append(np.random.random())
print(a)
tr=0
while tr<100:
tr=tr+1
dx=[0,0,0,0]
for i in range(4):
dx[i]=dg(i,a)
sig=0
for i in range(4):
sig=sig+dx[i]*dx[i]
sig=math.sqrt(sig)
e=-0.01*sumg(a)
ax=[0,0,0,0]
for i in range(4):
ax[i]=a[i]+e*dx[i]/sig
g1=sumg(a)
g2=sumg(ax)
if g2<g1:
a=ax
for x1 in x:
print(f(a,x1))
最終更新:2018年02月14日 13:11