头歌-机器学习 第11次实验 softmax回归

第1关:softmax回归原理

任务描述

本关任务:使用Python实现softmax函数。

相关知识

为了完成本关任务,你需要掌握:1.softmax回归原理,2.softmax函数。

softmax回归原理

与逻辑回归一样,softmax回归同样是一个分类算法,不过它是一个多分类的算法,我们的数据有多少个特征,则有多少个输入,有多少个类别,它就有多少个输出。

如上图,可以看出我们的数据有四个特征,三个类别。每个输入与输出都有一个权重相连接,且每个输出都有一个对应的偏置。具体公式如下:

z1​=x1​w11​+x2​w12​+x3​w13​+x4​w14​+b1​

z2​=x1​w21​+x2​w22​+x3​w23​+x4​w24​+b2​

z3​=x1​w31​+x2​w32​+x3​w33​+x4​w34​+b3​

输出z1​,z2​,z3​值的大小,代表属于每个类别的可能性。如:z1​=1,z2​=10,z3​=100表示样本预测为z3​这个类别。 然而,直接将得到的输出作为判断样本属于某个类别的可能性存在不少的弊端。如,你得到一个输出为10,你可能觉得他属于这个类别的可能性很大,但另外两个输出的值都为1000,这个时候表示是这个类别的可能性反而非常小。所以,我们需要将输出统一到一个范围,如01之间。这个时候,如果有一个输出的值为0.9,那么你就可以非常确定,它属于这个类别了。

softmax函数

softmax函数公式如下:

y^​i​=∑i=1c​exp(zi​)exp((zi​))​

其中,i表示第i个类别,c为总类别数。由公式可知:

0≤y^​≤0

i=1∑c​y^​=1

这样就可以将输出的值转换到01之间,且总和为1。每个类别对应的输出值可以当做样本为这个类别的概率。对于单个样本,假如一共有0,1,2三个类别,对应的输出为[0.2,0.3,0.5]则最后判断为2这个类别。

编程要求

根据提示,在右侧编辑器补充Python代码,实现softmax函数,底层代码会调用你实现的softmax函数来进行测试。

测试说明

程序会调用你实现的方法对随机生成的数据进行测试,若结果正确则视为通关,否则输出使用你方法后返回的数据。

#encoding=utf8
import numpy as npdef softmax(x):'''input:x(ndarray):输入数据,shape=(m,n)output:y(ndarray):经过softmax函数后的输出shape=(m,n)'''# 确保x是一个二维数组assert len(x.shape) == 2# 对每一行求最大值row_max = np.max(x, axis=1)# 对每个元素减去所在行的最大值x -= row_max.reshape((-1, 1))# 计算指数函数exp_x = np.exp(x)# 对每一行求和row_sum = np.sum(exp_x, axis=1)# 除以所在行的总和y = exp_x / row_sum.reshape((-1, 1))return y

第2关:softmax回归训练流程

任务描述

本关任务:使用python实现softmax回归算法,使用已知鸢尾花数据对模型进行训练,并对未知鸢尾花数据进行预测。

相关知识

为了完成本关任务,你需要掌握:1.softmax回归模型,2.softmax回归训练流程。

softmax回归模型

与逻辑回归一样,我们先对数据进行向量化:

X=(x0​,x1​,...,xn​)

其中,x0​等于1。且X形状为mn+1列,m为样本个数,n为特征个数。

W=(w1​,...,wc​)

W形状为n+1c列,c为总类别个数。

Z=XW

Z形状为mc列。

Y^=softmax(Z)

同样的,Y^的形状为mc列。第i行代表第i个样本为每个类别的概率。

对于每个样本,我们将其判定为输出中最大值对应的类别。

softmax回归训练流程

softmax回归训练流程同逻辑回归一样,首先得构造一个损失函数,再利用梯度下降方法最小化损失函数,从而达到更新参数的目的。具体流程如下:

关于梯度下降详细内容请点击查看

softmax回归使用的损失函数为交叉熵损失函数,公式如下:

loss=m1​i=1∑m​−yi​logy^​i​

