机器学习基础算法 (二)-逻辑回归

python 环境的配置参考 从零开始:Python 环境搭建与工具配置

在这里插入图片描述

逻辑回归是一种用于解决二分类问题的机器学习算法,它可以预测输入数据属于某个类别的概率。本文将详细介绍逻辑回归的原理、Python 实现、模型评估和调优,并结合垃圾邮件分类案例进行实战演练。

一、逻辑回归原理

在这里插入图片描述

逻辑回归使用 Sigmoid 函数将线性回归模型的输出转换为概率值。Sigmoid 函数的公式如下:

P(y=1|x) = 1 / (1 + exp(-(β₀ + β₁x₁ + ⋯ + βᵣ𝑥ᵣ)))

其中:

  • P(y=1|x) 是输入数据 x 属于类别 1 的概率
  • x₁, x₂, …, xᵣ 是特征
  • β₀ 是截距
  • β₁, β₂, …, βᵣ 是系数

逻辑回归模型通过学习训练数据,找到最佳的 β₀, β₁, …, βᵣ 参数值,使得模型预测的概率值与真实类别之间的误差最小化。

二、Python 实现逻辑回归模型

Python 中可以使用 scikit-learn 库来实现逻辑回归模型。以下是一个简单的示例:

from sklearn.linear_model import LogisticRegression
from sklearn.model_selection import train_test_split
from sklearn.metrics import accuracy_score, confusion_matrix

# 导入数据
# 假设 X 是特征矩阵,y 是目标变量向量

# 划分训练集和测试集
X_train, X_test, y_train, y_test = train_test_split(X, y, test_size=0.2, random_state=42)

# 创建逻辑回归模型
model = LogisticRegression()

# 训练模型
model.fit(X_train, y_train)

# 预测
y_pred = model.predict(X_test)

# 评估模型
accuracy = accuracy_score(y_test, y_pred)
cm = confusion_matrix(y_test, y_pred)

print('准确率:', accuracy)
print('混淆矩阵:\n', cm)

三、模型评估和调优

逻辑回归模型的评估指标主要包括:

  • 准确率: 衡量模型正确预测的样本比例。
  • 精确率: 衡量预测为正例的样本中真正例的比例。
  • 召回率: 衡量实际为正例的样本中被正确预测为正例的比例。
  • F1 值: 精确率和召回率的调和平均值。
  • ROC 曲线和 AUC: 评估模型在不同阈值下的分类性能。

为了提高模型的性能,可以进行以下调优:

  • 特征工程: 选择合适的特征,进行特征缩放、特征组合等操作。
  • 正则化: 添加 L1 或 L2 正则化项,防止模型过拟合。
  • 超参数调优: 调整模型的超参数,例如惩罚系数 C、求解器 solver 等。

四、案例实战:垃圾邮件分类

下面我们使用逻辑回归模型来进行垃圾邮件分类。

1. 导入必要的库

import pandas as pd
from sklearn.linear_model import LogisticRegression
from sklearn.model_selection import train_test_split
from sklearn.feature_extraction.text import TfidfVectorizer
from sklearn.metrics import accuracy_score, confusion_matrix

2. 加载数据

# 使用 pandas 加载数据
data = pd.read_csv('spam.csv')  # 将 'spam.csv' 替换为实际文件名

# 选择特征和目标变量
X = data['text']  # 使用邮件内容作为特征
y = data['spam']  # 是否为垃圾邮件作为目标变量

3. 特征提取

# 使用 TfidfVectorizer 将文本转换为数值特征
vectorizer = TfidfVectorizer()
X = vectorizer.fit_transform(X)

4. 划分训练集和测试集

X_train, X_test, y_train, y_test = train_test_split(X, y, test_size=0.2, random_state=42)

5. 创建和训练模型

model = LogisticRegression()
model.fit(X_train, y_train)

6. 预测和评估

y_pred = model.predict(X_test)

accuracy = accuracy_score(y_test, y_pred)
cm = confusion_matrix(y_test, y_pred)

print('准确率:', accuracy)
print('混淆矩阵:\n', cm)

完整代码:

import pandas as pd
import numpy as np
from sklearn.linear_model import LogisticRegression
from sklearn.model_selection import train_test_split
from sklearn.feature_extraction.text import TfidfVectorizer
from sklearn.metrics import accuracy_score, confusion_matrix

# 加载数据
data = pd.read_csv('spam.csv')

# 数据诊断
print("原始数据形状:", data.shape)
print("缺失值统计:\n", data.isnull().sum())
print("\n原始数据前5行:\n", data.head())

# 清理数据
# 1. 检查spam列的值
print("\nSpam列的唯一值:", data['spam'].unique())

# 2. 填充spam列的缺失值(假设缺失值为非垃圾邮件)
data['spam'] = data['spam'].fillna(0)

