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

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.mzph.cn/web/31581.shtml

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

相关文章

基于51单片机的函数信号发生器

基于51单片机函数信号发生器 (仿真+程序+原理图+设计报告) 功能介绍 具体功能: 1.LCD1602液晶显示波形种类和频率值(10-100HZ); 2.按键设置波形种类和设定频率步进值…

UE5近战对抗系统Tutorial

文章目录 BP_Character 组合攻击Notify State 检测攻击BP_Character 攻击反馈BP_Character 生命系统BP_Character 死亡效果BP_Character 武器系统BP_Enemy 初始化和行为树 BP_Character 组合攻击 首先我们获取攻击动画,在这里使用的是 Easy Combo Buffering 的攻击…

嵌入式系统软件架构设计方法

1.嵌入式系统软件架构设计的目的 嵌入式系统软件架构是开发大型嵌入式系统密集型软件贯穿始终的关键桥梁,同时软件架构也是软件开发的基础。架构设计的目的是: 保证应用的代码逻辑清晰,避免重复的设计;实现软件的可移植性&#…

聊聊JSON

引言 JSON的概念 JSON(JavaScript Object Notation)是一种轻量级的数据交换格式,它基于JavaScript的一个子集,但独立于语言,这意味着它可以被许多编程语言轻松解析。JSON的简洁性和易读性使其成为Web开发中数据交换的…

jnp.linalg.norm

jnp.linalg.norm 是 JAX 中用于计算向量或矩阵的范数的函数。JAX 是一个用于高性能机器学习研究的 Python 库,它提供了与 NumPy 类似的 API,但支持自动微分和加速计算。jnp 是 JAX 的 NumPy 接口。 jnp.linalg.norm 的基本语法 jnp.linalg.norm(x, ord…

办公软件都需要学习哪些?沈阳计算机办公软件培训

学习办公软件可以提高你的工作效率和专业技能。以下是一些常见的办公软件及其需要学习的关键内容: 1. Microsoft Word 或 Google Docs(文字处理软件) 基本操作:创建、保存、打开和打印文档。文本格式化:字体、段落、…

掌握 NumPy:高效数组处理综合指南(第 2/2 部分)

照片由 兹比内克布里瓦尔 on Unsplash 一、介绍 欢迎来到我关于 NumPy 的教程的第二部分!之前,我们已经介绍了以下列表中的前 7 章。现在在这篇文章中,我们将从第 8 章一直到第 14 章。 Numpy 安装数组初始化Numpy 数组限制计算速度和内存使用…

量子计算:1 从薛定谔的猫开始

大模型技术论文不断,每个月总会新增上千篇。本专栏精选论文重点解读,主题还是围绕着行业实践和工程量产。若在某个环节出现卡点,可以回到大模型必备腔调或者LLM背后的基础模型重新阅读。而最新科技(Mamba,xLSTM,KAN)则…

序列1bp插入有什么影响

1bp插入突变(1个碱基插入)在基因序列中通常会引起以下几种影响: 移码突变(Frameshift Mutation): 插入的一个碱基会改变插入点之后所有的密码子,导致读取框的移动。这种变化通常会引起整个蛋白质…

PCL 点云RANSAC+SVD提取平面

文章目录 一、简介二、实现代码三、实现效果参考资料一、简介 这里的思路很简单,RANSAC算法具有很不错的抗噪性,但是得到的平面仍然是基于原始数据中的点,这会导致提取出的平面不够精确;因此我们可以基于RANSAC算法提取出的点云,使用最小二乘法拟合出更为精确的平面参数。…

基于PHP的民宿管理系统

有需要请加文章底部Q哦 可远程调试 基于PHP的民宿管理系统 一 介绍 此民宿管理系统基于原生PHP开发,数据库mysql,前端jquery.js和echarts.js。系统角色分为用户和管理员。用户可以在线浏览和预订民宿,管理员登录后台进行相关管理等。(在系统…

【python】OpenCV——Color Correction

文章目录 cv2.aruco 介绍imutils.perspective.four_point_transform 介绍skimage.exposure.match_histograms 介绍牛刀小试遇到的问题 参考学习来自 OpenCV基础(18)使用 OpenCV 和 Python 进行自动色彩校正 cv2.aruco 介绍 一、cv2.aruco模块概述 cv2.…

如何清理docker build的缓存

在使用 Docker 构建镜像时,Docker 会利用构建缓存来加速后续的构建过程。如果某一层及其所有上层未发生变化,Docker 就会重用这一层的缓存。虽然这可以显著提升构建速度,但有时你可能希望强制 Docker 忽略缓存,以确保从头开始重新…

JAVA小知识28:FIle类文件对象

Java 中的 File 类是 java.io 包中的一个类,用于表示文件和目录路径名的抽象表示。它提供了一些方法来操作文件和目录 一、File的创建 1.1、绝对路径 绝对路径是指从文件系统的根目录开始定位文件或目录的完整路径。它通常以根目录符号开始,在 Window…

【Mac】DMG Canvas for mac(DMG镜像制作工具)软件介绍

软件介绍 DMG Canvas 是一款专门用于创建 macOS 磁盘映像文件(DMG)的软件。它的主要功能是让用户可以轻松地设计、定制和生成 macOS 上的安装器和磁盘映像文件,以下是它的一些主要特点和功能。 主要特点和功能 1. 用户界面设计 DMG Canva…

Rocky Linux 更换CN镜像地址

官方镜像列表&#xff0c;下拉查找 官方镜像列表&#xff1a;https://mirrors.rockylinux.org/mirrormanager/mirrorsCN 开头的站点。 一键更改镜像地址脚本 以下是更改从默认更改到阿里云地址 cat <<EOF>>/RackyLinux_Update_repo.sh #!/bin/bash # -*- codin…

自研地面站!自主开源无人飞行系统 Prometheus V2 版重大升级详解

自主开源无人飞行系统 Prometheus V2 相对于 Prometheus V1 在多方面做了重大的升级&#xff0c;今天我们将聊聊 Prometheus V2 的地面站升级。 地面站的重大提升 熟悉 Prometheus 的小伙伴们可能知道&#xff0c;V1 版本是没有专门的地面站的。而在 Prometheus V2 中&#x…

java开发技巧01

1.参数传递不要太深&#xff0c;影响阅读&#xff0c;可以抽取单独的方法。 void method001(String param){ for(){ ...... } if(){ ...... } for(){ ...... } if(){ ...... } //在此处才用到 param ......; if(param){ param ...... } } 2.不要在循环里面频繁请求数据库&…

vue3 配置全局@符号

1.下载依赖包 npm install types/node --save 2.修改vite.config.ts配置文件 import path from "path"; export default defineConfig({plugins: [vue()],resolve: {alias: {"": path.resolve(__dirname, "./src"),},}, });3.修改tsconfig.jso…

VERYCLOUD睿鸿股份亮相亚马逊云科技中国峰会2024

5月30日&#xff0c;为期两天的亚马逊云科技中国峰会在上海世博中心圆满落幕。 多位大咖现场分享&#xff0c;生成式AI时代的数据战略&#xff0c;企业级AI应用&#xff0c;最新技术、产品重磅发布&#xff0c;创新行业解决方案 …… 作为亚马逊云科技的生态合作伙伴&#x…