机器学习(3):逻辑回归

server/2025/1/18 19:59:08/

1 介绍

        逻辑回归(Logistic Regression)是一种广泛应用于分类问题的监督学习算法。尽管名字中含有“回归”二字,但这并不意味着它用于解决回归问题。相反,逻辑回归专注于解决二元或多元分类问题,如邮件是垃圾邮件还是非垃圾邮件,一个交易是欺诈还是合法等。

        逻辑回归源于统计学,旨在模拟一个因变量和一个或多个自变量之间的关系。与线性回归不同,逻辑回归并不直接预测数值,而是估计样本属于某一类别的概率。这通常通过Sigmoid函数(或对数几率函数)来实现,该函数能够将任何实数映射到0和1之间。

        逻辑回归的算法实现通常基于最大似然估计(Maximum Likelihood Estimation, MLE),这是一种针对模型参数进行估计的优化算法。通过优化损失函数,算法试图找到最有可能解释观测数据的模型参数。

        虽然逻辑回归在许多方面都很优秀,但它也有其局限性。例如,它假定因变量和自变量之间存在线性关系,这在某些复杂场景下可能不成立。然而,通过特征工程和正则化等手段,这些问题往往可以得到缓解。

        总体而言,逻辑回归机器学习领域中不可或缺的工具,其背后的数学原理和实际应用都值得深入研究。通过本文,我们将深入探讨逻辑回归的各个方面,以期提供一个全面、深入且易于理解的视角。

2 概念

        逻辑回归是一种针对分类问题的监督学习模型。它起源于统计学,尤其是当我们希望预测一个二元输出时,逻辑回归成为一个非常实用的工具。

2.1 从线性回归到逻辑回归

        逻辑回归的思想是基于线性回归的,但有几个关键的不同点。在线性回归中,我们试图拟合一个线性方程来预测一个连续的输出值。然而,在逻辑回归中,我们不是直接预测输出值,而是预测输出值属于某一特定类别的概率。

        假设我们有一个用于检测某种疾病(如糖尿病)的医学测试。在这种情况下,线性回归可能会预测一个人患疾病的程度或严重性。但逻辑回归更进一步:它会预测一个人患疾病的概率,并根据这个概率进行分类——例如,概率大于0.5则判断为阳性。

2.2 Sigmoid 函数

        逻辑回归中最关键的组成部分是 Sigmoid(或称为 logistic)函数。这个函数接受任何实数作为输入,并将其映射到0和1之间,使其可以解释为概率。

        考虑一个学生根据其考试成绩被大学录取的例子。线性回归可能会直接预测录取概率,但数值可能会超过[0,1]的范围。通过使用 Sigmoid 函数,我们可以确保预测值始终在合适的范围内。

2.3 损失函数

        在逻辑回归中,最常用的损失函数是交叉熵损失(Cross-Entropy Loss)。该损失函数度量模型预测的概率分布与真实概率分布之间的差距。

        假设我们正在构建一个垃圾邮件过滤器。对于每封邮件,模型会预测这封邮件是垃圾邮件的概率。如果一封实际上是垃圾邮件(y=1)的邮件被预测为非垃圾邮件(yhat约等于0),损失函数的值会非常高,反之亦然。

2.4 优点与局限性

        优点

  1. 解释性强逻辑回归模型易于理解和解释。
  2. 计算效率:模型简单,训练和预测速度快。
  3. 概率输出:提供预测类别的概率,增加了解释性。

        局限性

  1. 线性边界逻辑回归假设数据是线性可分的,这在某些复杂场景下可能不成立。
  2. 特征选择逻辑回归对于不相关的特征和特征之间的相互作用比较敏感。

3 原理

        理解逻辑回归背后的数学原理是掌握这一算法的关键,包括概率模型、损失函数优化和特征选择。

3.1 概率模型

        想象你正在开发一个用于检测信用卡欺诈交易的模型。在这种情况下,(X) 可能包括交易金额、地点、时间等特征,模型会输出这笔交易是欺诈交易的概率。

3.2 损失函数与最大似然估计

        最常用于逻辑回归的损失函数是交叉熵损失。这其实是最大似然估计(MLE)在逻辑回归中的具体应用。

        假设你正在构建一个电子邮件分类器来区分垃圾邮件和正常邮件。使用交叉熵损失函数,你可以通过最大化似然函数来“教”模型如何更准确地进行分类。

3.3 梯度下降优化

        虽然逻辑回归通常不用于回归问题,但梯度下降的优化算法在很多其他类型的问题中也是通用的。例如,在预测股票价格时,同样可以使用梯度下降来优化模型参数。

3.4 特征选择与正则化

        特征选择在逻辑回归中非常重要,因为不相关或冗余的特征可能会导致模型性能下降。正则化是一种用于防止过拟合的技术,常见的正则化方法包括 L1 正则化和 L2 正则化。

        在房价预测模型中,可能有很多相关和不相关的特征,如面积、地段、周围学校数量等。通过使用正则化,你可以确保模型在拟合这些特征时不会过于复杂,从而提高模型的泛化能力。

4 python 实现

4.1 导入必要库

import numpy as np
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, classification_report

4.2 加载数据集

        我们将使用 Scikit-learn 自带的 Iris 数据集。Iris 数据集包含 150 个样本,每个样本有 4 个特征,目标是将样本分为 3 类。为了简化问题,我们只使用前两个特征,并将问题转化为二分类问题。

