二分分类
数据处理
因为一张图片是由3通道组成,所以将图片分成三个矩阵
再将矩阵展开堆叠起来
逻辑回归(Logistic Regression)
逻辑回归是常在监督学习中使用的算法,输出结果都是1或者0.逻辑回归算法的目的是为了最小化预测结果和训练数据的误差。
其中:
- 传入的特征向量,是x的特征数
- y是训练数据的标签
- w是权重,是x的特征数
- b是一个阈值
- 输出为
- Sigmoid 函数为
逻辑回归损失函数(Logistic Regression cost function)
为了得到和,我们需要定义一个损失函数。
损失函数的作用是为了衡量预测的结果和期望的结果不同的地方。
换句话说,损失函数是为了计算单个训练样本的误差
当 : 所以 要接近于1
当 :所以 要接近于0
代价函数(Cost function)
代价函数是整个训练集损失函数的平均数。
梯度下降(Gradient Descent)
由于是一个凹函数,所以可以使用梯度下降来找到,,使的值最小
我们先从一个单一的维度来看参数是如何进行参数更新的
在此例子中的的更新公式为,其中为学习率也就是每次更新的比率
- 当的值高于最小值处的,此时的为正数,经过更新公式计算后,的值减少
- 当的值底于最小值处的,此时的为负数,经过更新公式计算后,的值增加
这样也就达到了我们更新的目的
所以我们推广到二维上也是如此
使用计算图来进行说明逻辑回归中的梯度下降
我们假设传入的特征值有两个,那么单个样本逻辑回归的正向计算的公式如下
我们使用链式法则计算相应的导数表达式
而后使用得到的结果进行梯度更新
这样就完成了单个样本的一次权重更新
如果我们在计算多个样本之后进行权重更新的话,我们知道:
那么
然后再进行参数的更新即可
使用伪码小结一下
m为样本数量,为特征数量
J = 0, = 0, = 0, db = 0
for i = 1 to m:
→|
→|
→|J +=
→|
→|
→|
→|
J = J/m; = /m; = /m; db = db/m
然后再进行更新参数
向量化
当在进行计算的时候,循环有的时候就会使计算效率非常底下,所以使用向量化来解决此问题,计算速度的差距还是很大的
- 我们先去掉W参数的循环
- 将W初始化成shape为(,1)的向量
- for循环直接换成dw +=
- 最后再将dw直接除以m
- 再将外围遍历m个样本的循环消除
- 原先循环里使这样一个一个计算现在我们将X也构建成一个矩阵
- W的矩阵是这样的
- 于是矩阵相乘变成此时b会由于Nympy的机制会自动广播查看文档,变成一个一维数组具体代码
1
2Z=np.dot(W.T, X)+b
A= 1 / (1+np.exp(-Z))
- 向量化dw的计算
- 正向计算的式子是
- 所以求导就是
最终代码实现的逻辑回归
1
2
3
4
5
6
7
8
9for item in range(1000):
Z = np.dot(W.T, X)+b
A = sigmoid(Z)
dz = A - Y
dW = (1/m) * np.dot(X, dz.T)
db = (1/m) * np.sum( A - Y )
W -=(learning_rate * dW)
b -=(learning_rate * db)
logistic 损失函数的解释
当我们在计算时
我们假设: ,所以
当时
当时
所以最终的公式变为
因为函数是严格的单调递增,最大化就是最大化
所以式子最终变成
当我们在训练的时候希望概率是最大的,损失是最小的,所以选择它的负值作为损失函数