逻辑回归、梯度下降法、向量化

目录

1.二分类(Binary Classification)问题

二分类问题就是简单的“是否”、“有无”问题,例如判断一张图片中是否有猫

对机器来说,分辨这张图,需要读取这幅图的数字特征。

计算机保存一张图片,要保存三个独立矩阵,分别对应红绿蓝三个颜色通道。

我们可以定义一个特征向量x,把图片的所有像素值取出来放到这个特征向量里。如果这个图片是64x64的,那么这个特征向量的总维度n=64x64x3=12288。

识别这张图片,就是以图片的的特征向量x作为输入,预测输出的结果标签y是0还是1。

2.逻辑回归(Logistic Regression)

逻辑回归是一种用于解决二分类问题的机器学习方法,用于估计某种事物的可能性。

:如果我们想要知道一张图片是猫的概率 ŷ。已知特征向量x和logistic回归的两个参数:w(n维向量)和b(实数),如何预测 ŷ ?

? 不行,考虑到0<=ŷ<=1,这样的线性回归很难实现。

所以要在外面套一个sigmoid 函数:

如下图,sigmoid 函数是一条值域在[0,1]的平滑曲线。

为了训练logistic回归模型的参数w和b,需要定义一个成本函数(cost function)

首先,定义一个损失函数(Loss function)来衡量预测值 ŷ 和y的实际值有多近:

。(log省略的底数为10)

显然,我们希望损失函数尽可能地小。

y=0,f(ŷ,y) = -log(1-ŷ),f 要小,ŷ 要尽可能小,考虑到 ŷ 的取值范围,我们希望 ŷ 趋近于0。

y=1,f(ŷ,y) = -ylog(ŷ),f 要小,ŷ 要尽可能大,我们希望 ŷ 趋近于1。

Loss function是在单个训练样本中定义的,它衡量了在单个训练样本上的表现。

cost function 衡量的是在全体训练样本上的表现,如下:

我们的目标就是找到使得成本函数尽可能小的w和b。

为方便绘图,我们假设w和b都是实数,在实践中w可以是更高维的。

为了找到更好的w和b,我们通常给它们一个初始值,然后从初始点开始,向最陡的下坡方向走一步,这就是梯度下降的一次迭代,然后通过不断的迭代,逐渐收敛到全局最优解。

3.梯度下降法

首先,看看梯度下降如何应用到logistic回归的一个训练样本上。(假设w只有2个维度,b为实数)

对m个样本应用梯度下降,具体的一次迭代怎么做?

J=0, dw1=0,dw2=0,...,dwn=0,db=0

for i=1 to m:

:=:=,b:=,α为学习率

4.向量化(Vectorization)

上面的计算,正常需要两个for循环,一个用来遍历m个训练样本,一个用来遍历n个特征(上文的w我们简化成2维的,所以没遍历)。

显式地使用for循环效率很低,向量化运算来代替显式的for循环,能让程序运行地更快

验证:

# 打开cmd
pip install jupyter           # 提前安装好jupyter notebook
pip install ipykernel         # 安装ipykernel包
conda create -n deeplearning  # 创建虚拟环境
conda activate deeplearning   # 进入虚拟环境
conda install -n deeplearning numpy # 安装numpy
deactivate                    # 退出虚拟环境
python -m ipykernel install --name deeplearning # 将deeplearning虚拟环境写入notebook的kernel中
jupyter notebook              # 启动jupyter notebook
# 在jupyter notebook使用虚拟环境,如下图

测试代码


import numpy as np
import time

a = np.random.rand(1000000)
b = np.random.rand(1000000)
tic = time.time()
c = np.dot(a, b) # 向量内积
toc = time.time()
print(c)
print("Vectorized version:" + str(1000*(toc-tic)) + "ms")

c = 0
tic = time.time()
for i in range(1000000):
    c += a[i]*b[i]
toc = time.time()
print(c)
print("For loop:" + str(1000*(toc-tic)) + "ms")

5.在逻辑回归上应用向量化

............

np.dot()+b

np.sum(dZ)

W:=,b:=,α为学习率

  • 1
    点赞
  • 2
    收藏
    觉得还不错? 一键收藏
  • 打赏
    打赏
  • 0
    评论

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

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

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包

打赏作者

漂流の少年

你的鼓励将是我创作的最大动力

¥1 ¥2 ¥4 ¥6 ¥10 ¥20
扫码支付:¥1
获取中
扫码支付

您的余额不足,请更换扫码支付或充值

打赏作者

实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

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

余额充值