本文是基于Andrew Ng的神经网络和深度学习课程的练习贴,用Python实现向量化的Logistic回归,激活函数为sigmoid函数,参数的更新是用梯度下降法。
由于要用向量化实现所有数据同步计算,所以有必要事先定义一下各个变量和参数的结构,以防在进行矩阵运算时出现维度不匹配的情况。输入变量X是一个n行m列的矩阵,n行表示x有n个feature,m列表示x有m个example;输出变量y是一个1行m列的矩阵,1行表示这个模型只预测一个变量,m列的含义和x一样,表示有m个example。在回归方程y = wx+b中,w的维度为1行n列,b的维度为1行1列。eta为学习率,n_iter为迭代次数
首先引入必要的包,这里只用到了numpy
import numpy as np
然后初始化参数w和b,这里采用生成随机数的方式
[n,m] = x.shape
w = np.random.randn(1,n)
b = np.random.randn(1,1)
接下来就可以进行迭代,逐步修正参数w和b。每一次迭代的具体过程为:
1. 向前传播计算出z=wx+b和a=1/(1+exp(-z))
2. 向后传播计算出偏导数dz=a-y,dw=dz点乘x/m,db=dz/m
3. 采用梯度下降法更新w和b,w