逻辑回归

逻辑回归
首先,逻辑回归并不是属于回归问题,而是属于分类问题。由于历史原因,他就叫逻辑回归而不叫逻辑分类了。逻辑回归还有梯度下降,在机器学习以及深度学习中都非常频繁地会用到。我们这里的逻辑回归用sigmoid函数,使得我们的预测值在(0,1)区间内,当其大于某个阈值时,可以有那么多的把握认为它为某一类。
下面先上代码

import numpy as np
import matplotlib.pyplot as plt
import math
#training sets
x=np.array([[1,2,3],
           [1,2,4],
           [1,3,4],
           [1,3,3],
           [1,4,3],
           [1,3,2],
           [1,10,6],
           [1,10,9],
           [1,10,8],
           [1,9,7],
           [1,7,9],
            [1,7,14],
            [1,9,14],
            [1,1,9],
            [1,2,10]])
y=np.array([0,0,0,0,0,0,1,1,1,1,1,1,1,0,0])
theta=np.array([1,1,1])
#每一个数据的h组成的向量
def h(x,theta):
    e=2.71828
    z=x.dot(theta.T)
    return 1/(1+e**(-1*z))
#cost_function
def cost(x,y,theta):
    hh=h(x,theta)
    j=0
    for i in hh:
        hh[j]=math.log(i)
        j+=1
    hhh=1-h(x,theta)
    j=0
    for i in hhh:
        hhh[j]=math.log(i)
        j+=1
    j=sum(y*hh+(1-y)*(hhh))/len(y)*(-1)
    return j
#learning_rate
a=0.001
epoch=int(input())   
i=0
while i < epoch:
    loss=cost(x,y,theta)
    theta=theta-(a*(h(x,theta)-y).dot(x))
    i+=1
    print('loss: ',loss)
t1=[]
t2=[]
for i in x:
    t1.append(i[1])
    t2.append(i[2])
t1=np.array(t1)
t2=np.array(t2)
x1=t1
x2=(-1*theta[0]-theta[1]*x1)/theta[2]
plt.plot(x1,x2)
T=np.arctan2(t2,t1)
plt.scatter(t1, t2,s=75,c=T,alpha=0.3)
plt.show()



在这里插入图片描述这图片为迭代一万次结果。我个人将数据集分为了两类,中间那条为训练得到的决策边界。当这条线的值大于0时,为上面的那一类,当他小于0时,为下面的那一类将此函数sigmoid化后,便可以得到阈值为0.5。当然,阈值我们也可自己设定,不过代码相应地就要进行改动。

  • 0
    点赞
  • 1
    收藏
    觉得还不错? 一键收藏
  • 0
    评论
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

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

抵扣说明:

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

余额充值