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

2023-09-12 22:40:37

目录

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

更多推荐

一文教你如何设计出优秀的测试用例(文档+视频)

这篇文章我们主要聊一下软件测试工程师最通用的也是最根本的技能,测试用例的设计能力。测试用例测试用例是通过使用在测试计划中确定的测试技术,对于已确定的测试条件进行逐步推敲,精炼而设计出来的重点说明如何具体操作产生何种结果的文档。通俗的话就是要把想要测试的动作变成在什么情况下,做什么动作,用什么数据方式去做,最后想得到什么

软件测试之功能测试详解

一、功能测试概述1)功能测试就是对产品的各功能进行验证,根据功能测试用例,逐项测试,检查产品是否达到用户要求的功能。2)功能测试,根据产品特性、操作描述和用户方案,测试一个产品的特性和可操作行为以确定它们满足设计需求。本地化软件的功能测试,用于验证应用程序或网站对目标用户能正确工作。使用适当的平台、浏览器和测试脚本,以

数据研发“新人”如何快速落地?

作者:肖迪(墨诩)一、前言这个季度主推安全月构筑&夯实稳定性底盘,就组织了组里的同学对核心业务链路进行了稳定性的摸排。在摸排过程中,不断有个声音在问你摸排出来的问题就是全部问题么?你加的监控加全了么?你的技改方案考虑全了么?(这个声音主要来自左耳,因为我leader坐在我的左边,哈哈哈哈)所以我们一直在思考和对焦,如何

SpringMVC之JSON数据返回及异常处理机制

目录一.JSON数据的返回二.异常处理机制2.1异常处理方式一2.2异常处理方式二2.3异常处理方式三一.JSON数据的返回JSON(JavaScriptObjectNotation)是一种轻量级的数据交换格式,常用于Web应用程序和服务之间的数据传输。通过使用JSON,数据可以以一种结构化的方式进行组织和存储,并可以

图像处理领域之►边缘检测大合集◄【应该是全网仅有的了吧】

图像处理领域之►边缘检测‧大合集◄概述{\color{Brown}概述}概述数据集{\color{Purple}数据集}数据集实践{\color{Red}实践}实践深度学习方法{\color{Blue}深度学习方法}深度学习方法机器学习方法{\color{Blue}机器学习方法}机器学习方法基于传统方法{\color{

掌握进度管理基本指南,保证项目不延期

项目管理中的进度管理是规划、制定、控制和监控项目时间表的过程,确保任务和活动按时完成。假设你是一名项目经理,带着团队组织一场备受瞩目的音乐节。精确的时间安排是关键。你需要确保演出者准时到达并按计划表演,所有供应商都准备就绪,安保人员到位。你可能会遇到一些问题,如音响设备车延误了、某位演出者无法到场而你需要在最后一刻换人

北斗+渔业:且看北斗卫星如何提升渔业监管水平

近日,为确保渔业船舶海上航行安全和管理,海南省农业农村厅近日发布通告:全省小型海洋渔船须于今年9月30日前完成北斗船载终端安装,大中型海洋渔船须于今年11月30日前同时完成北斗船载终端和“插卡式AIS”终端安装。近年来,北斗卫星在渔业监管方面的应用越来越普遍,发挥着越来越重要的作用。本文将详细介绍北斗卫星在渔业监管中的

基于当量因子法、InVEST、SolVES模型等多技术融合在生态系统服务功能社会价值评估中的应用及论文写作、拓展分析

生态系统服务是人类从自然界中获得的直接或间接惠益,可分为供给服务、文化服务、调节服务和支持服务4类,对提升人类福祉具有重大意义,且被视为连接社会与生态系统的桥梁。自从启动千年生态系统评估项目(MillenniumEcosystemAssessment,MA)以来,生态系统服务成为学术界的研究热点,其中在生态系统服务功能

netty之ObjectPool(对象池)

对象池和我们的连接池一样就是对象放入一个池中循环使用。特别是在netty创建ByteBuf的时候buf循环使用大大减小了频繁创建对象,垃圾收集的压力。特别是在使用直接内存的时候。netty的对象池对象RecyclerObjectPoolextendsObjectPool。RecyclerObjectPool只是外层抽象

exev函数族

一.exev函数族1.1功能exec()函数族的主要功能是在当前进程中运行一个新的程序。使用这些函数可以实现以下功能:程序替换(ProgramReplacement):调用exec()函数后,当前进程的代码和数据会被新程序的代码和数据替换。这可以用于动态加载和替换程序,使得一个进程可以切换到运行不同的程序,实现灵活的程

Java版工程行业管理系统源码-专业的工程管理软件- 工程项目各模块及其功能点清单

鸿鹄工程项目管理系统SpringCloud+SpringBoot+Mybatis+Vue+ElementUI+前后端分离构建工程项目管理系统1.项目背景一、随着公司的快速发展,企业人员和经营规模不断壮大。为了提高工程管理效率、减轻劳动强度、提高信息处理速度和准确性,公司对内部工程管理的提升提出了更高的要求。二、企业通过

热文推荐