6.逻辑回归与交叉熵

目录

1  理论

2  代码实现

2.1  导入库

2.2  读取数据

2.3  定义输入与输出

2.4  建立模型

2.5  编译模型

2.6  训练模型

2.7  绘制训练曲线的参数图


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%

  • 0
    点赞
  • 1
    收藏
    觉得还不错? 一键收藏
  • 打赏
    打赏
  • 0
    评论

“相关推荐”对你有帮助么?

  • 非常没帮助
  • 没帮助
  • 一般
  • 有帮助
  • 非常有帮助
提交
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包

打赏作者

Suyuoa

你的鼓励将是我创作的最大动力

¥1 ¥2 ¥4 ¥6 ¥10 ¥20
扫码支付:¥1
获取中
扫码支付

您的余额不足,请更换扫码支付或充值

打赏作者

实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值