2020-11-02 逻辑回归1.1

import math
import torch
import numpy as np

def sigmoid(x):
    '''
    ①定义sigmoid函数,只能传一位数字
    '''
    if x>700:
        x=700
    if x<-700:
        x=-700
    res=1/(1+math.exp(-x))
    return res

def mul_1(a,b):
    '''
    ①把两个横着的一维矩阵对应乘起来,然后相加,得数是一个数字
    ②y=a0·x0+a1·x1+…+an·xn
    '''
    a=torch.tensor([tensor_to_list(a)])
    b=torch.tensor([tensor_to_list(b)])
    res=a.float().mm(b.float().t())
    return res

def tensor_to_list(x):
    '''
    将tensor转换成list形式
    '''
    y=np.array(x)
    res=list(y)
    return res


# 【输入】①数据 ②标记 ③学习率
x=[[1,0],[1,1],[1,2],[1,3]]
y=[[0],[0],[1],[1]]


# 得到输入x,y
x=torch.tensor(x)
y=torch.tensor(y)

# 得到西塔的大小,初始化西塔
leng=x.shape
leng = list(leng)[1]
xita = torch.rand(1,leng)
xita = torch.tensor(tensor_to_list(xita)[0])
aefa=10.
pinggu_qian=0
pinggu_xian=0


for times in range(10000):
#【核心 得分函数求导】
    sum=0 #算员
    for t in range(len(x)):#算员
        sum+=x[t]*(sigmoid(mul_1(xita,x[t]))-y[t])#算员
    
#【核心 更新】
    xita=xita-aefa*sum
    
#【评估】
    pinggu_qian=pinggu_xian
    pinggu=1
    for t in range(len(x)):
        pinggu=pinggu* (sigmoid(mul_1(xita,x[t]))**y[t])*(1-sigmoid(mul_1(xita,x[t])))**(1-y[t]) 
    pinggu_xian=pinggu  
#【自动改学习率】  
    deerta=pinggu_xian-pinggu_qian
    
    if deerta<=0:
        aefa=0.7*aefa
    if deerta>0:
        if deerta<0.000001:
            aefa= aefa/0.75
        
# 【输出】
    if times%100==0:
        po=tensor_to_list(xita)
        print(times+1,": y=",po[1],"x",po[0],"   \n",
         (sigmoid(mul_1(xita,x[0]))),
        (sigmoid(mul_1(xita,x[1]))),
        (sigmoid(mul_1(xita,x[2]))),
        (sigmoid(mul_1(xita,x[3]))),
             pinggu_xian)

 

评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值