从零入手人工智能(4)—— 逻辑回归

news2024/10/5 15:22:30

1.小故事

一家金融科技公司,公司的首席执行官找到团队提出了一个紧迫的问题:“我们如何提前知道哪些客户可能会违约贷款?” 这让团队陷入了沉思,经过激烈讨论团队中的数据分析师提议:“我们可以尝试使用逻辑回归来预测客户的违约风险。
在这里插入图片描述
团队成员们听后都点头表示赞同,决定尝试这个方法,于是他们开始忙碌地收集客户数据,包括信用评分、收入情况、贷款历史记录等。数据堆积如山,他们耐心地清洗、整理,他们准备用这些数据来“喂养”他们的逻辑回归模型。经过不懈的努力,模型终于建立起来了,它就像一个刚刚诞生的智能生命,开始从数据中学习,逐渐成长。

团队紧张地观察着模型的每一次迭代,每一次优化。终于,在一次次的试验和改进后,模型预测的准确率越来越高。从此,这家金融科技公司利用这个逻辑回归模型,在贷款审批过程中,更加精准地评估了客户的信用风险。公司因此大大降低了坏账率,业绩也随之飙升。而那个逻辑回归模型,也在金融科技领域绽放着它的光芒。

2.逻辑回归

逻辑回归(Logistic Regression)是一种用于处理二分类问题的统计学习方法。虽然其名字中带有“回归”,但它其实是一种分类算法,用于处理二分类或多分类问题,主要用于预测数据实例属于某个特定类别的概率。它的基本原理是:对于给定的输入变量(也称为特征),逻辑回归模型会输出一个介于0和1之间的概率值,这个概率值表示样本属于某个特定类别的可能性。
逻辑回归具有以下优点
直观性:逻辑回归模型简单直观,易于理解。它基于线性回归模型,通过Sigmoid函数将线性回归的连续输出转换为0到1之间的概率值,从而实现对二分类问题的建模。
易实现性:逻辑回归的计算过程相对简单,容易编程实现。许多编程语言和机器学习库都提供了逻辑回归的实现,使得开发者可以快速地构建和训练模型。
计算效率高:逻辑回归的训练过程通常较快,能够快速地处理大量数据。这使得逻辑回归在处理大规模数据集时具有较高的效率。
对缺失值和异常值不敏感:逻辑回归对数据的缺失值和异常值具有一定的鲁棒性。在训练过程中,逻辑回归可以通过正则化等方法来减少过拟合现象,从而提高模型的泛化能力。
稳定性:逻辑回归模型通常具有较好的稳定性,即在不同的数据集上训练得到的模型差异较小。这使得逻辑回归在实际应用中具有更好的可靠性和一致性。
在这里插入图片描述
逻辑回归在人工智能医疗诊断中的应用非常广泛,其通过处理和分析医疗数据,为医生提供决策支持,提高诊断的准确性和效率。例如,通过收集个体的年龄、性别、家族病史、生活习惯、生理指标(如血压、血糖、血脂等)等数据,结合大量的患病数据,可以建立逻辑回归模型来评估个体在未来一段时间内患病或遭受某种不良事件的风险
逻辑回归也广泛应用于人工智能电商推荐中,如从这用户的基本信息(性别、年龄、地域等)、浏览商品的类别、价格、品牌等。使用逻辑回归模型,根据这些特征来预测用户可能对哪些商品感兴趣
在这里插入图片描述

3.依赖工具库

本文中的实战代码依赖了4个工具库:scikit-learn、pandas、matplotlib、numpy
在这里插入图片描述

Scikit-learn(也称sklearn)是一个针对Python编程语言的免费软件机器学习库。它提供了各种分类、回归和聚类算法,包含支持向量机、随机森林、梯度提升、k均值和DBSCAN等。

Matplotlib是一个Python的2D绘图库,可以绘制各种图形,如折线图、直方图、功率谱、条形图、散点图等。

Pandas是一个基于NumPy的Python数据分析包,提供了高性能的数据结构和数据分析工具。提供了Series(一维数组)和DataFrame(二维表格型数据结构)两种主要的数据结构。支持数据清洗、转换、筛选、排序、分组、聚合等操作。