其中,yi​为onehot后的标签,y^​i​为预测值。同样的我们可以求得损失函数对参数的梯度为:

∂w∂loss​=(y^​−y)x

于是,在softmax回归中的梯度下降公式如下:

W=W−ηX.T(Y^−Y)

编程要求

根据提示,在右侧编辑器补充代码,实现softmax回归算法。

测试说明

程序会调用你实现的方法对模型进行训练,并对未知鸢尾花数据进行预测,正确率大于0.95则视为通关。

import numpy as np
from sklearn.preprocessing import OneHotEncoderdef softmax(x):'''input:x(ndarray):输入数据output:y(ndarray):经过softmax函数后的输出'''#********* Begin *********## 确保x是一个二维数组assert len(x.shape) == 2# 对每一行求最大值row_max = np.max(x, axis=1)# 对每个元素减去所在行的最大值x -= row_max.reshape((-1, 1))# 计算指数函数exp_x = np.exp(x)# 对每一行求和row_sum = np.sum(exp_x, axis=1)# 除以所在行的总和y = exp_x / row_sum.reshape((-1, 1))#********* End *********#return ydef softmax_reg(train_data,train_label,test_data,lr,max_iter):'''input:train_data(ndarray):训练数据train_label(ndarray):训练标签test_data(ndarray):测试数据lr(float):梯度下降中的学习率参数max_iter(int):训练轮数output:predict(ndarray):预测结果'''#********* Begin *********##将x0加入训练数据m,n = train_data.shapetrain_data = np.insert(train_data, 0, values=np.ones(m), axis=1)#转换为onehot标签enc = OneHotEncoder()train_label = enc.fit_transform(train_label.reshape(-1, 1)).toarray()#对w,z,y初始化w = np.zeros((n+1, train_label.shape[1]))z = np.dot(train_data, w)y = softmax(z)#利用梯度下降对模型进行训练for i in range(max_iter):# 计算梯度gradient = np.dot(train_data.T, (y - train_label))# 更新权重w -= lr * gradient# 重新计算z和yz = np.dot(train_data, w)y = softmax(z)#将x0加入测试数据m_test,n_test = test_data.shapetest_data = np.insert(test_data, 0, values=np.ones(m_test), axis=1)#进行预测predict = np.argmax(np.dot(test_data, w), axis=1)#********* End *********#return predict

第3关:sklearn中的softmax回归

任务描述

本关任务:使用sklearn中的LogisticRegression类完成红酒分类任务。

相关知识

为了完成本关任务,你需要掌握如何使用sklearn提供的LogisticRegression类。

数据集介绍

数据集为一份红酒数据,一共有178个样本,每个样本有13个特征,3个类别,你需要自己根据这13个特征对红酒进行分类,部分数据如下图:

数据获取代码:

 
  1. import pandas as pd
  2. data_frame = pd.read_csv('./step3/dataset.csv', header=0)
LogisticRegression

LogisticRegression中将参数multi_class设为"multinomial"则表示使用softmax回归方法。 LogisticRegression的构造函数中有三个常用的参数可以设置:

  • solver{'newton-cg' , 'lbfgs', 'sag', 'saga'}, 分别为几种优化算法。
  • C:正则化系数的倒数,默认为1.0,越小代表正则化越强。
  • max_iter:最大训练轮数,默认为100

sklearn 中其他分类器一样,LogisticRegression类中的fit函数用于训练模型,fit函数有两个向量输入:

  • X:大小为 [样本数量,特征数量] 的ndarray,存放训练样本
  • Y:值为整型,大小为 [样本数量] 的ndarray,存放训练样本的分类标签

LogisticRegression类中的predict函数用于预测,返回预测标签,predict函数有一个向量输入:

  • X:大小为[样本数量,特征数量]的ndarray,存放预测样本

LogisticRegression的使用代码如下:

 
  1. softmax_reg = LogisticRegression(multi_class="multinomial")
  2. softmax_reg.fit(X_train, Y_train)
  3. result = softmax_reg.predict(X_test)
编程要求

根据提示,在右侧编辑器补充代码,利用sklearn实现softmax回归。

测试说明

程序会调用你实现的方法对红酒数据进行分类,正确率大于0.95则视为通关。

