逻辑回归用于二分类任务(Matlab实现)

我在上一篇博客中详细介绍了逻辑回归的相关内容,这篇博客基于上一篇博客中的理论,用一个例子介绍如何将逻辑回归的理论实现到代码中,解决实际的二分类问题,编程工具为Matlab 2018b。

本文使用的例子是安德森鸢尾花卉数据集(iris),这个数据集中包含150个样本,对应着它的150行,每一行包含这个样本的4个特征(花萼长度、花萼宽度、花瓣长度、花瓣宽度)和样本的类别标签(0或1或2,它们分别代表不同的品种),所以数据集中存储的是一个尺寸为150×5的二维矩阵(数据集中部分样本的信息如下图所示)。由于我们此次只研究二分类问题,所以我们只选用数据集的前100个样本,即类别标签为“0”或“1”的样本。我们的任务是:建立一个逻辑回归分类器,这个分类器可以通过样本的4个特征值来预测样本的标签是“0”还是“1”。

iris数据集我已经上传到百度云,有需要的小伙伴可以自行下载。

链接:https://pan.baidu.com/s/15p8-JOoui8taai0tSADNyA 
提取码:k0cs 

代码如下:

% 读取数据集,变量data存储的是一个尺寸为150×5的矩阵
data = load('iris.data');
% 只取前100个样本的信息,即前100行,变量useful_data存储的是一个尺寸为100×5的矩阵
useful_data = data(1:100, :);
% 将特征与类别标签分开存放
% 特征存放在变量X中,X存储的是一个尺寸为100×4的矩阵
% 类别标签存放在变量y中,y存储的是一个尺寸为100×1的矩阵
X = useful_data(:, 1:4);
y = useful_data(:, 5);
% 变量m存储的是变量X的行数,在这里为100
% 变量n存储的是变量X的列数,在这里为4
[m,n] = size(X);
% 在变量X后加一列“1”,便于后面使用矩阵运算简化步骤
X = [X ones(m, 1)];
% 初始化模型参数β=(ω,b)为0
beta = zeros(n+1, 1);
% 设置梯度下降迭代次数为1500次
iteration = 1500;
% 设置学习率为0.01
alpha = 0.01;
% 开始循环,用梯度下降更新参数
for iter = 1 : iteration
    z = X * beta;
    h = 1 ./ (1 + exp(-z));
    error = h - y;
    graident = X' * error;
    beta = beta - alpha / m * graident;
end

上面的代码中,for循环里的内容并不是一步步死算的,而是直接根据我上一篇博客中推导出来的公式代进去算的,在这里我直接放公式了,具体推导过程可以参照我上一篇博客

\small \boldsymbol{\beta }_{j}=\boldsymbol{\beta }_{j}-\frac{\alpha }{m} \frac{\partial (-L(\boldsymbol{\beta }))}{\partial \boldsymbol{\beta }}=\boldsymbol{\beta }_{j}+\frac{\alpha }{m} \frac{\partial (L(\boldsymbol{\beta }))}{\partial \boldsymbol{\beta }}=\boldsymbol{\beta }_{j}+\frac{\alpha }{m}\sum_{i=1}^{m}\boldsymbol{\hat{x_{i}}}(y_{i}-\frac{e^{\boldsymbol{\beta }^T\boldsymbol{\hat{x_{i}}}}}{1+e^{\boldsymbol{\beta }^{T}\boldsymbol{\hat{x_{i}}}}})=\boldsymbol{\beta }_{j}+\frac{\alpha }{m}\sum_{i=1}^{m}\boldsymbol{\hat{x_{i}}}(y_{i}-h(\boldsymbol{\beta }^{T}\boldsymbol{\hat{x_{i}}}))=\boldsymbol{\beta }_{j}-\frac{\alpha }{m}\sum_{i=1}^{m}\boldsymbol{\hat{x_{i}}}(h(\boldsymbol{\beta }^{T}\boldsymbol{\hat{x_{i}}})-y_{i})

我运行上面的代码后,结果显示最终学到的参数\small \boldsymbol{\beta }=(0.3297,1.2073,-1.8493,-0.7988,0.2121)

也就是说,\small z=0.3297x_{1}+1.2073x_{2}-1.8493x_{3}-0.7988x_{4}+0.2121

也就是说,最终学到的模型为:

P(y=1\mid \boldsymbol{x})=\frac{e^{0.3297x_{1}+1.2073x_{2}-1.8493x_{3}-0.7988x_{4}+0.2121}}{1+e^{0.3297x_{1}+1.2073x_{2}-1.8493x_{3}-0.7988x_{4}+0.2121}}

让我们找两个样本来测试一下学得的参数是否能将样本正确分类,比如选择如下两个样本,它们的真实标签分别为“1”和“0”。

5.70003.80001.70000.30001
6.20002.20004.50001.50000

计算过程如下:

样本①:

\tiny z=0.3297\times5.7000+1.2073\times3.8000-1.8493\times1.7000-0.7988\times0.3000+0.2121=3.29568

P(y=1\mid \boldsymbol{x})=\frac{e^{3.29568}}{1+e^{3.29568}}\approx 0.9643

若取0.5为阈值,小于0.5的标签为“0”,大于0.5的标签为“1”,则网络预测结果正确,且与真实标签非常接近。

样本②:

\tiny z=0.3297\times6.2000+1.2073\times2.2000-1.8493\times4.5000-0.7988\times1.5000+0.2121=-4.60775

P(y=1\mid \boldsymbol{x})=\frac{e^{-4.60775}}{1+e^{-4.60775}}\approx 0.0099

若取0.5为阈值,小于0.5的标签为“0”,大于0.5的标签为“1”,则网络预测结果正确,且与真实标签非常接近。

综上所述,逻辑回归分类器可以用于鸢尾花品种的分类,且效果不错。

  • 27
    点赞
  • 252
    收藏
    觉得还不错? 一键收藏
  • 打赏
    打赏
  • 19
    评论
逻辑回归是一种用于二分类问题的机器学习算法。在Matlab中,可以使用逻辑函数和代价函数来实现逻辑回归。 逻辑函数(引用)是一个将输入变量和参数作为输入,并返回一个介于0和1之间的输出的函数。在这个函数中,使用了指数函数和除法运算来计算输出值。 代价函数(引用)用于计算逻辑回归模型的代价,它包括了两项,分别是真实值和预测值的对数的乘积之和以及正则化项。通过最小化代价函数,可以得到最佳的逻辑回归模型参数。 主函数(引用)是逻辑回归算法的主要实现部分。它包括了数据的预处理、参数初始化、迭代更新参数、计算代价和错误率等步骤。在迭代过程中,通过调整学习率和正则化参数来优化模型的性能。最后,使用预测值和真实值进行分类,并计算错误率和相关系数。 综上所述,逻辑回归Matlab中可以通过逻辑函数、代价函数和主函数来实现二分类任务。<span class="em">1</span><span class="em">2</span><span class="em">3</span> #### 引用[.reference_title] - *1* *2* *3* [逻辑回归实现二分类matlab代码)](https://blog.csdn.net/m0_63851155/article/details/123943731)[target="_blank" data-report-click={"spm":"1018.2226.3001.9630","extra":{"utm_source":"vip_chatgpt_common_search_pc_result","utm_medium":"distribute.pc_search_result.none-task-cask-2~all~insert_cask~default-1-null.142^v93^chatsearchT3_1"}}] [.reference_item style="max-width: 100%"] [ .reference_list ]

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

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

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

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

打赏作者

SongGu1996

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

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

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

打赏作者

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

抵扣说明:

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

余额充值