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

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'].valuesvectorizer = TfidfVectorizer(max_features=5000)X = vectorizer.fit_transform(X)# 划分训练集和测试集(如果数据量太少,增加test_size)test_size = 0.2 if len(data) > 10 else 0.1X_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实现
点击进入:机器学习基础算法 (一)-线性回归

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

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

如若内容造成侵权/违法违规/事实不符,请联系多彩编程网进行投诉反馈email:809451989@qq.com,一经查实,立即删除!

相关文章

BiTCN-BiGRU基于双向时间卷积网络结合双向门控循环单元的数据多特征分类预测(多输入单输出)

Matlab实现BiTCN-BiGRU基于双向时间卷积网络结合双向门控循环单元的数据多特征分类预测(多输入单输出) 目录 Matlab实现BiTCN-BiGRU基于双向时间卷积网络结合双向门控循环单元的数据多特征分类预测(多输入单输出)分类效果基本描述…

51c大模型~合集94

我自己的原文哦~ https://blog.51cto.com/whaosoft/12897659 #D(R,O) Grasp 重塑跨智能体灵巧手抓取,NUS邵林团队提出全新交互式表征,斩获CoRL Workshop最佳机器人论文奖 本文的作者均来自新加坡国立大学 LinS Lab。本文的共同第一作者为上海交通大…

【大学英语】英语范文十八篇,书信,议论文,材料分析

关注作者了解更多 我的其他CSDN专栏 过程控制系统 工程测试技术 虚拟仪器技术 可编程控制器 工业现场总线 数字图像处理 智能控制 传感器技术 嵌入式系统 复变函数与积分变换 单片机原理 线性代数 大学物理 热工与工程流体力学 数字信号处理 光电融合集成电路…

一起学Git【第一节:Git的安装】

Git是什么? Git是什么?相信大家点击进来已经有了初步的认识,这里就简单的进行介绍。 Git是一个开源的分布式版本控制系统,由Linus Torvalds创建,用于有效、高速地处理从小到大的项目版本管理。Git是目前世界上最流行…

【day11】面向对象编程进阶(继承)

概述 本文深入探讨面向对象编程的核心概念,包括继承、方法重写、this和super关键字的使用,以及抽象类和方法的定义与实现。通过本文的学习,你将能够: 理解继承的优势。掌握继承的使用方法。了解继承后成员变量和成员方法的访问特…

随手记:小程序兼容后台的wangEditor富文本配置链接

场景&#xff1a; 在后台配置wangEditor富文本&#xff0c;可以文字配置链接&#xff0c;图片配置链接&#xff0c;产生的json格式为&#xff1a; 例子&#xff1a; <h1><a href"https://uniapp.dcloud.net.cn/" target"_blank"><span sty…

6.8 Newman自动化运行Postman测试集

欢迎大家订阅【软件测试】 专栏&#xff0c;开启你的软件测试学习之旅&#xff01; 文章目录 1 安装Node.js2 安装Newman3 使用Newman运行Postman测试集3.1 导出Postman集合3.2 使用Newman运行集合3.3 Newman常用参数3.4 Newman报告格式 4 使用定时任务自动化执行脚本4.1 编写B…

计算机网络之王道考研读书笔记-2

第 2 章 物理层 2.1 通信基础 2.1.1 基本概念 1.数据、信号与码元 通信的目的是传输信息。数据是指传送信息的实体。信号则是数据的电气或电磁表现&#xff0c;是数据在传输过程中的存在形式。码元是数字通信中数字信号的计量单位&#xff0c;这个时长内的信号称为 k 进制码…

法规标准-C-NCAP评测标准解析(2024版)

文章目录 什么是C-NCAP&#xff1f;C-NCAP 评测标准C-NCAP评测维度三大维度的评测场景及对应分数评星标准 自动驾驶相关评测场景评测方法及评测标准AEB VRU——评测内容(测什么&#xff1f;)AEB VRU——评测方法(怎么测&#xff1f;)车辆直行与前方纵向行走的行人测试场景&…

第十七届山东省职业院校技能大赛 中职组“网络安全”赛项任务书正式赛题

第十七届山东省职业院校技能大赛 中职组“网络安全”赛项任务书-A 目录 一、竞赛阶段 二、竞赛任务书内容 &#xff08;一&#xff09;拓扑图 &#xff08;二&#xff09;模块A 基础设施设置与安全加固(200分) &#xff08;三&#xff09;B模块安全事件响应/网络安全数据取证/…

