机器学习算法(六)---逻辑回归

常见的十大机器学习算法:
机器学习算法(一)—决策树
机器学习算法(二)—支持向量机SVM
机器学习算法(三)—K近邻
机器学习算法(四)—集成算法
机器学习算法(五)—聚类
机器学习算法(六)—逻辑回归
机器学习算法(七)—Apriori 关联分析
  机器学习中监督学习模型的任务重点在于根据已有经验知识对未知样本的目标/标记进行预测。根据目标预测变量的类型不同,把监督学习任务大体分为分类学习和回归预测两类。分类学习是最为常见的监督学习问题,其中,最基础的是二分类问题,除此之外还有多分类问题。

一、逻辑回归

1.1 模型介绍

  逻辑回归是在数据服从伯努利分布的假设下,通过极大似然的方法,运用梯度下降法来求解参数,从而达到将数据二分类的目的。
  逻辑回归是一种用于二分类问题的统计方法,引入了一种 S型曲线(Sigmoid函数),它能将输出值压缩到0和1之间,从而解决了线性回归不适用分类问题的问题。
Sigmoid函数:
在这里插入图片描述
其中,Z=w0+w1x1+w2x2+…+(wn)xn=W*X,逻辑回归可以将 z 映射为一个 0 到 1 之间的概率。X表示特征向量,W表示模型的参数。

在这里插入图片描述

1.2 工作原理

  逻辑回归主要用于估计某个事件发生的概率,核心思想是使用线性回归来计算一个分数(即Z ),然后通过 Sigmoid函数将这个分数转化为概率,再以此概率进行分类。逻辑回归的参数是通过极大似然估计来确定。
在这里插入图片描述
(1)损失函数
使用交叉熵损失函数来衡量模型预测的概率与真实类别标签之间的差距。交叉熵损失定义如下:
在这里插入图片描述
其中,yi是真实类别,pi是模型的预测概率,m 是样本数量。
(2)优化算法
使用梯度下降法来更新权重和偏置项,以最小化损失函数。

1.3 算法流程

1、初始化
设定初始参数 W,可以随机选择,也可以设为零。
2、前向传播
对每一个样本计算线性组合,应用逻辑回归函数计算概率
3、计算损失
使用对数似然函数计算损失
4、梯度计算
计算梯度
5、参数更新
更新参数
6、迭代
重复前向传播、损失计算、梯度计算和参数更新,直到收敛或达到预设的迭代次数。
7、分类决策
使用训练好的模型对新数据进行预测,根据计算出的概率 p 和阈值进行分类。

1.4 逻辑回归优缺点

优点:

  • 1.形式简单,模型的可解释性好
  • 2.训练速度较快
  • 3.方便调整输出结果,通过调整阈值的方式

缺点:

  • 1.无法自动进行特征筛选
  • 2.只能处理二分类问题
  • 3.很难处理数据不平衡问题

1.5 案例

  案例数据为‘良/恶性乳腺肿瘤预测数据’,该数据共有569条样本,1列表征肿瘤类型的数值,以及30列与肿瘤相关的医学特征(30个特征(10个平均值,10个标准差,10个最值))。
在这里插入图片描述

import pandas as pd
import numpy as np
from sklearn.datasets import load_breast_cancer  #引入乳腺癌的数据集
from sklearn.model_selection import train_test_split #用于分割数据集
from sklearn.preprocessing import StandardScaler     # 归一化
from sklearn.linear_model import LogisticRegression    # 导入逻辑回归模型
from sklearn.linear_model import SGDClassifier   #导入随机梯度下降分类模型
from sklearn.metrics import classification_report
cancer = load_breast_cancer() 
print(cancer.data.shape)
print(cancer.target.shape)

在这里插入图片描述

x=cancer.data
y=cancer.target
x

在这里插入图片描述

y

在这里插入图片描述

x_train,x_test,y_train,y_test = train_test_split(x,y,test_size=0.3,random_state=33)
#标准化数据,使得每个维度特征数据方差为1,均值为0,预测结果不会被某些维度过大的特征值而主导
ss=StandardScaler()
X_train=ss.fit_transform(x_train)
X_test=ss.transform(x_test)
#初始化
lr=LogisticRegression()
sgdc=SGDClassifier()
#调用LogisticRegression中fit函数/模块训练参数
lr.fit(X_train,y_train)
#使用训练好的模型lr对x_test数据进行预测
lr_y_predict=lr.predict(X_test)#调用SGDClassifier中fit函数/模块训练参数
sgdc.fit(X_train,y_train)
#使用训练好的模型lr对x_test数据进行预测
sgdc_y_predict=sgdc.predict(X_test)#对于乳腺癌肿瘤预测问题,显然更加关注召回率和精确率更加接近的模型给予更高的分数。
print('Accuracy of LR Classifier:',lr.score(X_test,y_test))
print(classification_report(y_test,lr_y_predict,target_names=['Benign','Malignant']))
#Benign:良性  Malignant:恶性
#macro avg 即宏均值,可理解为普通的平均值。对应的概念还有微均值 micro avg
#weighted avg 加权平均