# 3. 确保spam列为数值型且只包含0和1
data['spam'] = pd.to_numeric(data['spam'], errors='coerce')
data = data[data['spam'].isin([0, 1])]

# 4. 删除text列中的缺失值
data = data.dropna(subset=['text'])

# 验证清理后的数据
print("\n清理后数据形状:", data.shape)
print("清理后spam分布:\n", data['spam'].value_counts())

# 特征提取和模型训练(仅在数据量足够时执行)
if len(data) > 1:
    X = data['text']
    y = data['spam'].values

    vectorizer = TfidfVectorizer(max_features=5000)
    X = vectorizer.fit_transform(X)

    # 划分训练集和测试集(如果数据量太少,增加test_size)
    test_size = 0.2 if len(data) > 10 else 0.1
    X_train, X_test, y_train, y_test = train_test_split(
        X, y, test_size=test_size, random_state=42
    )

    # 创建和训练模型
    model = LogisticRegression(max_iter=1000)
    model.fit(X_train, y_train)

    # 评估模型
    y_pred = model.predict(X_test)
    print("\n模型评估:")
    print("准确率:", accuracy_score(y_test, y_pred))
    print("混淆矩阵:\n", confusion_matrix(y_test, y_pred))
else:
    print("\n错误:数据量不足,无法训练模型")

完整的代码: LogisticRegression

总结:

本文介绍了逻辑回归的原理、Python 实现、模型评估和调优,并通过垃圾邮件分类案例演示了如何使用逻辑回归模型进行分类。逻辑回归是一种简单有效的二分类算法,在许多领域都有广泛的应用。希望本文能帮助你理解逻辑回归,并能够使用 Python 进行实际应用。

想要系统学习AI算法Python实现?这个专栏将带你学习机器学习基础算法、深度学习基础算法、强化学习基础算法、模型优化与调参。每个都将包括原理、算法和实战!

点击进入:AI算法Python实现
点击进入:机器学习基础算法 (一)-线性回归

本文为原创内容,未经许可不得转载。

本文来自互联网用户投稿,该文观点仅代表作者本人,不代表本站立场。本站仅提供信息存储空间服务,不拥有所有权,不承担相关法律责任。如若转载,请注明出处:/a/941055.html

如若内容造成侵权/违法违规/事实不符,请联系我们进行投诉反馈qq邮箱809451989@qq.com,一经查实,立即删除!

相关文章

《机器学习》支持向量机

目录 结构风险(Structural Risk)和经验风险(Empirical Risk) 经验风险(Empirical Risk): 结构风险(Structural Risk): L0范数: L0范数是指向…

Converseen:全能免费批量图像处理专家

还在为繁琐的图像处理任务而烦恼吗?Converseen 是一款功能卓越且完全免费的批量图像处理软件,它以其卓越的易用性、惊人的处理速度和强大的实用性赢得了用户的广泛赞誉。无论您是专业摄影师、设计师,还是仅仅需要处理大量图片,Con…

Linux下基于最新稳定版ESP-IDF5.3.2开发esp32s3入门任务间的通讯-信号量【入门三】

继续上一篇任务创建 【Linux下基于最新稳定版ESP-IDF5.3.2开发esp32s3入门任务创建【入门二】-CSDN博客】 今天要实现再创建一个任务。【二值和互斥都进行测试】 ①、通过任务A发送一个信号量,另一个任务得到信号量后再发送helloworld。 ②、两个任务通过互斥信…

windows安装Elasticsearch及增删改查操作

1.首先去官网下载Elasticsearch 下载地址 我这里选择的是7.17.18 选择windows版本 下载完成后解压是这样的 下载完成后点击elasticsearch.bat启动elasticsearch服务 输入http://localhost:9200看到如下信息说明启动成功。 还有记得修改elasticsearch.yml文件,…

虚拟机VMware的安装问题ip错误,虚拟网卡

要么没有虚拟网卡、有网卡远程连不上等 一般出现在win11 家庭版 1、是否IP错误 ip addr 2、 重置虚拟网卡 3、查看是否有虚拟网卡 4、如果以上检查都解决不了问题 如果你之前有vmware 后来卸载了,又重新安装,一般都会有问题 卸载重装vmware: 第一…

户籍管理系统的设计与实现【源码+文档+部署讲解】

目 录 摘 要 Abstract 1 系统大概 1.1 系统背景 1.2 研究意义 1.3 本文结构 1.4 开发平台简介 1.4.1 Java语言的特点 1.4.2 J2EE概述 1.4.3 B/S结构概述 1.4.4 MySQL 1.4.5 Tomcat 1.4.6 JSP.NET 1.4.7 开发流程 1.4.8 Eclipse简介 1.4.9 of…

【Rust自学】5.1. 定义并实例化struct

