Python从0到100(五十二):逻辑回归及鸢尾花数据集预测

逻辑回归是⼀种⽤于解决⼆分类问题的监督学习算法,其基本原理是使⽤ 逻辑函数(也称为Sigmoid函数) 来建模
因变量(输出)与⾃变量(输⼊)之间的概率关系。逻辑回归的⽬标是估计某个事件发⽣的概率,通常表示为0或
1,例如肿瘤是恶性(1)或良性(0)。

1.基本原理

逻辑回归基于以下思想:我们希望将线性组合的输出映射到⼀个介于0和1之间的概率值,以表示事件发⽣的可能性。为此,逻辑回归使⽤逻辑函数(Sigmoid函数)来执⾏这种映射。
逻辑回归的基本原理如下:

  1. 假设数据服从⼀个二项分布。
  2. 使⽤线性回归模型的线性组合来建模数据的对数⼏率。
  3. 对线性组合应⽤逻辑函数(Sigmoid函数),将连续的输出转换为概率值。
  4. 根据概率值进⾏分类,通常设置⼀个阈值来决定类别。

2.公式模型

逻辑回归的核⼼公式可以表示为:
在这里插入图片描述
在这个公式中:

  • P(y=1|X)是事件发⽣的概率,也就是因变量(输出)等于1的概率。
  • X是输⼊⾃变量(特征)的向量,包括x1,x2...xn
  • w0,w1....wn是模型的参数, w0是截距, w1....wn是⾃变量x1,x2...xn的权重。
  • e是⾃然对数的底(约等于2.71828)。

这个公式中的指数部分-(w0+w1x1+w2x2+...+wnxn)表示线性组合的结果,然后通过Sigmoid函数进⾏映射,将其压缩到0和1之间。
Sigmoid函数的数学表达式是:
在这里插入图片描述
其中, 是任何实数值。Sigmoid函数具有S形曲线,因此可以将线性组合的输出映射到0到1之间的概率值,使得逻辑回归可以⽤于⼆分类问题。
逻辑回归的训练⽬标是找到最佳的参数w0,w1....wn ,以最⼤程度地拟合观测数据,并使得预测的概率尽可能接近实际的类别标签。通常使⽤最⼤似然估计等⽅法来优化参数。
逻辑回归⼴泛⽤于许多领域,包括医学诊断、⾦融⻛险评估、⾃然语⾔处理、图像分类等,特别适⽤于⼆分类问题

3.优缺点

优点:

  1. 实现简单:逻辑回归是⼀种简单且易于实现的分类算法。
  2. 计算效率⾼:训练速度快,适⽤于⼤规模数据集。
  3. 输出结果具有概率意义:可以得到样本属于某个类别的概率,⽽不仅仅是⼀个硬分类结果。

缺点:

  1. 仅适⽤于⼆分类问题:逻辑回归通常只适⽤于解决⼆分类问题。
  2. 对特征空间的线性边界限制:逻辑回归假设特征之间的关系是线性的,对于⾮线性问题效果不佳。

4.适用场景

逻辑回归适⽤于以下场景:

  1. ⼆分类问题:当需要解决⼆分类问题时,逻辑回归是⼀个简单⽽有效的选择。
  2. 需要得到概率输出的场景:逻辑回归可以输出样本属于某个类别的概率,适⽤于需要概率预测的任务,如风险评估、客户流失预测等。
  3. 需要快速建⽴基准模型的情况下,逻辑回归也是⼀个不错的选择。

逻辑回归是⼀种简单⽽强⼤的分类算法,尤其适⽤于⼆分类问题和需要概率输出的场景。然而,在处理⾮线性问题时,逻辑回归的表现可能不如⼀些复杂的⾮线性模型。

5.逻辑回归及鸢尾花数据集预测

下⾯使⽤鸢尾花数据集(Iris dataset)。这个数据集包含了三种不同种类的鸢尾花的花萼⻓度和宽度。
⾸先加载了鸢尾花数据集,并选择了其中的两个特征(花萼⻓度和宽度)。然后我们训练了⼀个逻辑回归模型,并在测试集上进⾏了预测。接着,我们计算了模型的准确率,并绘制了决策边界,以便可视化模型的分类效果。

import numpy as np
import pandas as pd
import matplotlib.pyplot as plt
from sklearn.datasets import load_iris
from sklearn.model_selection import train_test_split
from sklearn.linear_model import LogisticRegression
from sklearn.metrics import accuracy_score, confusion_matrix
from matplotlib.colors import ListedColormap
# 加载鸢尾花数据集
iris = load_iris()
X = iris.data[:, :2] # 只选择前两个特征⽤于可视化
y = iris.target
# 划分训练集和测试集
X_train, X_test, y_train, y_test = train_test_split(X, y, test_size=0.2, random_state=42)
# 训练逻辑回归模型
lr = LogisticRegression()
lr.fit(X_train, y_train)
# 在测试集上进⾏预测
y_pred = lr.predict(X_test)
# 计算准确率
accuracy = accuracy_score(y_test, y_pred)
print("Accuracy:", accuracy)
# 绘制决策边界
x_min, x_max = X[:, 0].min() - 0.5, X[:, 0].max() + 0.5
y_min, y_max = X[:, 1].min() - 0.5, X[:, 1].max() + 0.5
xx, yy = np.meshgrid(np.arange(x_min, x_max, 0.01),
np.arange(y_min, y_max, 0.01))
Z = lr.predict(np.c_[xx.ravel(), yy.ravel()])
Z = Z.reshape(xx.shape)
# 绘制结果
plt.figure(figsize=(10, 6))
plt.contourf(xx, yy, Z, alpha=0.8, cmap=ListedColormap(('red', 'green', 'blue')))
plt.scatter(X[:, 0], X[:, 1], c=y, cmap=ListedColormap(('red', 'green', 'blue')),
edgecolors='k')
plt.xlabel('Sepal Length')
plt.ylabel('Sepal Width')
plt.title('Logistic Regression Decision Boundary')
plt.show()

在这里插入图片描述

  • 21
    点赞
  • 7
    收藏
    觉得还不错? 一键收藏
  • 打赏
    打赏
  • 0
    评论
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

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

打赏作者

是Dream呀

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

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

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

打赏作者

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

抵扣说明:

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

余额充值