Halcon例程代码解读:安全环检测(附源码|图像下载链接)

安全环检测核心思路与代码详解 项目目标 本项目的目标是检测图像中的安全环位置和方向。通过形状匹配技术&#xff0c;从一张模型图像中提取安全环的特征&#xff0c;并在后续图像中识别多个实例&#xff0c;完成检测和方向标定。 实现思路 安全环检测分为以下核心步骤&…

Java——多线程进阶知识

目录 一、常见的锁策略 乐观锁VS悲观锁 读写锁 重量级锁VS轻量级锁 总结&#xff1a; 自旋锁&#xff08;Spin Lock&#xff09; 公平锁VS非公平锁 可重入锁VS不可重入锁 二、CAS 何为CAS CAS有哪些应用 1&#xff09;实现原子类 2&#xff09;实现自旋锁 CAS的ABA…

达梦 本地编码:PG_GBK, 导入文件编码:PG_UTF8错误

问题 达梦 本地编码&#xff1a;PG_GBK, 导入文件编码&#xff1a;PG_UTF8错误 解决 右键管理服务器 查看配置 新建一个数据库实例&#xff0c;配置跟之前的保持一致 新建一个用户&#xff0c;跟以前的用户名一样 在用户上&#xff0c;右键导入&#xff0c;选择dmp的位置 导…

深度学习卷积神经网络CNN之MobileNet模型网络模型详解说明(超详细理论篇)

1.MobileNet背景 2.MobileNet V1论文 3. MobileNett改进史 4. MobileNet模型结构 5. 特点&#xff08;超详细创新、优缺点及新知识点&#xff09; 一、MobileNet背景 随着移动设备的普及&#xff0c;深度学习模型的应用场景逐渐扩展至移动端和嵌入式设备。然而&#xff0c;传统…

垂起固定翼无人机大面积森林草原巡检技术详解

垂起固定翼无人机大面积森林草原巡检技术是一种高效、精准的监测手段&#xff0c;以下是对该技术的详细解析&#xff1a; 一、垂起固定翼无人机技术特点 垂起固定翼无人机结合了多旋翼和固定翼无人机的优点&#xff0c;具备垂直起降、飞行距离长、速度快、高度高等特点。这种无…

kubernates实战

使用k8s来部署tomcat 1、创建一个部署&#xff0c;并指定镜像地址 kubectl create deployment tomcat6 --imagetomcat:6.0.53-jre82、查看部署pod状态 kubectl get pods # 获取default名称空间下的pods kubectl get pods --all-namespaces # 获取所有名称空间下的pods kubect…

数据挖掘之认识数据

在数据挖掘过程中&#xff0c;数据的认识是非常重要的一步&#xff0c;它为后续的数据分析、建模、特征选择等工作奠定基础。以鸢尾花数据集&#xff08;Iris Dataset&#xff09;数据集之鸢尾花数据集&#xff08;Iris Dataset&#xff09;-CSDN博客为例&#xff0c;下面将介绍…

统信UOS 1071 AI客户端接入本地大模型配置手册

文章来源&#xff1a;统信UOS 1071本地大模型配置手册 | 统信软件-知识分享平台 1. OS版本确认 1.1. 版本查看 要求&#xff1a;计算机&#xff0c;属性&#xff0c;查看版本&#xff08;1070,构建号> 101.100&#xff09; 2. UOS AI版本确认 UOS AI&#xff0c;设置&am…

定时任务——定时任务技术选型

摘要 本文深入探讨了定时任务调度系统的核心问题、技术选型&#xff0c;并对Quartz、Elastic-Job、XXL-Job、Spring Task/ScheduledExecutor、Apache Airflow和Kubernetes CronJob等开源定时任务框架进行了比较分析&#xff0c;包括它们的特点、适用场景和技术栈。文章还讨论了…

麒麟操作系统服务架构保姆级教程(二)sersync、lsync备份和NFS持久化存储

如果你想拥有你从未拥有过的东西&#xff0c;那么你必须去做你从未做过的事情 上篇文章我们说到rsync虽好&#xff0c;但是缺乏实时性&#xff0c;在实际应用中&#xff0c;咱们可以将rsync写进脚本&#xff0c;然后写进定时任务去备份&#xff0c;如果每天凌晨1&#xff1a;00…