アットウィキロゴ

1%」

import math
 
x=[[1,2],[3,4],[5,6],[7,8],[9,10]]
y=[0,0,0,1,1]
a=[0.2,0.4,0.5]
 
def f(ax):
 
    ys=[]
    for x1 in x:
        yy=a[0]
        for i in range(2):
            yy=yy+ax[i+1]*x1[i]
        ys.append(yy)
    return ys
 
def g(ys):
 
    z=0
    for i in range(len(y)):
        g1=1+math.exp(-ys[i])
        g2=1/g1
        z=z+(y[i]-g2)*(y[i]-g2)
 
    return z
 
 
 
def dg(j):
 
    y0=f(a)
    g0=g(y0)
 
    h=0.01
    ax=a
    ax[j]=ax[j]+h   
 
    y1=f(ax)
    g1=g(y1)
 
    return (g1-g0)/h
 
mode=0
tr=0    
while mode<100:
    tr=tr+1
    d=[0,0,0]
    for i in range(3):
        d[i]=dg(i)
 
    ys=f(a)
    g0=g(ys)
 
    delta=-g0/100
 
    de=0
    for d1 in d:
       de=de+d1*d1
 
    h=delta/de
 
    asp=[0.0,0.0,0.0]
    for i in range(3):
        asp[i]=a[i]+d[i]*h
 
    ys=f(asp)
    g1=g(ys)
 
    if g1<g0:
       a=asp
 
    if g1>g0:
       mode=100
 
 
    if tr>20:
       mode=100
 
 
print(a)
最終更新:2018年01月05日 14:15