Numpy是Python的一个开源数值计算扩展,用于存储和处理大型矩阵。提供了N维数组对象(ndarray),支持大量的维度数组与矩阵运算。提供了数学函数库,支持线性代数、傅里叶变换等操作。
Seaborn建立在Matplotlib的基础之上,但提供了更高级别的API,它提供了多种常用的可视化方法,如散点图、折线图、直方图、核密度估计图、箱线图、热点图、线性回归图等。

首先确保编程环境已正确搭建,若编程环境尚未搭建完毕,建议参照《从零入手人工智能(2)——搭建开发环境》,文章链接如下:

https://blog.csdn.net/li_man_man_man/article/details/139537404?spm=1001.2014.3001.5502

4.程序流程

本文中的代码实现旨在展示逻辑回归算法的核心功能,入门版程序不超过30行代码。这个简短的代码片段实则包含了人工智能算法开发的重要三板斧:数据预处理、模型构建与训练、模型验证
在这里插入图片描述
数据预处理阶段:代码需要能够处理原始数据,可能包括数据的加载、转换、归一化等步骤,以确保输入到模型中的数据是符合算法要求的。
模型构建与训练阶段:涉及到了使用逻辑回归算法建立预测模型,并通过训练数据来优化模型的参数。
模型验证阶段:用于评估训练好的模型在数据预测上的准确性。绘制预测结果与实际结果之间的对比图等可视化手段。

5.入门例程

实例1

STEP1:自动生成了一组数据集,其中训练数据X包含两个特征数据。随后基于这两个特征之间的线性关系,通过一个预设的转换函数生成了目标变量Y。

STEP2:利用LogisticRegression方法建立逻辑回归模型,接着我们使用训练数据X和对应的Y来训练逻辑回归模型。模型训练完成后,我们采用合适的评估指标(如准确率)来评估模型的性能。

STEP3:直观地展示模型的预测效果,进行可视化分析。通过绘制决策边界,我们能够清晰地看到模型如何根据输入特征X的值来预测目标变量Y的分类。此外我们还可能绘制视化图表。

代码如下:


import numpy as np  
import matplotlib.pyplot as plt  
from sklearn.linear_model import LogisticRegression  
from sklearn.preprocessing import StandardScaler  
from sklearn.metrics import accuracy_score  
  
# 自动生成数据  
np.random.seed(0)  
n_samples = 100  
X = np.random.randn(n_samples, 2)  # 生成2个特征的数据  
  
# 创建一个简单的线性可分标签  
y = (X[:, 0] > 0).astype(int)  
  
# 数据标准化  
scaler = StandardScaler()  
X_scaled = scaler.fit_transform(X)  
  
# 训练逻辑回归模型  
model = LogisticRegression(solver='liblinear', max_iter=1000)  
model.fit(X_scaled, y)  

# 评估模型准确性    
y_pred = model.predict(X_scaled)  
accuracy = accuracy_score(y, y_pred)  
print(accuracy)  
  
# 可视化结果  
plt.figure(figsize=(10, 6))  
  
# 绘制散点图,根据标签上色  
colors = ['red' if label == 0 else 'blue' for label in y]  
plt.scatter(X_scaled[:, 0], X_scaled[:, 1], c=colors, edgecolor='k', s=50)  
  
# 创建一个网格来评估模型  
x_min, x_max = X_scaled[:, 0].min() - .5, X_scaled[:, 0].max() + .5  
y_min, y_max = X_scaled[:, 1].min() - .5, X_scaled[:, 1].max() + .5  
h = (x_max / (len(X_scaled) - 1)) / 20  
xx, yy = np.meshgrid(np.arange(x_min, x_max, h), np.arange(y_min, y_max, h))  
Z = model.predict(np.c_[xx.ravel(), yy.ravel()])  
Z = Z.reshape(xx.shape)  
  
# 绘制决策边界  
plt.contourf(xx, yy, Z, alpha=0.4)  
plt.contour(xx, yy, Z, colors='k', linestyles='--', levels=[.5])  
  
# 在每个数据点旁边添加标签值(可选)  
for i, txt in enumerate(y):  
    plt.text(X_scaled[i, 0], X_scaled[i, 1], txt, ha='center', va='bottom', fontsize=8)  
  
