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

作者|石晓文

来源|小小挖掘机(ID:wAIsjwj)


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


640?wx_fmt=png


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


Base模型


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


640?wx_fmt=png


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


640?wx_fmt=png


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

640?wx_fmt=png


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


640?wx_fmt=png


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

640?wx_fmt=png


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


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


640?wx_fmt=png


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


640?wx_fmt=png


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


640?wx_fmt=png


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


640?wx_fmt=png


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


640?wx_fmt=png


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


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


640?wx_fmt=png


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


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


640?wx_fmt=png


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


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


640?wx_fmt=png


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


640?wx_fmt=png


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


640?wx_fmt=png


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

640?wx_fmt=png


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


640?wx_fmt=png


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

640?wx_fmt=png


我们要选择只粘贴值:


640?wx_fmt=png


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


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



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



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


(*本文仅代表作者观点,转载请联系原作者)


在线公开课


640?wx_fmt=jpeg


推荐阅读:


640?wx_fmt=png 你点的每个“在看”,我都认真当成了喜欢
  • 1
    点赞
  • 6
    收藏
    觉得还不错? 一键收藏
  • 0
    评论
好的,下面我为您介绍一下如何用Python实现逻辑回归。 我们可以使用Python中的sklearn库来实现逻辑回归。具体步骤如下: 1. 导入库和数据集 首先,需要导入必要的库,例如numpy、pandas、matplotlib和sklearn。然后,可以使用pandas库的read_csv()函数来读取数据集。 ```python import numpy as np import pandas as pd import matplotlib.pyplot as plt from sklearn.model_selection import train_test_split from sklearn.linear_model import LogisticRegression from sklearn.metrics import confusion_matrix, classification_report # 读取数据集 data = pd.read_csv('data.csv') ``` 2. 数据预处理 在进行逻辑回归之前,需要对数据进行一些预处理,例如处理缺失值、去除异常值和进行特征工程等。 ```python # 处理缺失值 data = data.dropna() # 特征选择 X = data[['feature1', 'feature2', ...]] y = data['label'] ``` 3. 划分训练集和测试集 为了评估模型的性能,需要将数据集划分为训练集和测试集。可以使用sklearn库的train_test_split()函数实现。 ```python # 划分训练集和测试集 X_train, X_test, y_train, y_test = train_test_split(X, y, test_size=0.2, random_state=0) ``` 4. 模型训练和预测 使用sklearn库的LogisticRegression()函数来创建逻辑回归模型,并使用训练集进行训练。然后,使用测试集进行预测,并计算模型的准确率、精确率、召回率和F1得分等指标。 ```python # 创建逻辑回归模型 lr = LogisticRegression() # 训练模型 lr.fit(X_train, y_train) # 预测测试集 y_pred = lr.predict(X_test) # 计算模型指标 print('Accuracy:', lr.score(X_test, y_test)) print(confusion_matrix(y_test, y_pred)) print(classification_report(y_test, y_pred)) ``` 5. 可视化结果 最后,可以使用matplotlib库将结果可视化,例如绘制ROC曲线和混淆矩阵等。 ```python # 绘制ROC曲线 from sklearn.metrics import roc_curve, auc fpr, tpr, thresholds = roc_curve(y_test, y_pred) roc_auc = auc(fpr, tpr) plt.plot(fpr, tpr, color='darkorange', lw=2, label='ROC curve (area = %0.2f)' % roc_auc) plt.plot([0, 1], [0, 1], color='navy', lw=2, linestyle='--') plt.xlabel('False Positive Rate') plt.ylabel('True Positive Rate') plt.title('Receiver operating characteristic') plt.legend(loc="lower right") plt.show() # 绘制混淆矩阵 import seaborn as sns cm = confusion_matrix(y_test, y_pred) sns.heatmap(cm, annot=True, cmap='Blues') plt.xlabel('Predicted') plt.ylabel('True') plt.show() ``` 以上就是用Python实现逻辑回归的步骤。希望对您有所帮助。

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

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

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

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

余额充值