首页
学习
活动
专区
工具
TVP
发布
社区首页 >专栏 >不会Python没问题!用Excel实现简单的逻辑回归!

不会Python没问题!用Excel实现简单的逻辑回归!

作者头像
石晓文
发布2019-06-17 15:49:01
1K0
发布2019-06-17 15:49:01
举报
文章被收录于专栏:小小挖掘机小小挖掘机

上一篇文章中,咱们通过Excel来演示了一下Transformer,有群友反馈:

所以,今天这篇文章中,咱们就先来用Excel来实现一个简单的逻辑回归模型。咱们由简到繁,一步步来。

1、Base模型

咱们先来尝试实现一个Base的逻辑回归模型,即单步更新的模型。这里咱们使用鸢尾花数据集。但鸢尾花数据集中一共三类,咱们图个简单,使用前两类的数据集,把setosa类标记为0,另一类标记为1,并选择正负样本各10条。excel中的数据如下:

然后,设定一个初始的预估值,咱们争取让预估值在[-0.5,0.5)之间:

每个参数都这么处理后,咱们复制粘贴一遍得到的参数,要不每次动excel,参数都会跟着刷新,粘贴方式选择只有值:

有了样本和参数,咱们可以来计算预估值了,先回顾一下逻辑回归的预估值(即预测为1的概率)计算公式:

在excel中,实现类似这种w*x,需要使用sumproduct函数,举个简单的例子:

这样的结果就是2 * 2 + 3 * 3 + 4 * 4 + 5 * 5 = 54

因此,计算逻辑回归的预估值,在excel中可用下面的公式:

这样,咱们就计算好每个样本的预估值了:

下一步是计算单样本的loss,公式如下(少了一个负号):

在excel中,使用下面的公式:

可以看到,这里加入了一个if判断,如果预估值和实际值相同,则误差为0,如果不加这个,会出现什么情况呢:

所以一定要加上这个IF判断。

好了,这时候,咱们已经计算好单个样本的预估值及损失了:

模型的总损失就是单样本损失的平均值。

接下来的任务是通过梯度下降法对参数进行更新。首先设定一个学习率:

这里学习率不宜设置的太大。

随后时计算梯度,逻辑回归中,每个参数的梯度计算如下:

上面的式子意思就是说,当要更新第j个参数时,对每个样本i,我们先计算其预估值和实际值的差,再乘上样本i第j个特征值,随后对每个样本计算后再取平均值作为第j个参数的梯度。咱们可以把平均值拆分为两部分,一部分是预估值 * 特征值,一部分是实际值 * 特征值,因此,我们之前讲过的sumproduct函数又派上用场了,梯度计算如下:

对每个参数都执行一次,我们就得到了每个参数的梯度:

接下来,咱们要计算更新后的参数,计算公式如下:

那么,在excel中,同样对参数进行更新(下图中的K11,应该用$进行锁定):

接下来,要把“更新后参数”那一行对应的参数,复制到“参数”那一行。直接复制是不行的,会出现下面的问题:

我们要选择只粘贴值:

你有没有发现,但我们粘贴值过去的时候,“梯度”和“更新后参数”那一行变了,没错,因为参数那一行的变动,导致整个梯度、预估值、损失等都变了,此时的梯度等已经是下一轮的梯度了。

所以!要想实现不断的更新,其实关键的一步就是把“更新后参数”那一行只复制值到“参数”那一行,但我们总不能手动复制吧,想要更方便的话,就是将其变为一个快捷键,实现一键更新!这时候录制宏功能就来了!

接下来我们就可以通过刚才设置的快捷键command + option + e来不断更新参数了,也可以发现,咱们的loss在不断下降。这样一个简单的逻辑回归过程就实现了!

咱们现在实现的一个功能,还比较简单,只能通过单步运算来优化参数。像一次运行多步、正则项、early stop、绘制损失函数等等还没有实现。如果您喜欢,在留言里面告诉我,我会在后续的文章中不断完善目前的成果!

本文参与 腾讯云自媒体分享计划,分享自微信公众号。
原始发表:2019-06-14,如有侵权请联系 cloudcommunity@tencent.com 删除

本文分享自 小小挖掘机 微信公众号,前往查看

如有侵权,请联系 cloudcommunity@tencent.com 删除。

本文参与 腾讯云自媒体分享计划  ,欢迎热爱写作的你一起参与!

评论
登录后参与评论
0 条评论
热度
最新
推荐阅读
目录
  • 1、Base模型
领券
问题归档专栏文章快讯文章归档关键词归档开发者手册归档开发者手册 Section 归档