# 设置坐标轴标签和标题  
plt.xlabel('Feature 1')  
plt.ylabel('Feature 2')  
plt.title('Logistic Regression with 2 features')  
  
# 显示图形  
plt.show()

代码运行结果如下:
在这里插入图片描述

实例2

本实例与实例1基本一样,唯一的区别是:程序自动生成的训练数据X包含三个明确的数值特征,最后显示的是一个3D的可视化图表。
代码如下:

import numpy as np  
import matplotlib.pyplot as plt  
from sklearn.model_selection import train_test_split  
from sklearn.linear_model import LogisticRegression  
from sklearn.preprocessing import StandardScaler  
from mpl_toolkits.mplot3d import Axes3D  
from sklearn.metrics import accuracy_score    

# 自动生成数据  
np.random.seed(0)  
n_samples = 100  
X = np.random.randn(n_samples, 3)  # 生成3个特征的数据  
  
# 创建一个非线性可分的标签  
y = (X[:, 0]**2 + X[:, 1]**2 - 5*X[:, 2] > 0).astype(int)  
  
# 划分数据集为训练集和测试集(此处仅使用训练集)  
X_train, _, y_train, _ = train_test_split(X, y, test_size=0.5, random_state=42)  
  
# 数据标准化  
scaler = StandardScaler()  
X_train_scaled = scaler.fit_transform(X_train)  
  
# 训练逻辑回归模型  
model = LogisticRegression(solver='liblinear', max_iter=1000)  
model.fit(X_train_scaled, y_train)  

y_pred = model.predict(X_train_scaled)  # 预测标签  
  
accuracy = accuracy_score(y_train, y_pred)  
print(accuracy)
# 绘制数据点,根据标签上色  
fig = plt.figure(figsize=(10, 8))  
ax = fig.add_subplot(111, projection='3d')  
sc = ax.scatter(X_train_scaled[:, 0], X_train_scaled[:, 1], X_train_scaled[:, 2], c=y_train, cmap='viridis', edgecolor='k', s=50)  
  
# 添加坐标轴标签和标题  
ax.set_xlabel('Feature 1')  
ax.set_ylabel('Feature 2')  
ax.set_zlabel('Feature 3')  
ax.set_title('Logistic Regression with 3 features')  
  
# 随机选择几个点并显示它们的标签值  
for i, txt in enumerate(y_train[:5]):  # 只显示前5个点的标签值作为示例  
    ax.text(X_train_scaled[i, 0], X_train_scaled[i, 1], X_train_scaled[i, 2], txt, color='black')  
  
# 显示颜色条  
fig.colorbar(sc, ax=ax, shrink=0.5, aspect=5)  
  
# 显示图形  
plt.show()

代码运行结果如下:
在这里插入图片描述

6.进阶实战(乳腺癌检测)

本实战项目是使用威斯康星州癌症乳腺数据集利用逻辑回归模型预测癌症的良性和恶性。这些数据由威斯康星大学的研究人员捐赠,包括乳腺肿块细针抽吸物的数字化图像测量结果。癌症数据包括569例癌症活组织检查,每个活组织检查具有32个特征。一个特征是识别号,另一个是癌症诊断,30是数值实验室测量。诊断代码为“M”表示恶性,“B”表示良性。

为了减小数据复杂度,我们在威斯康星州癌症乳腺原始数据上进行了数据裁剪,只保留了12列数据。处理后的数据如下

569条样本,共12列数据,第1列用语检索的id(在数据计算中无用),第2列数据为诊断结果为“M”表示恶性,“B”表示良性,后面的10列分别是与肿瘤相关的验室测量的特征数据。
在这里插入图片描述

希望获取源码和数据表的朋友可以在评论区留言!!!

程序流程是数据预处理、模型构建与训练、模型验证

数据预处理:首先加载数据表breast-cancer-wiscons.csv ,随后将数据表中的diagnosis列赋值给 Y,同时将Y转换成0和1,最后将去掉diagnosis列和id列去掉后的数据赋值给X。完成数据赋值后,可视化X中10个特征变量之间的关系,代码运行如下图。
在这里插入图片描述
在这里插入图片描述
在这里插入图片描述

