从零入手人工智能(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曲线可视化数据准确性。
在这里插入图片描述

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

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

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

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

相关文章

node版本过高出现ERR_OSSL_EVP_UNSUPPORTED错误

错误原因: 新版本的nodejs使用的openssl和旧版本不同,导致出错 解决方法: 1.将node版本重新换回16.x 2 windows 下 在package.json文件下添加set NODE_OPTIONS--openssl-legacy-provider && "scripts": {"dev"…

配置 python 脚本操作Excel 环境

在已装python的前提下 一、安装依赖库 pip install pandas pip install openpyxl安装完后,可以在 Python 中运行以下命令来查看 pandas 或 openpyxl 的安装路径: import pandas as pd print(pd.__path__)import openpyxl print(openpyxl.__path__)二、测…

​Claude 3.5 最新体验:助力硕博生与科研人员高效完成论文,超越ChatGPT4o !

我是娜姐 迪娜学姐 ,一个SCI医学期刊编辑,探索用AI工具提效论文写作和发表。 要不说AI领域的进展真的是日新月异,发展速度已经大大超过预期进度。娜姐本来在准备AI降重工具的测评文章(最近好多小伙伴需要)。 昨天晚上…

机器学习算法的电影推荐系统以及票房预测系统

一、实验概述 1. 实验目标 本项目希望基于电影数据集,依据电影的简介、关键词、预算、票房、用户评分等特征来对电影进行分析,并完成以下任务: 对电影特征的可视化分析对电影票房的预测多功能个性化的电影推荐算法 2. 数据集 针对票房预…

leetcode144. 二叉树的前序遍历

一、题目描述: 给你二叉树的根节点 root ,返回它节点值的 前序 遍历。 二、输入输出实例: 示例 1: 输入:root [1,null,2,3] 输出:[1,2,3]示例 2: 输入:root [] 输出:[]…

经纬恒润EAS.HSM:驱动硬件信息安全

概述 HSM(Hardware Security Module)硬件安全模块,是一种用于保护和管理强认证系统所使用的密钥,并同时提供相关密码学操作的计算机硬件设备。 HSM 在汽车信息安全中扮演着至关重要的角色。随着汽车智能化和网联化的快速发展&am…

微型操作系统内核源码详解系列五(3):cm3下调度的开启

系列一:微型操作系统内核源码详解系列一:rtos内核源码概论篇(以freertos为例)-CSDN博客 系列二:微型操作系统内核源码详解系列二:数据结构和对象篇(以freertos为例)-CSDN博客 系列…

Pyqt QCustomPlot 简介、安装与实用代码示例(一)

目录 简介安装实用代码示例带有填充的简单衰减正弦函数及其红色的指数包络线具有数据点的 sinc 函数、相应的误差条和 2--sigma 置信带几种散点样式的演示展示 QCustomPlot 在设计绘图方面的多功能性 结语 所有文章除特别声明外,均采用 CC BY-NC-SA 4.0 许可协议。转…

wordpress站群搭建3api代码生成和swagger使用

海鸥技术下午茶-wordpress站群搭建3api代码生成和swagger使用 目标:实现api编写和swagger使用 0.本次需要使用到的脚手架命令 生成 http server 代码 goctl api go -api all.api -dir ..生成swagger文档 goctl api plugin -plugin goctl-swagger"swagger -filename st…

vmware workstation下centos7屏幕切换及大小调整

虚拟机版本:vmware workstation15.5.2 操作系统版本:centos 7.9.2009 一 图形界面和命令行界面切换方法 在CentOS 7中,可以使用以下方法切换界面: 1 使用快捷键切换:按下Ctrl Alt F2(或F3&#xff0…

Vue70-路由的几个注意点

一、路由组件和一般组件 1-1、一般组件 1-2、路由组件 不用写组件标签。靠路由规则匹配出来,由路由器渲染出来的组件。 1-3、注意点1 一般组件和路由组件,一般放在不同的文件夹,便于管理。 一般组件放在components文件夹下。 1-4、注意点…

【SpringBoot】SpringBoot:打造现代化微服务架构

文章目录 引言微服务架构概述什么是微服务架构微服务的优势 使用SpringBoot构建微服务创建SpringBoot微服务项目示例:创建订单服务 配置数据库创建实体类和Repository创建服务层和控制器 微服务间通信使用RestTemplate进行同步通信示例:调用用户服务 使用…

用智能插件(Fitten Code: Faster and Better AI Assistant)再次修改vue3 <script setup>留言板

<template><div><button class"openForm" click"openForm" v-if"!formVisible">编辑</button><button click"closeForm" v-if"formVisible">取消编辑</button><hr /><formv-i…

手把手教你java CPU飙升300%如何优化

背景 今天有个项目运行一段时间后&#xff0c;cpu老是不堪负载。 排查 top 命令 TOP 命令 top t 按cpu 排序 top m 按内存使用率排序 从上面看很快看出是 pid 4338 这个进程资源消耗很高。 top -Hp pid top -Hp 4338 找到对应线程消耗的资源shftp cpu占用进行排序&#xf…

优维“态势感知监控”产品:像“上帝”一样掌控应用系统

什么是态势感知&#xff1f; 态势感知是一种基于环境的、动态、整体地洞悉全网安全风险的能力。它以安全大数据为基础&#xff0c;从全局视角对全网安全威胁进行发现识别、理解分析展示和响应处置&#xff0c;并预测发展趋势&#xff0c;为后续网络安全的相关决策与行动提供数据…

Redis 7.x 系列【4】命令手册

有道无术&#xff0c;术尚可求&#xff0c;有术无道&#xff0c;止于术。 本系列Redis 版本 7.2.5 源码地址&#xff1a;https://gitee.com/pearl-organization/study-redis-demo 文章目录 1. 说明2. 命令手册2.1 Generic2.2 数据类型2.2.1 String2.2.2 Hash2.2.3 List2.2.4 S…

JavaScript--函数的参数列表以及arguments的用法

函数声明时&#xff0c;参数的问题 即使函数在定义时没有显示声明任何参数&#xff0c;你仍然可以在调用该函数时传递参数。 这是因为 JavaScript 函数内部有一个隐含的 arguments 对象&#xff0c;它包含了所有传递给函数的参数。 示例 我们来通过一些示例代码来更清楚地说…

拒绝零散碎片, 一文理清MySQL的各种锁

系列文章目录 学习MySQL先有全局观&#xff0c;细说其发展历程及特点 Mysql常用操作&#xff0c;谈谈排序与分页 拒绝零散碎片&#xff0c; 一文理清MySQL的各种锁&#xff08;收藏向&#xff09; 系列文章目录一、MySQL的锁指什么二、排他与共享三、全局锁&#xff08;Global…

PhotoShop批量生成存储jpg

1、说明 根据之前自动批量生成psd格式的文件。打印一般都是jpg格式的&#xff0c;那如果将这些psd的文件&#xff0c;生成jpg&#xff0c;本文采用ps的动作 2、生成动作 点击窗口-动作 录屏存储jpg动作 3、根据动作生成 选择相应动作之后选择需要处理的文件夹

Aidlux 1.4 部署Nextcloud 2024.6实录 没成功

Aidux阉割版Debain10&#xff0c;坑很多&#xff0c;比如找不到实际的系统日志&#xff0c;有知道的大神吗&#xff1f; 1 Apache2安装 # 测试Apache2 sudo apt update && sudo apt upgrade sudo apt install apache2 -y80端口疑似被禁止只能换端口 rootlocalhost:/…