目录
1 理论
线性回归预测的是一个值,逻辑回归预测的是问题的 是否 问题
这里我们使用sigmode这个激活函数
我们把得到的值映射到0和1之间,现在我们得到了0和1之间的值,我们可以把这个值理解为 置信度
使用逻辑回归后我们的损失函数也要做出相应的修改,因为在逻辑回归中要求的结果不是0就是1,加入我们当前的值为0.3,那么它的均方差就是使用1和0.3进行运算,这个损失值比较小,所以这里我们使用交叉熵损失函数,交叉熵的损失值会更大
- 但是也不是不能使用均方差,只是如果使用均方差要进行的迭代,迭代次数会增多
- 上面公式中log的底数为e
我们举个例子,我们现在期望输出为 1(这个是P(x)) ,实际输出为 0.3(这个是q(x)),一共就一个样本,那么我们的H应该为 -1*log0.3 = 1.2,那么如果我们用均方差 (1-0.3)的平方/1 = 0.49,可以看出交叉熵的值要比均方差的值要大
上面这个图中起伏特别大的logistic(交叉熵损失),起伏不是很大的是L2(均方差损失,也叫二次损失,所以命名为L2),纵坐标是损失值,横坐标是预测数据与实际数据的差值
在代码中我们使用binary_crossentropy来表示二元交叉熵
2 代码实现
2.1 导入库
2.2 读取数据
我们这次用的数据集名称为credit-a.csv,这个是关于信用卡的数据集,我们先打开看一下
很明显是脱敏的数据,我们可以观察到,这个数据集的第一行不是标题,所以我们要这样读取数据
这样读取数据显示headers就会在头部显示出索引
我们的最后一列是逻辑值,一共有两种值分别为-1和1,我们可以使用value_counts获取所有值的数量
2.3 定义输入与输出
除了最后一列的前10列,都是我们的输入数据,前15列的数值会对最后的结果产生影响
输出是最后一列,我们要把-1的值替换为0
2.4 建立模型
建立顺序模型后,输入的形状是一定的,是我们的前15列的内容,激活函数是自定的,层数是自定的,前两层的神经元是自定的,最后一层(输出层)神经元是固定的,激活函数为sigmoid
我们看一下这个模型的概况
2.5 编译模型
在这里我们使用了metrics这个参数,这个参数是训练时的显示值,我们当前显示出每一轮的正确率acc
2.6 训练模型
我们此次训练可以发现训练过程中出现了正确率acc
我们的正确率从0.45上升到0.76,如果要增大正确率我们需要增加样本或增加epoch
2.7 绘制训练曲线的参数图
我们可以使用.history获取训练过程中参数的键值对,然后使用key()获取键
我们有loss和acc两个参数
我们先把loss值绘制成图
之后再绘制acc
我们现在使用模型预测一下
我们保留两位位小数整理一下,[0.65,0.45,0.50,0.26,0.53],我们如果以0.5(置信度)作为分界(0.5以及以上认定为1,0.5以下认定为0)
我们再看一下实际值
我们发现如果置信为0.5,我们的正确率是60%