模型构建与训练:完成数据处理后,建立模型,训练模型并预测预测数据
在这里插入图片描述

模型验证:完成模型训练后,进行数据预测,最后我们使用混淆矩阵和ROC曲线可视化数据准确性。
在这里插入图片描述

在这里插入图片描述
在这里插入图片描述

希望获取源码和数据表的朋友可以在评论区留言!!!
希望获取源码和数据表的朋友可以在评论区留言!!!
希望获取源码和数据表的朋友可以在评论区留言!!!

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

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

相关文章

解决双击bootstrap.bat没有生成b2.exe文件

双击bootstrap.bat但是并没有没有生成b2.exe文件,会报如下错误: "cl" 不是内部或外部命令,也不是可运行的程序 或批处理文件。D:\cppsoft\boost_1_85_0\tools\build\src\engine>dir *.exe 驱动器 D 中的卷是 Data 卷的序列号是…

六、在Qt下通过PCL在VTK9.3.0下显示自己的pcd点云文件

前几天刚整理好VTK8.2.0,发现我们的项目使用的PCL自带的VTK是9.3.0的,脸黑了快 VTK8.2.0可参考该篇博文:五、在Qt下加载QVTKWidget控件(VTK8.2.0),生成Visual Studio项目,显示点云(C…

如何基于项目人力和管线方案选择FGUI和UGUI

1)如何基于项目人力和管线方案选择FGUI和UGUI 2)TMP字体出包丢失字体描边 3)如何将一张贴图经过Shader处理后的结果输出给另外一个Shader使用 4)为什么我的水这么干净,和UE教程里的有差别 这是第390篇UWA技术知识分享的…

ECharts Y轴倒置,X轴顶部,图表反向

1.配置: xAxis:{position: ‘top’} //让x轴在顶部 yAxis: { inverse:true} //让Y轴坐标为反向坐标 2.将数据的只转换成负值(不建议),显示的时候formatter里面在显示正值(不建议)

强化安全新篇章:韶关石油化工可燃气体报警器年检解析

韶关,这座位于广东省北部的城市,近年来在石油化工行业取得了显著的发展。 随着一批批大型石化企业的进驻和投产,韶关不仅成为了区域性的石化产业基地,也为地方经济带来了强劲的增长动力。 然而,随着石化产业的快速发…

使用asyncua模块的subscribe_data_change监控opcua的Server节点数据变化

报错信息如下; ERROR:asyncua.common.subscription:DataChange subscription created but handler has no datachange_notification method 上述报错原因在于创建监控句柄SubscriptionHandler类时,节点数据变化的函数名称有问题,不是默认的da…

【NLP练习】Transformer实战-单词预测

🍨 本文为🔗365天深度学习训练营 中的学习记录博客🍖 原作者:K同学啊 任务:自定义输入一段英文文本进行预测 一、定义模型 from tempfile import TemporaryDirectory from typing import Tuple from torch import nn…

DVWA 靶场 Open HTTP Redirect 通关解析

前言 DVWA代表Damn Vulnerable Web Application,是一个用于学习和练习Web应用程序漏洞的开源漏洞应用程序。它被设计成一个易于安装和配置的漏洞应用程序,旨在帮助安全专业人员和爱好者了解和熟悉不同类型的Web应用程序漏洞。 DVWA提供了一系列的漏洞场…

Nuxt快速学习开发---Nuxt3视图Views

Views Nuxt提供了几个组件层来实现应用程序的用户界面 默认情况下&#xff0c;Nuxt 会将app.vue文件视为入口点并为应用程序的每个路由呈现其内容 应用程序.vue <template> <div> <h1>Welcome to the homepage</h1> </div> </template> …

湖南科技大学24计算机考研情况,软工学硕考数二,分数线290分,录取均分321分!

湖南科技大学&#xff08;Hunan University of Science and Technology&#xff09;坐落在伟人故里、人文圣地湘潭&#xff0c;处于长株潭核心区域&#xff0c;比邻湘潭九华经济技术开发区&#xff08;国家级&#xff09;&#xff0c;是应急管理部、国家国防科技工业局与湖南省…

