一、准备
为了更深入的理解logistic regression,笔者基本采用纯C++的手写方式实现,其中矩阵方面的运算则调用opencv,数据集则来自公开数据集a1a。
实验环境:
关于配置方面的操作,请参考一下链接:Win10下OpenCV环境搭建(VS2017+OpenCV3.2.0)
二、logistic regression理论基础
如果想系统的了解logistic regression,笔者推荐吴恩达的深度学习系列课程,尤其是其中的实践作业,需要认真做。
下面笔者简略的介绍下logistic regression。
如上图就是一个logistic regression的典型例子:
- 一张猫的图片根据rgb可以看成是0-255的之间的数字,所以图片就转换成为了一列向量X。
- 定义一个维度为(1,X0)维度的参数W行向量,其中X0指图片列向量的行数。
- 将W和X相乘(矩阵相乘),再加上偏置b(为实数),则得到Z。
- 再用sigmoid进行限制到(0,1)范围,输出A。
- 定义loss,并使用梯度下降算法,更新参数W和b,使A的输出越来越接近标签Y。
下面是一些基本公式:
For one example x(i) x ( i ) :
z(i)=wTx(i)+b(1) (1) z ( i ) = w T x ( i ) + b
y^(i)=a(i)=sigmoid(z(i))(2) (2) y ^ ( i ) = a ( i ) = s i g m o i d ( z ( i ) )
sigmoid(wTx+b)=