#encoding=utf8
from sklearn.linear_model import LogisticRegression
def softmax_reg(train_data,train_label,test_data):'''input:train_data(ndarray):训练数据train_label(ndarray):训练标签test_data(ndarray):测试数据output:predict(ndarray):预测结果'''#********* Begin *********#clf = LogisticRegression(C=0.99,solver='lbfgs',multi_class='multinomial',max_iter=200)clf.fit(train_data,train_label)predict = clf.predict(test_data)#********* End *********#return predict

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

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

相关文章

MySQL学习笔记(数据类型, DDL, DML, DQL, DCL)

Learning note 1、前言2、数据类型2.1、数值类型2.2、字符串类型2.3、日期类型 3、DDL总览数据库/表切换数据库查看表内容创建数据库/表删除数据库/表添加字段删除字段表的重命名修改字段名(以及对应的数据类型) 4、DML往字段里写入具体内容修改字段内容…

杰发科技AC7840——CAN通信简介(3)_时间戳

0. 时间戳简介 时间戳表示的是收到该CAN消息的时刻,通过连续多帧的时间戳,可以计算出CAN消息的发送周期,也可以用于判断CAN消息是否被持续收到。 1. 使用步骤 注意分别是发送和接收的功能: 2. 现象分析_接收时间戳 看下寄存器的…

机器学习(31)PINN

文章目录 摘要Abstract一、监督学习二、文献阅读1. 题目2. abstract3. 偏微分方程的数据驱动解3.1连续时间模型example(Schrodinger equation): 3.2离散时间模型Example (Allen–Cahn equation): 4. 文献解读4.1 Introduction4.2 创新点 三、实验内容1.实…

Eigen库从入门到放弃(2. Getting Started)

Eigen的头文件定义了多种类型,但是对于简单的来说,使用MatrixXd就足够了,MatrixXd表示任意尺寸的矩阵,但是要注意数据类型是double的。Eigen/Dense的头文件定义了所有MatrixXd和相关类型的成员函数。所有头文件中定义的函数都是在…

华为2024年校招实习硬件-结构工程师机试题(四套)

华为2024年校招&实习硬件-结构工程师机试题(四套) (共四套)获取(WX: didadidadidida313,加我备注:CSDN 华为硬件结构题目,谢绝白嫖哈) 结构设计工程师,结…

基于”Python+”多技术融合在蒸散发与植被总初级生产力估算中的应用

熟悉蒸散发ET及其组分(植被蒸腾Ec、土壤蒸发Es、冠层截留Ei)、植被总初级生产力GPP的概念和碳水耦合的基本原理;掌握利用Python与ArcGIS工具进行课程相关的操作;熟练掌握国际上流行的Penman-Monteith模型,并能够应用该…

大语言模型总结整理(不定期更新)

《【快捷部署】016_Ollama(CPU only版)》 介绍了如何一键快捷部署Ollama,今天就来看一下受欢迎的模型。 模型简介gemmaGemma是由谷歌及其DeepMind团队开发的一个新的开放模型。参数:2B(1.6GB)、7B&#xff…

BLIP 算法阅读记录---一个许多多模态大语言模型的基本组件

论文地址:😈 目录 一、环境配置以及数据集准备 数据集准备 数据集格式展示 环境配置,按照官网所述即可 二、一些调整 vit_base的预训练模型 远程debug的设置 Tokenizer初始化失败 读入网络图片的调整 三、训练过程 Image Encoder …

[leetcode] all-nodes-distance-k-in-binary-tree 二叉树中所有距离为 K 的结点

. - 力扣(LeetCode) 给定一个二叉树(具有根结点 root), 一个目标结点 target ,和一个整数值 k 。 返回到目标结点 target 距离为 k 的所有结点的值的列表。 答案可以以 任何顺序 返回。 示例 1&#xff1a…

服务器主机关机重启告警