复分析——第6章—— Γ 函数和 ζ 函数(E.M. Stein R. Shakarchi)

第6章 Γ函数和Ζ函数(The Gamma and Zeta Functions) 毫不夸张地说&#xff0c;Γ函数和Ζ函数是数学中最重要的非初等函数之一。Γ函数在自然界中无处不在。它出现在大量计算中&#xff0c;并以分析中出现的大量恒等式为特征。对此的部分解释可能在于Γ函数的基本结构特性&…

Nginx HTTPS(证书) 部署实战

一、申请证书与认证 要搭建https服务首先需有SSL证书&#xff0c;证书通常是在第三方申请&#xff0c;在阿里云的安全服务中有SSL证书这一项&#xff0c;可以在里面申请免费的证书。也可以在自己电脑中生成&#xff0c;虽然也能完成加密&#xff0c;但是浏览器是不认可的&…

编译 CanMV 固件

前言 上一章节中已经搭建好了基于 CanMV 的 C 开发环境&#xff0c;这么一来便可以进行基于 C 语言和 FreeRTOS 的应用开发或者编译基于 MicroPython 语法的应用开发方式所需的 CanMV 固件&#xff0c;本 章就将带领读者体验一下 CanMV 固件的编译流程。 本章分为如下几个小节&…

Java面试题:mysql执行速度慢的原因和优化

Sql语句执行速度慢 原因 聚合查询 多表查询 表数据量过大查询 深度分页查询 分析 sql的执行计划 可以使用EXPLAIN或者DESC获取Mysql如何执行SELECT语句的信息 直接在select语句前加关键字explain/desc 得到一个执行信息表 信息字段分析 possible_keys:可能使用到的索…

云计算【第一阶段(18)】磁盘管理与文件系统

一、磁盘基础 磁盘&#xff08;disk&#xff09;是指利用磁记录技术存储数据的存储器。 磁盘是计算机主要的存储介质&#xff0c;可以存储大量的二进制数据&#xff0c;并且断电后也能保持数据不丢失。 早期计算机使用的磁盘是软磁盘&#xff08;Floppy Disk&#xff0c;简称…

海外社媒网站抓取经验总结:如何更高效实现网页抓取?

有效的网络抓取需要采取战略方法来克服挑战并确保最佳数据提取。让我们深入研究一些关键实践&#xff0c;这些实践将使您能够掌握复杂的网络抓取。 一、了解 Web 抓取检测 在深入探讨最佳实践之前&#xff0c;让我们先了解一下网站如何识别和抵御网络爬虫。了解您在这一过程中…

深度神经网络一

文章目录 深度神经网络 (DNN)1. 概述2. 基本概念3. 网络结构 深度神经网络的层次结构详细讲解1. 输入层&#xff08;Input Layer&#xff09;2. 隐藏层&#xff08;Hidden Layers&#xff09;3. 输出层&#xff08;Output Layer&#xff09;整体流程深度神经网络的优点深度神经…

[行业原型] 线上药房管理系统

​行业背景 据中国网上药店理事会调查报告显示&#xff1a;2011年&#xff0c;医药B2C的规模达到4亿元&#xff0c;仅出现5家销售额达5000万元的网上药店。而2011年医药行业的市场规模达到3718亿&#xff0c;线上药品的销售额还不到网下药店的一个零头&#xff0c;还有很大的发…

C++类基本常识

文章目录 一、类的默认方法二、类的成员变量初始化1 类的成员变量有三种初始化方法&#xff1a;2 成员变量初始化顺序3 const和static的初始化 三、C内存区域四、const和static 一、类的默认方法 C的类都会有8个默认方法 默认构造函数默认拷贝构造函数默认析构函数默认重载赋…

C语言基础关键字的含义和使用方法

​关键字在C语言中扮演着非常重要的角色&#xff0c;它们定义了语言的基本构造和语法规则&#xff0c;通过使用关键字&#xff0c;开发者可以创建变量、定义数据类型、控制程序流程&#xff08;如循环和条件判断&#xff09;、声明函数等。由于这些字是保留的&#xff0c;所以编…