回归与聚类算法系列⑤:逻辑回归

news2024/11/26 13:38:06

目录

1、介绍

2、原理

输入

激活函数

3、损失及其优化

损失函数

优化

4、API

5、案例:乳腺癌肿瘤预测

数据集

代码


🍃作者介绍:双非本科大三网络工程专业在读,阿里云专家博主,专注于Java领域学习,擅长web应用开发、数据结构和算法,初步涉猎Python人工智能开发。

🦅主页:@逐梦苍穹

📕回归与聚类算法系列

①:概念简述

②:线性回归

③:欠拟合与过拟合

④:岭回归

🍔您的一键三连,是我创作的最大动力🌹

1、介绍

目标

说明逻辑回归的损失函数

说明逻辑回归的优化方法

说明sigmoid函数

知道逻辑回归的应用场景

知道精确率、召回率指标的区别

知道F1-score指标说明召回率的实际意义

说明如何解决样本不均衡情况下的评估

了解ROC曲线的意义说明AUC指标大小

应用classification_report实现精确率、召回率计算

应用roc_auc_score实现指标计算

应用:癌症患者预测

逻辑回归(Logistic Regression)是一种在统计学和机器学习领域常用于解决二分类问题的模型。它虽然带有“回归”这个名字,但实际上用于分类任务。以下是逻辑回归与二分类问题的专业介绍:

1. 逻辑回归模型:

  • 模型形式: 逻辑回归是一种广义线性模型(Generalized Linear Model,GLM)。它使用一个逻辑函数(也称为Sigmoid函数)来建模输出变量与输入特征之间的关系。逻辑函数将线性组合的输入特征映射到0和1之间的概率值。
  • 模型假设: 逻辑回归假设输入特征与输出变量之间存在一种对数线性关系,而且输出变量服从伯努利分布,即二分类问题中的两个类别。
  • 模型参数: 逻辑回归模型的参数包括权重系数(也称为回归系数)和截距项。这些参数需要通过最大似然估计或其他优化方法来拟合训练数据。

2. 二分类问题:

  • 问题定义: 二分类问题是指将数据集中的样本分为两个不同的类别或标签,通常是正类别(Positive Class)和负类别(Negative Class)。这类问题通常涉及判断一个观测是否属于某个类别,如垃圾邮件检测(垃圾邮件或非垃圾邮件)或疾病诊断(患有疾病或健康)等。
  • 评估指标: 在二分类问题中,常用的评估指标包括准确率(Accuracy)、精确率(Precision)、召回率(Recall)、F1分数(F1-Score)和ROC曲线(Receiver Operating Characteristic Curve)等。这些指标用于衡量模型在不同类别的分类性能。
  • 类别不平衡: 在某些情况下,正类别和负类别的样本分布可能不平衡,这意味着一个类别的样本数量远远大于另一个类别。这时需要特别关注模型的性能评估,以避免偏向样本数量多的类别。

3. 逻辑回归在二分类中的应用:

  • 广泛应用: 逻辑回归在实际应用中非常广泛,包括医学诊断、金融风险评估、自然语言处理中的情感分析、广告点击率预测等领域。
  • 概率输出: 逻辑回归不仅可以用于分类,还可以输出样本属于正类别的概率。这使得它在需要估计概率的场景中非常有用。

总之,逻辑回归是一种强大的工具,用于解决二分类问题,并且在理解分类问题、评估模型性能和实际应用中都具有重要作用。

2、原理

输入

eq?h%28w%29%3Dw_1x_1+w_2x_2+w_3x_3+%5Ccdots+b

逻辑回归的输入就是一个线性回归的结果

激活函数

逻辑回归使用逻辑函数,也称为Singmoid函数,来建模输入特征与输出的关系。

Sigmoid函数的数学表达式:eq?%5Csigma%28z%29%3D%5Cfrac%7B1%7D%7B1+e%5E%7B-z%7D%7D

其中,z 是输入的线性组合,即:eq?z%3D%5Cbeta_0+%5Cbeta_1x_1+%5Cbeta_2x_2+%5Ccdots+%5Cbeta_nx_n