喜欢的话别忘了点赞、收藏加关注哦,对接下来的教程有兴趣的可以关注专栏。谢谢喵!(・ω・) 5.1.1. 什么是struct struct的中文意思为结构体,它是一种自定义的数据类型,它允许程序为相关联的值命名和打包&am…

【自动驾驶】单目摄像头实现自动驾驶3D目标检测

🍑个人主页:Jupiter. 🚀 所属专栏:传知代码 欢迎大家点赞收藏评论😊 目录 概述算法介绍演示效果图像推理视频推理 核心代码算法处理过程使用方式环境搭建下载权重文件pytorch 推理(自动选择CPU或GPU&#x…

Python+OpenCV系列:AI看图识人、识车、识万物

在人工智能风靡全球的今天,用 Python 和 OpenCV 结合机器学习实现物体识别,不仅是酷炫技能,更是掌握未来的敲门砖。本篇博文手把手教你如何通过摄像头或图片输入,识别人、动物、车辆及其他物品,让你的程序瞬间具备 AI …

永磁同步电机负载估计算法--自适应扩张状态观测器

一、 原理介绍 在线性扩张观测器中,LESO观测器增益ω0 决定了观测器的跟踪速度,ω0 越大,观测器估计精度越高, 抗干扰能力越强,瞬态响应速度加快,过大则会引入高频噪声使系统不稳定。为使观测器在全速域内…

【Spring事务】深入浅出Spring事务从原理到源码

什么是事务 保证业务操作完整性的一种数据库机制 (driver 驱动)事务特定 ACID A 原子性 (多次操作 要不一起成功 要不一起失败 (部分失败 savepoint)) C 一致性 (事务开始时数据状态&#xff0c…

Apache解析漏洞(apache_parsingCVE-2017-15715)

apache_parsing 到浏览器中访问网站 http://8.155.8.239:81/ 我们写一个木马 1.php.jpg 我们将写好的木马上传 会得到我们上传文件的路径 我们访问一下 发现上传成功 发现木马运行成功,接下来使用蚁剑连接我们的图片马 获取 shell 成功 CVE-2013-454 我们还是到…

CCF-GESP 等级考试 2023年9月认证C++二级真题解析

2023年9月真题 一、单选题(每题2分,共30分) 正确答案:D 解析:考察知识点:计算机基础 本题属于考察计算机基础知识。中国第一台计算机通用数字电子计算机于 1958 年 6 月由中科院计算所研制成功。那时候的逻…

linux环境使用yum方式安装nginx

linux环境使用yum方式安装nginx 一、nginx官网 二、nginx安装 点击首页的 Docs 或者 install 都可以,最终都是进入到Installing nginx页面 因为安装的服务器环境是linux centos 所以选择 Installation on Linux下面 packages 跳转链接 点击packages后 最终会跳转…

CS 144 check6: buiding an IP router

Lecture Notes Exercises 路由器的任务是根据路由表转发接收到的数据报:路由表是一系列规则,用于指导路由器针对任何给定的数据报应如何进行转发。 发送出什么接口。下一跳的IP地址。 这个check的工作是实现一个路由器,它可以为任何给定的…

Android Studio IDE环境配置

​需要安装哪些东西: Java jdk Java Downloads | OracleAndroid Studio 下载 Android Studio 和应用工具 - Android 开发者 | Android DevelopersAndroid Sdk 现在的Android Studio版本安装时会自动安装,需要注意下安装的路径Android Studio插件…

时钟周期、机器周期及指令周期是什么关系?

组成原理中,时钟周期、机器周期和指令周期是三个至关重要的概念,它们共同定义了计算机执行指令的基本时间框架。本文将对这三个周期进行详细介绍,并展示它们的工作原理。 一、时钟周期(Clock Cycle) 定义与作用 主…

YOLOv8改进,YOLOv8引入Hyper-YOLO的MANet混合聚合网络+HyperC2Net网络

摘要 理论介绍 MANet 的目标是通过多种卷积操作的协同作用,提高特征提取能力,并加强梯度流动,从而提升模型在不同层次的特征表示和语义深度。MANet 结合了三种卷积变体,通过混合使用它们来提高视觉特征的多样性和信息流动性。 HyperC2Net 的主要目标是通过超图结构对多层次…

挑战一个月基本掌握C++(第六天)了解函数,数字,数组,字符串

一 C函数 函数是一组一起执行一个任务的语句。每个 C 程序都至少有一个函数,即主函数 main() ,所有简单的程序都可以定义其他额外的函数。 您可以把代码划分到不同的函数中。如何划分代码到不同的函数中是由您来决定的,但在逻辑上&#xff…

vue的ElMessage的css样式不生效

我使用elementplus,是使用的用哪个单独引入的,然后表单校验时候警告的css不生效,就是这个效果 反复看视频的引入也没发现问题,后来才知道需要这个引入 import { ElMessage } from "element-plus"; import element-pl…