头歌-机器学习 第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.mzph.cn/news/807368.shtml

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

相关文章

【星戈瑞】DBCO-NH2在生物成像技术中的应用

DBCO-NH2作为一种生物标记分子,在生物成像技术中发挥诸多应用作用。其点击化学反应特性使得它能够在生物体内进行特异的标记,从而为生物医学研究提供工具。 在生物成像技术中,DBCO-NH2常被用于标记生物分子,如蛋白质、核酸等。通…

Android 9.0 framework层实现app默认全屏显示

1.前言 在9.0的系统rom产品定制化开发中,在对于第三方app全屏显示的功能需求开发中,需要默认app全屏显示,针对这一个要求,就需要在系统启动app 的过程中,在绘制app阶段就设置全屏属性,接下来就实现这个功能 效果图如下: 2.framework层实现app默认全屏显示的核心类 fram…

【科研】搜索文献的网站

文章目录 paperswithcode【最新论文,代码】huggingface【大语言模型,最新论文】dblp【关键词搜索】arxiv【最新文章】semanticscholar【相关引用查询】connectedpapers【相关引用查询】github【工程,代码,论文开源代码】 paperswi…

mmdetection模型使用mmdeploy部署在windows上的c++部署流程【详细全面版】

0. 前置说明: 该文档适用于:已经使用mmdetection训练好了模型,并且完成了模型转换。要进行模型部署了。 1. 概述 MMDeploy 定义的模型部署流程,如下图所示: 模型转换【待撰写,敬请期待…】 主要功能是:把输入的模型格式,转换为目标设备的推理引擎所要求的模型格式…

andorid 矢量图fillColor设置无效

问题:andorid 矢量图fillColor设置无效 解决:去掉如下 android:tint一行

Ansys Zemax | 如何将光栅数据从Lumerical导入至OpticStudio(下)

附件下载 联系工作人员获取附件 本文介绍了一种使用Ansys Zemax OpticStudio和Lumerical RCWA在整个光学系统中精确仿真1D/2D光栅的静态工作流程。将首先简要介绍方法。然后解释有关如何建立系统的详细信息。 本篇内容将分为上下两部分,上部将首先简要介绍方法工作…

antdesign 1.7.8 vue2 table实现列合并

无分页,需要根据mac列进行列合并,最终效果如下所示: 核心实现如下: // 核心代码 const getRowspan (dataScroce, filed) > {let spanArr [];let position 0;dataScroce.forEach((item, index) > {if (index 0) {spanAr…

金三银四面试题(十九):MySQL中的锁

在MySQL中,锁是非常重要的,特别是在多用户并发访问数据库的环境中,因此也是面试中常问的话题。 请说说数据库的锁? 关于MySQL 的锁机制,可能会问很多问题,不过这也得看面试官在这方面的知识储备。 MySQL …

深入了解Redis——持久化

一,Redis持久化 Redis持久化即将内存中的数据持久化到磁盘中,在下一次重启后还能进行使用,Redis持久化分为RDB和AOF两种,我们接下来分别介绍RDB和AOF的内部原理和区别 RDB Redis运行时会将当前的内存快照存入至磁盘中&#xff…

./build/examples/openpose/openpose.bin在windows中调用

直接看这个更简单的方法:https://blog.csdn.net/weixin_45615730/article/details/137591825?spm1001.2014.3001.5501 问题描述: 在跑pifuhd,需要两个输入,一个图片,一个关键点json文件。这是人家给的例子&#xff0…

怎么开发一个预约小程序_一键预约新体验

预约小程序,让生活更便捷——轻松掌握未来,一键预约新体验 在快节奏的现代生活中,我们总是在不断地奔波,为了工作、为了生活,不停地忙碌着。然而,在这繁忙的生活中,我们是否曾想过如何更加高效…

邮件群发提高成功率的技巧?如何群发邮件?

邮件群发有哪些注意事项?怎么有效分析邮件群发效果? 邮件群发已经成为一种高效的信息传递手段。然而,很多人发现,尽管发送了大量的邮件,但回应率却并不理想。那么,如何才能在邮件群发中提高成功率呢&#…

只为兴趣,2024年你该学什么编程?

讲动人的故事,写懂人的代码 当你想学编程但不是特别关心找工作的时候,选哪种语言学完全取决于你自己的目标、兴趣和能找到的学习资料。一个很重要的点,别只学一种语言啊!毕竟,"门门都懂,样样皆通",每种编程语言都有自己的优点和适合的用途,多学几种可以让你的…

Day 20 654.最大二叉树 617.合并二叉树 700.二叉搜索树中的搜索 98.验证二叉搜索树

最大二叉树 给定一个不含重复元素的整数数组。一个以此数组构建的最大二叉树定义如下: 二叉树的根是数组中的最大元素。左子树是通过数组中最大值左边部分构造出的最大二叉树。右子树是通过数组中最大值右边部分构造出的最大二叉树。 通过给定的数组构建最大二叉…

【鸿蒙千帆起】《开心消消乐》完成鸿蒙原生应用开发,创新多端联动用户体验

《开心消消乐》已经完成鸿蒙原生应用开发,乐元素成为率先完成鸿蒙原生应用开发的20游戏厂商之一。作为一款经典游戏,《开心消消乐》已经拥有8亿玩家,加入鸿蒙原生应用生态,将为其带来更优的游戏性能和更多创新体验。自9月25日华为…

中国500米分辨率月最大EVI数据集

增强型植被指数(EVI)是在归一化植被指数(NDVI)改善出来的,根据大气校正所包含的影像因子大气分子、气溶胶、薄云、水汽和臭氧等因素进行全面的大气校正,EVI大气校正分三步,第一步是去云处理。第…

【SQL Sever】3. 用户管理 / 权限管理

1. 创建登录名/用户/角色 在SQL Server中,创建用户通常涉及几个步骤。 首先,你需要创建一个登录名,然后你可以基于这个登录名在数据库中创建一个用户。 以下是如何做到这一点的步骤和相应的SQL语句: 创建登录名 首先&#xff0c…

Python零基础从小白打怪升级中~~~~~~~文件和文件夹的操作 (1)

第七节:文件和文件夹的操作 一、IO流(Stream) 通过“流”的形式允许计算机程序使用相同的方式来访问不同的输入/输出源。stream是从起源(source)到接收的(sink)的有序数据。我们这里把输入/输…

企业鸿蒙原生应用元服务备案实操基本材料要求

一、要提前准备的主要材料包括 域名,服务器,包名,公钥,MD5值,法人身份证正反两面,邮箱,手机号2个。 域名是备案过的,应为要求域名能打开,还要悬挂备案号。 操作时要提前沟…

目标检测——瓶装白酒疵品检测数据集

一、重要性及意义 瓶装白酒疵品检测在白酒生产过程中具有极其重要的地位,其重要性和意义主要体现在以下几个方面: 首先,瓶装白酒疵品检测是保障消费者权益的关键环节。白酒作为消费者日常饮用的酒类之一,其品质直接关系到消费者…