提取时间段内系统操作命名,出现系统重启命令,若要出现及时联系确认 重启命令: reboot / init 6 / shutdown -r now(现在重启命令) 关机命令: init 0 / shutdown -h now(关机&#…

Element-UI 自定义-下拉框选择年份

1.实现效果 场景表达&#xff1a; 默认展示当年的年份&#xff0c;默认展示前7年的年份 2.实现思路 创建一个新的Vue组件。 使用<select>元素和v-for指令来渲染年份下拉列表。 使用v-model来绑定选中的年份值。 3.实现代码展示 <template><div><el-…

ping命令返回无法访问目标主机和请求超时浅析

在日常经常用ping命令测试网络是否通信正常&#xff0c;使用ping命令时也经常会遇到这两种情况&#xff0c;那么表示网络出现了问题。 1、请求超时的原因 可以看到“请求超时”没有收到任何回复。要知道&#xff0c;IP数据报是有生存时间的&#xff0c;当其生存时间为零时就会…

医院预约系统微信小程序APP前后端

医院预约系统具体功能介绍&#xff1a;展示信息、可以注册和登录&#xff0c; 预约&#xff08;包含各个科室的预约&#xff0c;可以预约每个各个医生&#xff09;&#xff0c;就诊引导包含预约的具体信息&#xff0c;包含就诊时间、就诊科室、就诊医生以及就诊人信息、和支付状…

有真的副业推荐吗?

#有真的副业推荐吗# 我做副业项目的时候&#xff0c;认识了一位带娃宝妈&#xff0c;讲一下她空闲时间做副业赚钱的故事吧。在一个温馨的小家庭里&#xff0c;李婷是一位全职宝妈&#xff0c;她的主要任务是照顾和陪伴自己可爱的宝宝。然而&#xff0c;随着宝宝逐渐长大&#x…

基于Vue语法实现Tab选项卡

目录 需求&#xff1a; 步骤&#xff1a; 1、安装相关配置文件 1.1、在实现该功能可选择先下载 bootstrap 框架 1.2、在书写脚本前引入 Vue.js&#xff08;路径要改为您下载 Vue.js的路径&#xff09; 2、在脚本中创建 Vue实例并在实例中声明挂载容器&#xff0c;传输数据并声…

ReentrantLock源码阅读

1. 概述 lock锁, 基于队列同步器AQS, 实现公平锁、非公平锁 队列同步器AQS可以阅读我这篇文章&#xff1a; 点击传送 实现了Lock接口: public class ReentrantLock implements Lock// 加锁 获取不到锁一直等待 void lock(); // 加锁 获取不到锁一直等待 等待过程可以被中断…

8路HDMI+8路AV高清视频流媒体编码器JR-3218HD

产品简介&#xff1a; JR-3218HD高清音视频编码产品支持8路高清HDMI音视频采集功能&#xff0c;8路AV视频采集功能&#xff0c;8路3.5MM独独立音频接口采集功能。编码输出双码流H.264格式&#xff0c;音频MP3/AAC格式。编码码率可调&#xff0c;画面质量可控制。支持HTTP/RTSP…

【OpenHarmony】XTS环境配置

零、参考 1、xts测试环境配置&#xff1a;https://www.yuque.com/u25440504/ehvzki/ik2fso 2、Windows安装Python、pip、easy_install的方法&#xff1a;https://pythonjishu.com/bmxqeisbkzgrpnn/ 3、Python中easy_install 和 pip 的安装及使用&#xff1a; https://blog.c…

智能革命:未来人工智能创业的天地

智能革命&#xff1a;未来人工智能创业的天地 一、引言 在这个数字化迅速变革的时代&#xff0c;人工智能(AI)已经从一个边缘科学发展成为推动未来经济和社会发展的关键动力。这一技术领域的飞速进步&#xff0c;不仅影响着科技行业的每一个角落&#xff0c;更是为创业者提供了…

Linux —— FTP服务【从0-1】

目录 一、介绍 1.概述 2.FTP的传输模式 PORT 主动模式 PASV 被动模式 3.FTP服务的作用 二、搭建FTP服务器 FTP服务端配置 1.安装vsftpd文件服务 2.启动服务 3.防火墙配置 4.FTP服务相关文件说明 FTP客户端配置 1.安装FTP客户端工具 lftp 2.访问FTP服务器 Linux系…