在这里:

  • σ(z) 表示Sigmoid函数的输出,是一个介于0和1之间的概率值。
  • e 是自然对数的底数。
  • x1,x2,…,xn 是输入特征。
  • β0,β1,β2,…,βn 是模型的参数,需要估计。

逻辑回归最终的分类是通过属于某个类别的概率值来判断是否属于某个类别,

并且这个类别默认标记为1(正例),另外的一个类别会标记为0(反例)。(方便损失计算)

之前的线性回归预测结果我们用均方误差衡量,那如果对于逻辑回归,我们预测的结果不对该怎么去衡量这个损失呢?我们来看这样一张图:

630c2ddfce934ad2900c9f1ced5e3939.png

3、损失及其优化

损失函数

逻辑回归的损失,称之为对数似然损失,公式如下:

①分开类别:eq?cost%28h_%5Ctheta%28x%29%2Cy%29%3D%5Cleft%5C%7B%5Cbegin%7Bmatrix%7D%20-log%28h_%5Ctheta%28x%29%29%5Chspace%7B0.1cm%7D%2C%5Chspace%7B0.1cm%7Dy%3D1%5C%5C%20-log%281-h_%5Ctheta%28x%29%29%5Chspace%7B0.1cm%7D%2C%5Chspace%7B0.1cm%7Dy%3D0%20%5Cend%7Bmatrix%7D%5Cright.

②综合完整损失函数:eq?cost%28h_%5Ctheta%28x%29%2Cy%29%3D%5Csum_%7Bi%3D1%7D%5E%7Bm%7D%28-y_ilog%28h_%5Ctheta%28x%29%29-%281-y_i%29log%281-h_%5Ctheta%28x%29%29%29

当y=1时:

7d7d42daa31e4750a3cd4fbf5b1885ea.png

优化

同样使用梯度下降优化算法,去减少损失函数的值。

这样去更新逻辑回归前面对应算法的权重参数,提升原本属于1类别的概率,降低原本是0类别的概率。

4、API

sklearn.linear_model.LogisticRegression(solver='liblinear', penalty='l2', C = 1.0)

solver:优化求解方式(默认开源的liblinear库实现,内部使用了坐标轴下降法来迭代优化损失函数)

sag:根据数据集自动选择,随机平均梯度下降

penalty:正则化的种类

C:正则化力度

默认将类别数量少的当做正例

LogisticRegression方法相当于 SGDClassifier(loss="log", penalty=" "),SGDClassifier实现了一个普通的随机梯度下降学习,也支持平均随机梯度下降法(ASGD),可以通过设置average=True。

而使用LogisticRegression(实现了SAG)

5、案例:乳腺癌肿瘤预测

数据集

c72779aad6e0484685fedd0f6b1054f8.png

原始数据的下载地址:https://archive.ics.uci.edu/ml/machine-learning-databases/

数据描述

(1)699条样本,共11列数据,第一列用语检索的id,后9列分别是与肿瘤

相关的医学特征,最后一列表示肿瘤类型的数值。

(2)包含16个缺失值,用"?"标出。

代码

分析:

  • 缺失值处理
  • 标准化处理
  • 逻辑回归预测

源码:

# -*- coding: utf-8 -*-
# @Author:︶ㄣ释然
# @Time: 2023/9/12 21:45
import pandas as pd
import numpy as np
from sklearn.linear_model import LogisticRegression
from sklearn.model_selection import train_test_split
from sklearn.preprocessing import StandardScaler