在这里插入图片描述

print('Accuracy of sgdc Classifier:',sgdc.score(X_test,y_test))
print(classification_report(y_test,sgdc_y_predict,target_names=['Benign','Malignant']))

在这里插入图片描述
macro avg 即宏均值,可理解为普通的平均值。对应的概念还有微均值 micro avg
宏平均是先对每一个类统计指标值,然后在对所有类求算术平均值。微平均是对每一个实例不分类别进行统计建立全局混淆矩阵,然后计算相应指标。
在这里插入图片描述  如果每个class的样本数量相差不大,那么宏平均和微平均差异也不大,如果每个class的相差较大并且你想:更注重样本量多的class:使用宏平均;更注重样本量少的class:使用微平均。
  LogisticRegression比起SGDClassifier在测试集上表现有更高的准确性,一般而言,对于训练数据规模在10万以上的数据,推荐使用随机梯度算法对模型参数进行估计。

1.6 classification_report()参数

classification_report(y_true,y_pred,labels=None,target_names=None,sample_weight=None,digits=2,output_dict=False,zero_division=“warn”)
y_true:真实值
y_pred:预测值
labels:标签索引列表,可选参数,数组形式
target_names:与标签匹配的名称,可选参数,数组形式
sample_weight:样本权重,当“output_dict”为“True”时,这将被忽略,并且返回的值不会四舍五入。
digits:格式化输出浮点值的位数。默认为2,是否输出字典。默认为False,如果为True则输出结果形式为字典。
zero_division:设置存在零除法时返回的值。默认为warn。如果设置为“warn”,这相当于0,但也会引发警告。

二、逻辑回归与线性回归的区别与联系

  • 1.分类与回归:
    线性回归模型是预测一个连续变量
    逻辑回归是预测一个分类变量

  • 2.输出:
    线性回归 连续型 线性回归容易受异常值影响
    逻辑回归 分类型

  • 3.参数估计方法
    线性回归使用的是最小平方误差损失函数,对偏离真实值越远的数据惩罚越严重
    逻辑回归使用似然函数进行参数估计,使用交叉熵作为损失函数

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

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

相关文章

Attention显存统计与分析

Attention显存估计 简单的Attention函数 import torch import torch.nn as nn import einops class Attention(nn.Module):def __init__(self, dim, num_heads8, qkv_biasFalse, qk_scaleNone, attn_drop0., proj_drop0.):super().__init__()self.num_heads num_headshead_d…

Spring系列之批处理Spring Batch介绍

概述 官网,GitHub A lightweight, comprehensive batch framework designed to enable the development of robust batch applications vital for the daily operations of enterprise systems. 执行流程 实战 假设有个待处理的任务,如文件batch-tes…

[保姆式教程]使用labelimg2软件标注定向目标检测数据和格式转换

定向目标检测是一种在图像或视频中识别和定位对象的同时,还估计它们方向的技术。这种技术特别适用于处理有一定旋转或方向变化的对象,例如汽车、飞机或文本。定向目标检测器的输出是一组旋转的边界框,这些框精确地包围了图像中的对象&#xf…

Socket编程:UDP网络编程项目

目录 一、回显服务器 二、翻译器 三、聊天室 一、回显服务器 项目介绍:使用UDPIPv4协议进行Linux网络编程,实现回显服务器和客户端 功能介绍:客户端发送数据,经过服务端再返回到客户端,输出数据 源代码&#xff1…

HarmonyOS4+NEXT星河版入门与项目实战(24)------Stage模型

文章目录 1、概念2、配置文件1、全局配置文件2、模块配置文件3、UIAbility生命周期1、图文归纳2、生命周期方法入口4、页面生命周期1、图文描述1、概念 2、配置文件 1、全局配置文件 2、模块配置文件 统一修改配置文件技巧:点击任意json 文件,选择 Open editor ,在显示的列表…

torch_geometric使用手册-Heterogeneous Graph Learning(专题三)

大量的现实世界数据集以异构图(Heterogeneous Graph) 的形式存储,这促使了在PyG中引入专门的功能。例如,大多数推荐系统中的图(如社交图)都是异构图,它们存储着关于不同类型的实体及其不同类型关系的信息。本教程介绍了如何将异构图映射到PyG中,以及如何将其作为输入用于…

手机实时提取SIM卡打电话的信令声音-蓝牙电话如何适配eSIM卡的手机

手机实时提取SIM卡打电话的信令声音 --蓝牙电话如何适配eSIM卡的手机 一、前言 蓝牙电话的海外战略中,由于海外智能手机市场中政策的差异性,对内置eSIM卡的手机进行支持是非常合理的需求。Android系列手机中,无论是更换通信运营商&#xf…

