深度学习笔记(2)——逻辑回归(基于梯度下降)

基本概念

定义

逻辑回归算法虽然名字上是回归,但实际上是二分类算法。本质就是以回归的方法来进行二分类

优点

也就是说我们为什么要用逻辑回归,而不用更简单的线性回归

  • 在线性回归中,离群值对结果的影响会很大。
  • 逻辑回归结果较于线性回归更准确

因为逻辑回归所使用的函数是非线性的,所以离群值的影响更小
sigmoid
从图片我们可以看出逻辑回归使用的sigmoid函数在输入趋于无穷时,是收敛于常数的。
所以我们便可以保证输出是在[0,1]区间的。

基于梯度下降

梯度其实也就是方向导数,只不过是沿其变化最大。而我们用梯度下降法也是为了让结果以一种更优方式迭代得出,具体原理不在这赘述,可自行搜索。下图左边给出了具体基本原理与操作,而右边则为向量化后的代码,更简便。

在这里插入图片描述

损失函数

损失函数表达式

根据最大似然估计可知正确概率为:
在这里插入图片描述
但在实际情况中,为了简化计算,我们常常会对其取对数,化乘法为加法。因此可得损失函数表达式:
在这里插入图片描述

为什么选其为损失函数

从图片中便可看出,该函数极好的表示了极好的准确度。当损失函数值越小时,值越接近真实值;反之,损失函数值越大时,值越远离真实值
在这里插入图片描述

代码实现

import numpy as np
def sigmoid(n):
    return 1/(1+np.exp(-n))
#/***********************参数初始化***********************/
m=100				#样本数
X=np.random.randn(50,m)
Y=np.random.randn(1,m)
n=X.shape[0]
alpha=1.1           #学习率(可自行设置,并根据实际数据进行调整)
circle_times=5000   #循环次数(可自行设置,并根据实际数据进行调整)
w=np.zeros((n,1))   #权重系数
b=0
J=[]
re=[]
#/***********************开始迭代***********************/
for i in range(circle_times):
    A=sigmoid(np.dot(w.T,X)+b)
    dz=A-Y
    dw=np.dot(X,(A-Y).T)/m
    db=np.sum(A-Y)/m
    cost=np.sum(Y*np.log(A)+(1-Y)*np.log(1-A))/-m
    J.append(cost)
    re.append(A)
	#更新系数
    w=w-alpha*dw
    b=b-alpha*db
    

print("the last J:",J[-1],"the last result:",re[-1])
predictions = np.array([1 if x>0.5 else 0 for x in A.reshape(-1,1)]).reshape(A.shape)
print ('Accuracy: %f' % float((np.dot(Y, predictions.T) + np.dot(1 - Y, 1 - predictions.T)) / float(Y.size) * 100) + '%')
  • 0
    点赞
  • 1
    收藏
    觉得还不错? 一键收藏
  • 0
    评论

“相关推荐”对你有帮助么?

  • 非常没帮助
  • 没帮助
  • 一般
  • 有帮助
  • 非常有帮助
提交
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

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

抵扣说明:

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

余额充值