当前位置: 首页 > news >正文

吴恩达机器学习 第二课 week2 多分类问题

目录

01 学习目标

02 实现工具

03 概念与原理

04 应用示例

05 总结


01 学习目标

     (1)理解二分类与多分类的原理区别

     (2)掌握简单多分类问题的神经网络实现方法

     (3)理解多分类问题算法中的激活函数与损失函数原理

02 实现工具

     (1)代码运行环境

              Python语言,Jupyter notebook平台

     (2)所需模块

              numpy,matplotlib,tensorflow,lab_utils_multiclass_TF,logging

03 概念与原理

     (1)二分类&多分类

       二分类将输入数据划分为两个不同类别,目标变量为一维(0或1)。比如:判断一封电子邮件是否为垃圾邮件(是/否)、判断一个用户是否会点击某个广告或链接(会/不会)等。

       多分类将输入数据划分为三个及以上不同类别,目标变量为一维或更高维。比如:图像识别、文本分类等。

       二分类与多分类都是分类问题,本质上都是经过逻辑分析进行处理。相较二分类的“一对一(0&1)”逻辑,多分类多了一层逻辑,其逻辑处理有“一对一(0或1)”和“一对多(0&1/2/3/4…)”两种策略。如下图所示:

图1   “一对一”策略

 图2   “一对多”策略

       由图1和2可知,假设目标有n类,“一对一”策略需要n×(n-1)次分类,而“一对多”策略仅需要n次分类。

      (2)神经网络中的激活函数 & 归一化指数函数(SoftMax函数)

         激活函数负责将神经元的输入映射到输出端,位于隐藏层的神经元内。作用:引入非线性以处理现实复杂问题。

         SoftMax函数负责处理输出层神经元的输出结果,位于模型编译过程中、损失函数内。作用:将输出层数值处理为 [0,1]范围内的概率分布,用于预测。

      (3)SoftMax函数及其损失函数的数学原理

        对于输出结果向量\textbf{z}=[z_1,z_2,\cdots ,z_n]^TSoftMax函数:

\textbf{a}=\frac{1}{\sum_{k=1}^{n}e^{z_k}}\begin{bmatrix} e^{z_1}\\ e^{z_2}\\ \cdots \\ e^{z_n} \end{bmatrix}

        对于SoftMax处理后的数值,采用交叉熵损失函数:

 L(\textbf{a},y)=\left\{\begin{matrix} -log(a_1),\textbf{if} y=1\\ -log(a_2),\textbf{if} y=2\\ \cdots \\ -log(a_n),\textbf{if} y=n \end{matrix}\right.

       成本函数:

J(\textbf{w},b)=-[\sum_{i=1}^{m}\sum_{j=1}^{n}\begin{Bmatrix} y^{(i)}==j \end{Bmatrix}log\frac{e^{z^{(i)}_j}}{\sum_{k=1}^{n}e^{z^{(i)}_k}}]

      然而,实际项目中可能遇到比较大的数值,SoftMax函数第1步会先进行指数计算(即e^x),这往往造成内存溢出无法计算。因此,可对SoftMax函数及其损失函数进行算法优化:

      本质为取C=\textbf{z}_{max}进行归一化预处理,具体推导过程如下:

       优化后的SoftMax函数如下:

\textbf{a}=\frac{1}{\sum_{k=1}^{n}e^{z_k-C}}\begin{bmatrix} e^{z_1-C}\\ e^{z_2-C}\\ \cdots \\ e^{z_n-C} \end{bmatrix}

       优化后的第k类的损失函数为:

L(\textbf{z})=C+log(\sum_{i=1}^{n}e^{z_i-C})-z_k

       式中,C=\textbf{z}_{max}k为目标值(类别),即y=k,总共有n类。

04 应用示例

     (1)示例描述

       采用sklearn库中的make_blobs函数随机生成4类共2000个数据点,然后基于这4类数据,采用人工神经网络对其进行分类并可视化。

    (2)代码实现

      第1步,导入所需模块:

import numpy as np
import matplotlib.pyplot as plt
%matplotlib widget
from sklearn.datasets import make_blobs
import tensorflow as tf
from tensorflow.keras.models import Sequential
from tensorflow.keras.layers import Dense
np.set_printoptions(precision=2)
from lab_utils_multiclass_TF import *
import logging
logging.getLogger("tensorflow").setLevel(logging.ERROR)
tf.autograph.set_verbosity(0)

      第2步,生成数据:

centers = [[-5, 2], [-2, -2], [1, 2], [5, -2]]  # 4个类中心
X_train, y_train = make_blobs(n_samples=2000, centers=centers, cluster_std=1.0,random_state=30)

      第3步,定义框架、编译模型、训练模型:

model = Sequential([ Dense(25, activation = 'relu'),Dense(15, activation = 'relu'),Dense(4, activation = 'linear')    # < softmax activation here]
)
model.compile(loss=tf.keras.losses.SparseCategoricalCrossentropy(from_logits=True),optimizer=tf.keras.optimizers.Adam(0.001),
)model.fit(X_train,y_train,epochs=100
)

     第4步,结果显示:

plt_cat_mc(X_train, y_train, model, 4)

       运行以上代码,结果如下:

05 总结

     (1)多分类的本质是二分类,基本原理是逻辑回归。

     (2)采用Softmax需在损失函数中定义,并需输出层以激活函数linear配合。

     (3)二分类输出层的神经元个数为1,多分类问题输出层神经元个数为类别个数,若类数未知则可通过试算确定。

相关文章:

吴恩达机器学习 第二课 week2 多分类问题

目录 01 学习目标 02 实现工具 03 概念与原理 04 应用示例 05 总结 01 学习目标 &#xff08;1&#xff09;理解二分类与多分类的原理区别 &#xff08;2&#xff09;掌握简单多分类问题的神经网络实现方法 &#xff08;3&#xff09;理解多分类问题算法中的激活函数与损失…...

112、路径总和

给你二叉树的根节点 root 和一个表示目标和的整数 targetSum 。判断该树中是否存在 根节点到叶子节点 的路径&#xff0c;这条路径上所有节点值相加等于目标和 targetSum 。如果存在&#xff0c;返回 true &#xff1b;否则&#xff0c;返回 false 。 叶子节点 是指没有子节点…...

Vue 封装组件之Input框

封装Input组件:MyInput.vue <template><div class"base-input-wraper"><el-inputv-bind"$attrs"v-on"$listeners"class"e-input":style"inputStyle":value"value":size"size"input&quo…...

一段代码让你了解Java中的抽象

我们先来看一道题&#xff01; 计算几何对象的面积之和&#xff09;编写一个方法&#xff0c;该方法用于计算数组中所有几何对象的面积之和。该方法的签名是&#xff1a; public static double sumArea(GeometricObject[] a) 编写一个测试程序&#xff0c;该程序创建一个包含四…...

Sping源码(九)—— Bean的初始化(非懒加载)— Bean的创建方式(factoryMethod)

序言 前面文章介绍了在Spring中多种创建Bean实例的方式&#xff0c;包括采用FactoryBean的方式创建对象、使用反射创建对象、自定义BeanFactoryPostProcessor。 这篇文章继续介绍Spring中创建Bean的形式之一——factoryMethod。方法用的不多&#xff0c;感兴趣可以当扩展了解。…...

绝对全网首发,利用Disruptor EventHandler实现在多线程下顺序执行任务

disruptor有两种任务处理器&#xff0c;一个是EventHandler ,另一个是WorkHandler. EventHandler可以彼此独立消费同一个队列中的任务&#xff0c;WorkHandler可以共同竞争消费同一个队列中的任务。也就是说&#xff0c;假设任务队列中有a、b、c、d三个事件&#xff0c;eventHa…...

单例设计模式双重检查的作用

先看双重校验锁的写法 public class Singleton {/*volatile 修饰&#xff0c;singleton new Singleton() 可以拆解为3步&#xff1a;1、分配对象内存(给singleton分配内存)2、调用构造器方法&#xff0c;执行初始化&#xff08;调用 Singleton 的构造函数来初始化成员变量&am…...

NGINX_十二 nginx 地址重写 rewrite

十二 nginx 地址重写 rewrite 1 什么是Rewrite Rewrite对称URL Rewrite&#xff0c;即URL重写&#xff0c;就是把传入Web的请求重定向到其他URL的过程。URL Rewrite最常见的应用是URL伪静态化&#xff0c;是将动态页面显示为静态页面方式的一种技术。比如 http://www.123.com…...

react用ECharts实现组织架构图

找到ECharts中路径图。 然后开始爆改。 <div id{org- name} style{{ width: 100%, height: 650, display: flex, justifyContent: center }}></div> // data的数据格式 interface ChartData {name: string;value: number;children: ChartData[]; } const treeDep…...

坚持刷题|合并有序链表

文章目录 题目思考代码实现迭代递归 扩展实现k个有序链表合并方法一方法二 PriorityQueue基本操作Java示例注意事项 Hello&#xff0c;大家好&#xff0c;我是阿月。坚持刷题&#xff0c;老年痴呆追不上我&#xff0c;消失了一段时间&#xff0c;我又回来刷题啦&#xff0c;今天…...

SPI协议——对外部SPI Flash操作

目录 1. W25Q32JVSSIQ背景知识 1.1 64个可擦除块 1.2 1024个扇区&#xff08;每个块有16个扇区&#xff09; 1.3 页 1. W25Q32JVSSIQ背景知识 W25Q32JV阵列被组织成16,384个可编程页&#xff0c;每页有256字节。一次最多可以编程256个字节。页面可分为16组(4KB扇区清除&…...

kotlin类型检测与类型转换

一、is与!is操作符 1、使用 is 操作符或其否定形式 !is 在运行时检测对象是否符合给定类型。 fun main() {var a "1"if(a is String) {println("a是字符串类型:${a.length}")}// 或val b a is Stringprintln(b) } 二、"不安全的"转换操作符…...

【JDBC】Oracle数据库连接问题记录

Failed to load driver class oracle.jdbc.driver.OracleDriver in either of HikariConfig class oracle驱动包未正确加载&#xff0c;可以先尝试使用下面方式加载检查类是否存在&#xff0c;如果不存在需要手动下载odbc包 try {Class.forName("oracle.jdbc.driver.Ora…...

leetcode45 跳跃游戏II

题目 给定一个长度为 n 的 0 索引整数数组 nums。初始位置为 nums[0]。 每个元素 nums[i] 表示从索引 i 向前跳转的最大长度。换句话说&#xff0c;如果你在 nums[i] 处&#xff0c;你可以跳转到任意 nums[i j] 处: 0 < j < nums[i] i j < n 返回到达 nums[n - 1]…...

【数学】什么是方法矩估计?和最大似然估计是什么关系?

背景 方法矩估计&#xff08;Method of Moments Estimation&#xff09;和最大似然估计&#xff08;Maximum Likelihood Estimation, MLE&#xff09;是两种常用的参数估计方法。方法矩估计基于样本矩与总体矩的关系&#xff0c;通过样本数据计算样本矩来估计总体参数。最大似…...

C++初学者指南第一步---10.内存(基础)

C初学者指南第一步—10.内存&#xff08;基础&#xff09; 文章目录 C初学者指南第一步---10.内存&#xff08;基础&#xff09;1.内存模型1.1 纸上谈兵&#xff1a;C的抽象内存模型1.2 实践&#xff1a;内存的实际处理 2. 自动存储3.动态存储&#xff1a;std::vector3.1 动态内…...

扩散模型详细推导过程——编码与解码

符号表 符号含义 x ( i ) z 0 ( i ) \boldsymbol{x}^{(i)}\boldsymbol{z}_0^{(i)} x(i)z0(i)​第 i i i个训练数据&#xff0c;其为长度为 d d d的向量 z t ( i ) \boldsymbol{z}_t^{(i)} zt(i)​第 i i i个训练数据在第 t t t时刻的加噪版本 ϵ t ( i ) \boldsymbol{\epsilo…...

js如何实现开屏弹窗

开屏弹窗是什么&#xff0c;其实就是第一次登录后进入页面给你的一种公告提示&#xff0c;此后再回到当前这个页面时弹窗是不会再出现的。也就是说这个弹窗只会出现一次。 <!DOCTYPE html> <html><head><meta charset"utf-8"><title>…...

C#——文件读取Directory类详情

文件读取Directory类 Durectory提供了目录以及子目录进行创建移动和列举操作方法 Directory和Directorylnfo类(主要操作文件目录属性列如文件是否隐藏的 或者只读等这些属性) Directory对目录进行复制、移动、重命名、创建和删除等操作DirectoryInfo用于对目录属性执行操作 …...

Ruby on Rails Post项目设置网站初始界面

在构建了Ruby的Web服务器后&#xff0c;第三步就可以去掉框架的官方页面&#xff0c;设置自己的网页初始页了。 Linux系统安装Ruby语言-CSDN博客 、在Ubuntu中创建Ruby on Rails项目并搭建数据库-CSDN博客、 Ruby语言建立Web服务器-CSDN博客 了解Ruby onRails项目中的主要文件…...

03-QTWebEngine中使用qtvirtualkeyboard

qt提供了 virtualKeyboard 虚拟键盘模块&#xff0c;只需要在在main函数中最开始加入这样一句就可以了 qputenv("QT_IM_MODULE", QByteArray("qtvirtualkeyboard")); 但是在使用的时候遇到了一些问题&#xff1a; 1、中文输入的时候没有输入提示 Qvirt…...

leetcode3无重复字符的最长字串(重点讲滑动窗口)

本文主要讲解无重复字符的最长字串的要点与细节&#xff0c;根据步骤一步步走更方便理解 c与java代码如下&#xff0c;末尾 具体要点&#xff1a; 1. 区分一下子串和子序列 子串&#xff1a;要求元素在母串中是连续地出现 子序列&#xff1a;不要求连续 2. 题目中有两个核心…...

Gobject tutorial 八

The GObject base class Object memory management Gobject的内存管理相关的API很复杂&#xff0c;但其目标是提供一个基于引用计数的灵活的内存管理模式。 下面我们来介绍一下&#xff0c;与管理引用计数相关的函数。 Reference Count 函数g_object_ref和g_object_unref的…...

DDMA信号处理以及数据处理的流程---cfar检测

Hello,大家好,我是Xiaojie,好久不见,欢迎大家能够和Xiaojie一起学习毫米波雷达知识,Xiaojie准备连载一个系列的文章—DDMA信号处理以及数据处理的流程,本系列文章将从目标生成、信号仿真、测距、测速、cfar检测、测角、目标聚类、目标跟踪这几个模块逐步介绍,这个系列的…...

【机器学习】从理论到实践:决策树算法在机器学习中的应用与实现

&#x1f4dd;个人主页&#xff1a;哈__ 期待您的关注 目录 &#x1f4d5;引言 ⛓决策树的基本原理 1. 决策树的结构 2. 信息增益 熵的计算公式 信息增益的计算公式 3. 基尼指数 4. 决策树的构建 &#x1f916;决策树的代码实现 1. 数据准备 2. 决策树模型训练 3.…...

Zookeeper 集群节点故障剔除、切换、恢复原理

Zookeeper 集群节点故障剔除、切换、恢复原理 zookeeper 集群节点故障时,如何剔除节点,如果为领导节点如何处理,如何进行故障恢 复的,实现原理? 在 Zookeeper 集群中,当节点故障时,集群需要自动剔除故障节点并进行故障恢复,确保集群的高 可用性和一致性。具体来说,…...

解决帝国cms栏目管理拼音乱码的问题

帝国CMS7.5版本utf-8版网站后台增加栏目生成乱码的问题怎么解决 1、需要改一个函数&#xff0c;并且增加一个处理文件&#xff0c;方法如下&#xff1a; 修改e/class/connect.php文件&#xff0c;找到ReturnPinyinFun函数&#xff0c;如未修改文件在4533-4547行&#xff0c;将…...

Git快速入门

一 快速使用 1.1 初始化 什么是版本库呢&#xff1f;版本库又名仓库&#xff0c;可以简单理解成一个目录&#xff0c;这个目录里面的所有文件都可以被Git管理起来&#xff0c;每个文件的修改、删除&#xff0c;Git都能跟踪&#xff0c;以便任何时刻都可以追踪历史&#xff0…...

【18.0】JavaScript---事件案例

【18.0】JavaScript—事件案例 【一】开关灯事件 【介绍】设置一个按钮&#xff0c;按下按钮触发事件&#xff0c;来回切换圆形图片的颜色 【分析】 图片设置&#xff1a;设置成圆形的图片背景颜色&#xff1a;设置红绿两个颜色&#xff0c;来回切换按钮设置&#xff1a;点击…...

推荐系统三十六式学习笔记:原理篇.矩阵分解12|如果关注排序效果,那么这个模型可以帮到你

目录 矩阵分解的不足贝叶斯个性化排序AUC构造样本目标函数训练方法 总结 矩阵分解在推荐系统中的地位非常崇高。它既有协同过滤的血统&#xff0c;又有机器学习的基因&#xff0c;可以说是非常优秀了&#xff1b;但即便如此&#xff0c;传统的矩阵分解无论是在处理显式反馈&…...

网站开发从什么学起/友链提交入口

1、 如何判断字段的值里面:那些数据包含小写字母或大小字母判断字段NAME的值里面有小写字母的记录方式1&#xff1a;方式2判断字段NAME的值里面有大写字母的记录方式1&#xff1a;方式2&#xff1a;2、如何判断字段里面的值里面包含特殊字符例如&#xff0c;我想找出表TEST的字…...

宣传型企业网站设计方案/网站服务器ip查询

可以使用 filter() 函数和一个自定义函数来过滤多个字典。自定义函数需要接受一个字典作为参数,并根据需要返回 True 或 False。然后将该函数作为第一个参数传递给 filter() 函数,将字典列表作为第二个参数传递给 filter() 函数,即可得到过滤后的字典列表。 举个例子: def …...

域名对网站排名的影响/外贸网站制作公司

我的这篇博客有详细的JSON规范格式说明。 JSON格式说明。这篇博客的内容摘录自RFC草案7159&#xff0c;所以权威性很高。 JSON是javascript中引用数据类型–对象的超集(子集:[超-出自java面相对象之继承之super关键词])。它的初衷是为了解决各个软件系统之间交换数据的需求。和…...

外贸网站制作教程/宁波seo关键词

在第二篇文章中提到了修改用户名密码的方式&#xff0c;下面来看看ActiveMQ连接安全问题&#xff1a; 一、客户端连接服务端 如果消息服务器activemq.xml中设置了用户名、密码则消息生产者和消息消费者连接到消息服务器是如果用户名密码和消息服务器设定的不一样则不能发送或…...

仓储设备东莞网站建设/最新新闻热点事件及评论

背景 在SpringBoot 2.3.1.RELEASE整合Mybatis 2.1.3多数据源配置的过程中,遇到过一个坑点,花了我一下午时间,最后解决掉了,这里总结一下,防止大家在SpringBoot 整合Mybatis多数据源的过程中遇到这个问题,可少趟坑。 下面这行异常信息就是上面提到的坑点,在网上查找了很…...

网站建设课程教学计划/南昌seo实用技巧

Github地址&#xff1a;https://github.com/littlenorthwest/personal-project PSP Table PSP2.1Personal Software Process Stages预估耗时&#xff08;分钟&#xff09;实际耗时&#xff08;分钟&#xff09;Planning计划 60 80 Estimate 估计这个任务需要多少时间 60   80…...