def logisticregression():
    """
    逻辑回归进行癌症预测
    :return: None
    """
    # 1、读取数据,处理缺失值以及标准化
    column_name = ['Sample code number', 'Clump Thickness', 'Uniformity of Cell Size', 'Uniformity of Cell Shape',
                   'Marginal Adhesion', 'Single Epithelial Cell Size', 'Bare Nuclei', 'Bland Chromatin',
                   'Normal Nucleoli', 'Mitoses', 'Class']

    data = pd.read_csv("https://archive.ics.uci.edu/ml/machine-learning-databases/breast-cancer-wisconsin/breast-cancer-wisconsin.data",
                       names=column_name)

    # 删除缺失值
    data = data.replace(to_replace='?', value=np.nan)

    data = data.dropna()

    # 取出特征值
    x = data[column_name[1:10]]

    y = data[column_name[10]]

    # 分割数据集
    x_train, x_test, y_train, y_test = train_test_split(x, y, test_size=0.3)

    # 进行标准化
    std = StandardScaler()

    x_train = std.fit_transform(x_train)

    x_test = std.transform(x_test)

    # 使用逻辑回归
    lr = LogisticRegression()

    lr.fit(x_train, y_train)

    print("得出来的权重:", lr.coef_)

    # 预测类别
    print("预测的类别:", lr.predict(x_test))

    # 得出准确率
    print("预测的准确率:", lr.score(x_test, y_test))


if __name__ == '__main__':
    logisticregression()

运行结果:

c019f22384b849f3adbce3a0c9693b49.png

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

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

相关文章

CUDA和cudnn详细安装过程【通用win】

1 软硬件资源 仅作参考,其他型号通用 win 11 32内存显卡 RTX 2080Ti ,驱动版本号:516.59python 3.8.10torch 1.8.0 框架cudatoolkit 11.1cudnn 8.0.4 2 查看适用cuda版本 2.1 查看本机的cuda算力 安装之前先进入官网查看自己的显卡能不能用…

关于OxyPlot.Wpf包没有Plot控件问题

一、OxyPlot.Wpf 控件信息 GitHub:https://github.com/oxyplot/oxyplot 官方文档地址:https://oxyplot.readthedocs.io/en/latest/index.html 在网上查了好久T^T 最后安装了2.0.0版本就出现了

Trinitycore学习之在Linux环境上搭建服务器并测试运行

1:准备环境,这里用ubuntu 22.04进行测试,安装环境后为了方便,换源。 注意:这里用的虚拟机,在虚拟机上生成地图信息,地图信息占用内存比较大,我暂时设置磁盘50G进行测试,…

Electron和vue3集成(推荐仅用于开发)

本篇我们仅实现Electron和vue3通过先运行起vue3项目,再将vue3的url地址交由Electron打开的方案,仅由Electron在vue3项目上套一层壳来达到脱离本机浏览器运行目的 1、参考快速上手 | Vue.js搭建起vue3初始项目 npm install -g vue npm install -g vue/c…

openpnp - 接入西门子二手飞达

文章目录 openpnp - 接入西门子二手飞达概述笔记编译生产用的飞达控制板工程建立飞达控制板GCode驱动create actuatorscreate actuators - GetIDcreate actuators - PrePickcreate actuators - PostPickcreate actuators - AdvIgnoreErrcreate actuators - GetCountcreate actu…

八股文学习二(spring boot + mybatis)

三. 架构 1. spring boot Spring Boot是一个依靠大量注解实现自动化配置的全新框架。约定优于配置;独立运行的 Spring 项目,内嵌servlet容器;Spring Boot 框架内部已经实现了与Spring以及其他常用第三方库的整合连接,并提供了默…

2011-2015年西双版纳热带季节雨林碳水通量观测数据集

摘要 中国“双碳”目标的提出立足于应对气候变化的科学基础之上,增加碳汇、减少碳源成为实施气候治理的必需。陆地生态系统是重要的大气碳汇,而热带季节雨林生态系统作为中国陆地生态系统的组成部分,具有生物量丰富、生产力旺盛等特征,发挥着不可或缺的固碳功能。自2002年建…

选择(使用)数据库

MySQL从小白到总裁完整教程目录:https://blog.csdn.net/weixin_67859959/article/details/129334507?spm1001.2014.3001.5502 语法格式: use 数据库名称;大家应该知道,在对数据库进行操作的时候,要制定数据库的操作对象,也就是说操作哪一个数据库 案列:选择testing数据库 …

Cesium 加载gltf

