Day 1:logistics regression

1.logistics regression model

y' = σ(WTx+b)

激活函数:sigmoid函数

损失函数:L(y',y) = -[y·log(y')+(1-y)·log(1-y')](二分类)

代价函数:损失均值,J(W,b) = 1/m·Σmi=1/m·ΣL(y'(i),y(i)),是W和b的函数

训练模型的步骤

初始化W和b,指定learning rate和迭代次数

每次迭代,根据当前W和b计算对应的梯度(J对W,b的偏导数),然后更新W和b,w := w - α(dJ/dw)

迭代结束,学得W和b,带入模型进行预测,分别测试在训练集合测试集上的准确率,从而评价模型

2.向量化

只要阔能,就不要使用显示for循环(explicit for-loop),而是尽可能采用矢量化技术(Vectorization)

深度学习中的数据量往往巨大,用for循环去跑的话效率会非常低下,相比之下,矩阵运算就会快得多。而python的矩阵“传播机制(broadcasting)”和专门用于矩阵计算的numpy包更是给了我们使用矩阵运算的理由。

所谓的Vectorization,就是把我们需要用for-loop来对那些只有上标或者下标变化的变量,放进一个向量或者矩阵中,让他们所有变量同时计算!

因此,Logistic regression算法向量化的过程,就是:

1.把m个样本,同时算出它们的z(i),也就是直接算Z这个m维行向量

2.同时把Z的m维都激活,得到m维行向量A

3.得到A和Z之后,就可以直接计算J对Z的梯度dZ了,得到dZ之后,也就可以直接算出W和b的梯度了

4.同时更新所有的w(i)和b(i)

3.算法步骤

(一)数据预处理

1)搞清楚数据的形状、维度

(209, 64, 64, 3)第一维代表m,即样本数量,第二维第三维分别是图片的长和宽,第四维代表图片的RGB三个通道

2)将数据(例如图片)转化成向量(image to vector)方便处理

3)将数据标准化(standardize),这样更好训练


未标准化
标准化

        每个特征都转化成了同样的分布,不管原来的范围是什么,现在都基本限定在同样的范围内了。原数据的不同特征的范围可能会有很大差别,比如一批数据中“年龄”的范围就比较小,可能20岁 ~ 60岁之间,但是另一个特征“年收入”可能波动范围就很大,也许0.5万 ~ 1000万,这种情况下会导致我们的 等高线图变得十分“扁平”,在梯度下降的时候会很 容易走弯路,因此 梯度下降会比较慢,精度也不高。但是经过标准化(也称归一化)之后,等高线就变规矩了,就很容易梯度下降了

另外,对于图片数据的话,进行标准化很简单,因为RGB三个通道的范围都是255,我们对图片的处理就是直接除以255即可。

(二)构造各种辅助函数

1)激活函数(此处我们使用sigmoid函数)--activation function

2)参数初始化函数(用来初始化W和b)--initialization

3)传播函数(这里是用来求损失cost并对W、b求导,即dW、db)--propagate

            包含了forward-propagate和backward-propagate,即正向传播和反向传播。

            正向传播求的是cost,反向传播是从cost的表达式倒推W和b的偏导数

4)优化函数(迭代更新W和b,来最小化cost)--optimize

5)预测函数(根据学习到的W和b来进行预测)--predict

(三)综合上面的辅助函数,结合成一个模型

可以直接输入训练集、预测集、超参数,然后给出模型参数和准确率

logistics 流程图



参考文献1(概念介绍)

参考文献2(向量化)

参考文献3(python代码实现)

你可能感兴趣的:(Day 1:logistics regression)