# 加载数据集
iris = load_iris()
X = iris.data[:, :2]  # 只使用前两个特征
y = (iris.target != 0) * 1  # 将目标转化为二分类问题# 划分训练集和测试集
X_train, X_test, y_train, y_test = train_test_split(X, y, test_size=0.3, random_state=42)

4.3 训练逻辑回归模型

# 创建逻辑回归模型
model = LogisticRegression()# 训练模型
model.fit(X_train, y_train)

4.4 模型评估

# 预测测试集
y_pred = model.predict(X_test)# 计算准确率
accuracy = accuracy_score(y_test, y_pred)
print(f"模型准确率: {accuracy:.2f}")# 混淆矩阵
conf_matrix = confusion_matrix(y_test, y_pred)
print("混淆矩阵:")
print(conf_matrix)# 分类报告
class_report = classification_report(y_test, y_pred)
print("分类报告:")
print(class_report)

4.5 可视化决策边界

# 可视化决策边界
x_min, x_max = X[:, 0].min() - 1, X[:, 0].max() + 1
y_min, y_max = X[:, 1].min() - 1, X[:, 1].max() + 1
xx, yy = np.meshgrid(np.arange(x_min, x_max, 0.01),np.arange(y_min, y_max, 0.01))Z = model.predict(np.c_[xx.ravel(), yy.ravel()])
Z = Z.reshape(xx.shape)plt.contourf(xx, yy, Z, alpha=0.8)
plt.scatter(X[:, 0], X[:, 1], c=y, edgecolors='k', marker='o')
plt.xlabel('Sepal length')
plt.ylabel('Sepal width')
plt.title('Logistic Regression Decision Boundary')
plt.show()

5 总结

  • 逻辑回归通过使用Sigmoid函数将线性回归的输出转换为概率值,用于解决二分类问题。
  • 逻辑回归的训练过程通过最小化对数损失函数来优化模型参数。
  • 梯度下降法是常用的优化方法,用来更新模型参数 ww 和 bb。
  • Python中的scikit-learn库提供了简单易用的接口来实现逻辑回归,并且能够轻松地进行模型训练、评估和可视化。

http://www.ppmy.cn/server/159440.html

相关文章

ReactiveSwift 简单使用

记录 ReactiveSwift 简单使用 导入 ReactiveSwift 库创建 TestViewModel 文件 enum JKTypeType: Int {case cloudcase devicecase weater }// 通过监听属性变化 class TestViewModel: NSObject {lazy var recordType: Property<JKTypeType> {return Property(recordTy…

浅谈计算机网络03 | 现代网络组成

现代网络组成 一 、网络生态体系1.1网络生态系统的多元主体1.2 网络接入设施的多样类型 二、现代网络的典型体系结构解析三、高速网络技术3.1 以太网技术3.2 Wi-Fi技术的深度剖析3.2.1 应用场景的多元覆盖3.2.2 标准升级与性能提升 3.3 4G/5G蜂窝网的技术演进3.3.1 蜂窝技术的代…

【专题一 递归】24. 两两交换链表中的节点

1.题目解析 2.讲解算法原理 让前两个节点后面的链表先逆置&#xff0c;并且把头结点返回把当前两个结点进行交换&#xff0c;并且找到新的头结点把后面链表直接添加到当前已经逆置的两个节点后面 3.编写代码 /*** Definition for singly-linked list.* public class ListN…

力扣动态规划-2【算法学习day.96】

前言 ###我做这类文章一个重要的目的还是给正在学习的大家提供方向&#xff08;例如想要掌握基础用法&#xff0c;该刷哪些题&#xff1f;建议灵神的题单和代码随想录&#xff09;和记录自己的学习过程&#xff0c;我的解析也不会做的非常详细&#xff0c;只会提供思路和一些关…

OpenAI推出首个AI Agent!日常事项自动化处理!

2025 年1月15日&#xff0c;OpenAI 正式宣布推出一项名为Tasks的测试版功能 。 该功能可以根据你的需求内容和时间实现自动化处理。比方说&#xff0c;你可以设置每天早晨 7 点获取天气预报&#xff0c;或定时提醒遛狗等日常事项。 看到这里&#xff0c;有没有一种熟悉的感觉&a…

【leetcode 16】1. 两数之和

原题链接 方法一&#xff1a;两层for循环方法 class Solution {public int[] twoSum(int[] nums, int target) {int lennums.length;int[] resnew int[2];for(int i0;i<len;i){for(int ji1;j<len;j){if(nums[i]nums[j]target){res[0]i;res[1]j;}}}return res;} }什么时候…

Lambda 架构之实时处理层的深度剖析:从原理到 Java 实战

一、背景知识 在当今的信息时代&#xff0c;数据的产生速度呈现爆炸式增长&#xff0c;并且越来越多的业务场景对数据处理的实时性提出了严格的要求。传统的数据处理架构往往侧重于批处理&#xff0c;对于实时数据的处理能力有限&#xff0c;难以满足诸如实时监控、即时推荐、…

MongoDB 学习指南:深入探索非关系型数据库

MongoDB学习资料 MongoDB学习资料 MongoDB学习资料 在当今数字化时代&#xff0c;数据量呈爆炸式增长&#xff0c;数据结构也变得愈发复杂多样。传统的关系型数据库在处理一些大规模、高并发以及非结构化数据时&#xff0c;逐渐显露出局限性。而 MongoDB 作为一款领先的非关系…