imageBasedLightingFactor:指定基于漫射和高光图像的照明因子参数 let position Cesium.Cartesian3.fromDegrees(104.17401, 30.65793, 10);const heading Cesium.Math.toRadians(135);const pitch 0;const roll 0;const hpr new Cesium.HeadingPitchRoll(head…

Java实现合并多个excel操作

涉及较多封装的工具类,所有依赖的工具类均提供代码,根据名称新建对应的类,在每个工具类中再引入相应的依赖即可 首先需要明确的是,需要合并的每个excel的表头名称必须是相同的, 针对表头,建立传输的dto&a…

数据结构:树的概念和结构

文章目录 1. 树的概念2. 树的结构3. 树的相关概念4. 树的表示孩子表示法双亲表示法孩子兄弟表示法 5. 树在实际中的应用5. 树在实际中的应用 1. 树的概念 树是一种非线性的数据结构,它是由 n (n > 0)个有限结点组成一个具有层次关系的. 把它叫做树是因为它看起来像一棵倒挂的…

vue基础知识八:为什么data属性是一个函数而不是一个对象?

一、实例和组件定义data的区别 vue实例的时候定义data属性既可以是一个对象,也可以是一个函数 const app new Vue({el:"#app",// 对象格式data:{foo:"foo"},// 函数格式data(){return {foo:"foo"}} })组件中定义data属性&#xff…

学习day59

昨天学了插槽,但是没有即笔记了 今天的是vuex 总体来说,vuex就是一个共享单车,每个人都可以使用他,也可也对他进行反馈。即把一个数据列为vuex,然后每个组件可以使用这个对象,也可也反过来反馈他 这一个设…

VScode在服务器上远程调试python代码的工作目录问题

背景: 当前很多写代码都习惯使用相对路径,即以当前的py文件为工作目录去寻找其他的py文件。所以如果工作目录不是以当前的py文件为起始的话,这将导致去跑一些开源代码的时候运行不起来。 现在我遇到的问题就是,在远程服务器上&…

【MFC】tab控件 仿任务管理器 枚举窗口和进程

界面和关联变量设置 创建一个基于对话框的MFC项目,给主对话框添加一个tab控件(设置关联变量 类型:CTabCtrl 名称:m_tab),添加两个子对话框(IDC_PAGE1和IDC_PAGE2),给子对…

对IMU的认识

参数标定: 良率检测 内参标定过程 1.线性误差模型 零偏:静止时的误差 尺度偏差:每个轴上电压到实际值之间的比例差值 1->1.5 或者 1->1.3(直线的斜率) 轴偏差: 如下图 2.标定过程: 2.1角加速度标定 重…

84 # koa 实现文件上传功能

下面使用实现文件上传功能&#xff0c;先新建文件夹&#xff0c;结构如下&#xff1a; index.html <!DOCTYPE html> <html lang"en"><head><meta charset"UTF-8" /><meta name"viewport" content"widthdevice-…

EtsyAI评论分析工具:让你的店铺运营更省心!

Etsy 是一个在线市场平台&#xff0c;成立于 2005 年&#xff0c;总部位于美国纽约。Etsy 的主要特点是它专注于手工艺品、独立设计、艺术品、古董物品和特色商品的销售。 Etsy是一个知名的电商平台&#xff0c;它专注于手工艺品、创意设计和独特商品的售卖&#xff0c;相信大家…

【自动化测试】如何提高自动化脚本的健壮性和稳定性?

自动化脚本可能出错的原因&#xff1f; 配置环境引起 自动化测试脚本的配置。对测试程序进行配置。如&#xff1a;是否还原初始设置、是否删除某些数据。对浏览器进行配置。对与测试程序有关的程序或影响脚本稳定性的程序进行配置。 非配置环境引起 网络延时&#xff0c;识…

python 爬虫的开发环境配置

1、新建一个python项目 2、在控制台中分别安装下面三个包 pip install requests pip install beautifulsoup4 pip install selenium/ 如果安装时报以下错误&#xff1a; raise ReadTimeoutError(self._pool, None, "Read timed out.") pip._vendor.urllib3.exceptio…