本博客是学习大师Andrew Ng的视频课程进行的总结。

1.逻辑回归函数

        先说明一下,逻辑回归实际上是一种分类方法,主要用于二分类问题,它的输出在0` 1,代表了属于某一类的概率,如下式为输入X属于第1类的概率,记为
,一般在概率大于0.5时,将输出结果判为1,否则为0.

            (1)


逻辑回归的函数形式为:

        (2)

Z是线性变换,线性变换经过某种转换关系可以更加接近真实值Y的预测值,这里的转换关系为

            (3)

称为sigmoid函数,就长这个样子:




2.代价函数

        假设训练样本共有 m 个 ,则上标 i 表示第i个样本,对于训练样本,我们希望预测的输出结果尽可能的接近真实的结果,即使。

逻辑回归的损失函数为:

        (4)





定义代价函数为 m 个训练样本损失函数的平均值:

        (5)


它衡量了预测结果与真实结果之间的平均错误代价,优化的目标是最小化代价函数J(w,b)。

那么如果选择w,b 能使代价函数最小化呢?这里介绍梯度下降法求使代价函数最小化时的权重w,和偏移b。

3. 梯度下降

梯度下降是神经网络中训练模型最常用的一种优化方法,很多博客都对此有很详细的解释,比如 <http://www.cnblogs.com/pinard/>

刘建平Pinard-梯度下降小节 <https://www.cnblogs.com/pinard/p/5970503.html>,一文看懂常用的梯度下降算法
<https://blog.csdn.net/u013709270/article/details/78667531>等。

梯度下降中,w,b 的更新方式为:

        (6)



alpha为学习率learning-rate表示移动步长,梯度(dw,db,即当前点的斜率)指定了移动方向,梯度下降法是为了寻找极小值,因此是朝梯度的负方向移动,用图像表示即:

(来自网络)


图中曲线为代价函数(J),横坐标为w 或 b ,当梯度(斜率)为正时-(梯度指向右前方),经过式(6)的运算,w朝左更新,靠近曲线的最低点(梯度为0);
当梯度(斜率)为负时-(梯度指向左前方),经过式(6)的运算,w朝右更新,靠近曲线的最低点,直到梯度为0 时,到达最小值,得到最优参数w,b 使 J
有最小值。 




4. 实现步骤

        有了以上的基础,我们来看一下逻辑回归的基本实现步骤。

        初始化W,b:W随机初始化为接近0的数,b则初始化为0

     (1) 计算预测的输出结果: 的计算方式如下,X,Z,A是 m
个样本的向量化矩阵,下标为矩阵维度,nx是每个样本的特征数量,因此X为(nx*m)的矩阵,W为(nx*1)的矩阵,b是一个常数,因为所有的样本只有一个b。A就是预测结果,


         (7)


    (2)计算损失函数:根据式(5)计算损失函数 J(w,b)





     (3)计算梯度:


       复合函数求导,结果如下:





    (4)根据公式(6)更新 w 和 b :

    这里的alpha是超参数,可以根据模型进行调整以得到最优化的结果。

    更新w,b 后,在迭代次数内,再重复步骤(1)~(4),直到导数得到最小化的代价函数J(w,b)。

整个过程用paython伪代码表示为:
X = x_trian # 训练样本 Y = y_trian W = np.random.rand(X.shape[0],1)*0.01
#初始权重为很小的随机数 b = np.zeros((1,1)) # 初始b为0 learning_rate = 0.1 #步长 m = X.shape[1]
#样本数量 #迭代iter次后输出最终的优化参数 w ,b for iter in range(1000): #迭代iter次 Z =
np.dot(w.T,X) + b #计算线性模型Z A = sigmoid(Z) #进行sigmoid变换 cost =
-sum(np.dot(np.log(A),Y.T) + np.dot(np.log(1-A),1-Y.T)) / m #代价函数 dw =
np.dot(X,(A-Y).T) / m #权重方向的梯度 db = np.sum(A - Y) / m #偏置方向的梯度 assert(dw.shape
== w.shape) #assert保证矩阵的维度正确 assert(db.dtype == float) cost = np.squeeze(cost)
assert(cost.shape == ()) w = w - learning_rate * dw #参数更新 b = b - learning_rate
* db      迭代完成后,会得到一个优化的参数w,b,即逻辑回归模型的最终参数。这个参数可以通过改变迭代次数和步长进行选择,直达选择到合适的w,b