调用sklearn的包使用简单的逻辑回归发现准确率为47%,这是因为数据集本身不是线性可分的,所以逻辑回归的表现不好。下面介绍使用神经网络进行分类。
建立神经网络的一般步骤如下:
Step1:定义神经网络的结构:输入层单元数,隐藏层单元数等;
Step2:初始化模型参数;
Step3:循环
3.1:前向传播计算
3.2:计算代价函数
3.3:反向传播得到梯度
3.4:更新参数(梯度下降)
接下来就逐个实现这个过程中需要用到的相关函数,并整合到nn_model中。
附:(反向传播算法背景知识:在机器学习中,很多算法最后都会转化为求目标损失函数最小值。如果可以解析出求最值的表达式就能解决这个问题了,但往往目的损失函数及其复杂,所以由最值表达式求最值的办法行不通。梯度下降法的出现可以解决求最小值的问题,但是需要确定梯度值,而反向传播算法的目的就是求出梯度值,后续用梯度下降法更新模型参数值。反向传播算法从模型的输出层开始,利用函数求导的链式法则,逐层从后往前求出模型梯度。)
一、定义神经网络的结构
二、初始化模型参数(w,b)
注:W初始化为很小的数,b初始化为0.之所以让W比较小,是因为如果使用sigmoid函数或者tanh函数作为激活函数,W比较小,得到的|z|也比较小(靠近零点),而零点区域的梯度比较大,这样能大大提高梯度下降算法的更新速度,尽快找到全局最优解。如果W比较大,得到的|z|也比较大,附近曲线平缓,梯度较小,训练过程会慢很多。(激活函数为Relu或者Leaky Relu函数不需要考虑这个问题)
三、循环
3.1 前向传播计算
3.2 计算代价函数
3.3 反向传播得到梯度。计算公式如下:
3.4 更新参数(梯度下降)
四、代码模块化
五、预测。使用正向传播来预测结果
六、运行模型查看其如何在二维数据集上运行。
与逻辑回归相比,可以看到准确率更高。
七、调整隐藏层大小
说明:
- 较大的模型(具有更多隐藏的单元)能够更好地拟合训练集,直到最终最大的模型过拟合数据为止。
- 隐藏层的最佳大小似乎在n_h = 5左右。的确,此值似乎很好地拟合了数据,而又不会引起明显的过度拟合。
- 之后将学习正则化,帮助构建更大的模型(例如n_h = 50)而不会过度拟合。