QT6学习第五天 第一个QT Quick程序

QT6学习第五天 第一个QT Quick程序 概述创建Qt Quick程序使用Qt资源文件程序发布 概述 如果将程序的用户界面成为前端,程序的数据存储和逻辑业务成为后端,那么传统QT Widgets程序的前后端都是用C完成的。对于现代软件开发而言,前端演化速度远…

LabVIEW内燃机气道试验台测控系统

基于LabVIEW软件开发的内燃机气道试验台测控系统主要应用于内燃机气道的性能测试和数据分析,通过高精度的测控技术,有效提升内燃机的测试精度和数据处理能力。 项目背景 随着内燃机技术的发展,对其气道性能的精准测量需求日益增加。该系统通…

flutter底部导航栏中间按钮凸起,导航栏中间部分凹陷效果

关键代码: Scaffold中设置floatingActionButtonLocation: FloatingActionButtonLocation.centerDocked和extendBody: true, BottomAppBar中设置shape: const CircularNotchedRectangle() Scaffold(extendBody: true,//body是否延伸脚手架底部,在底部导航…

108.【C语言】数据结构之二叉树查找值为x的节点

目录 1.题目 代码模板 2.分析 分类讨论各种情况 大概的框架 关键部分(继续递归)的详解 递归调用展开图 3.测试结果 其他写法 4.结论 5.注意事项 不推荐的写法 1.题目 查找值为x的节点并返回节点的地址 代码模板 typedef int BTDataType; typedef struct BinaryT…

十五、linux之搭建JavaEE环境

1 概述 如果需要在 Linux 下进行 JavaEE 的开发,我们需要安装如下软件 2 安装 JDK 安装步骤 mkdir /opt/jdk mkdir /opt/jdk通过 xftp6 上传到 /opt/jdk 下 cd /opt/jdk 解压 tar -zxvf jdk-8u261-linux-x64.tar.gz tar -zxvf jdk-8u261-linux-x64.tar.…

基于PHP的音乐网站的设计与实现

摘 要 本系统采用PHP编程语言和MySQL数据库技术搭载了Apache服务器,完成了基于PHP的音乐网站设计,通过此次毕 业论文的撰写我明白了对于论文的选题要精确,要明确,要有明确的见解,要有足够的论证和创意,必须…

mysql 触发器进入历史

一、触发器 MySQL 触发器(Triggers)是一种数据库对象,它与表关联,能在特定的事件(如插入、更新或删除)发生时自动执行一些指定的操作。使用触发器可以帮助我们自动维护数据库的完整性、一致性,…

Springboot项目搭建(8)-用户登出与个人中心修改

1.提要信息 1.1 catch和then方法 then和catch是JavaScript中Promise对象的两个方法,用于处理异步操作的成功(成功回调)和失败(失败回调)情况。这两个方法通常与async/await语法一起使用,但也可以单独使用…

【2024】使用Docker搭建redis sentinel哨兵模式集群全流程(包含部署、测试、错误点指正以及直接部署)

目录💻 前言**Docker Compose介绍**最终实现效果 一、搭建集群1、创建文件结构2、创建redis节点3、验证节点4、创建sentinel哨兵5、验证Sentinel功能 二、spring连接1、添加依赖2、添加配置3、启动测试 三、直接部署流程1、拉取配置2、修改端口创建 前言 本篇文章主…

Python毕业设计选题:基于django+vue的智慧社区可视化平台的设计与实现+spider

开发语言:Python框架:djangoPython版本:python3.7.7数据库:mysql 5.7数据库工具:Navicat11开发软件:PyCharm 系统展示 管理员登录 管理员功能界面 养老机构管理 业主管理 社区安防管理 社区设施管理 车位…

webpack 项目访问静态资源

使用 webpack dev serve 启动 react 项目后,发现无法使用 http://localhost:8080/1.png 访问到项目的 /static 目录下的 1.png 文件。我的 webpack-dev.js 配置如下: const webpack require(webpack) const webpackMerge require(webpack-merge) cons…

【FAQ】使用Node.js 镜像 构建本地项目

在nodejs官方并没有提供使用node.js构建本地项目的方法,但是通过阅读官方文档,可以发现,官方在包管理器界面提供了如下语句 所以node.js容器是可以执行语句的 下面通过docker 的 -w 、-v 参数设置容器工作目录和目录映射(实现本…

MySQL技巧之跨服务器数据查询:进阶篇-从A服务器的MySQ数据库复制到B服务器的SQL Server数据库的表中

MySQL技巧之跨服务器数据查询:进阶篇-从A服务器的MySQ数据库复制到B服务器的SQL Server数据库的表中 基础篇已经描述:借用微软的SQL Server ODBC 即可实现MySQL跨服务器间的数据查询。 而且还介绍了如何获得一个在MS SQL Server 可以连接指定实例的MyS…