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

这篇具有很好参考价值的文章主要介绍了头歌-机器学习 第11次实验 softmax回归。希望对大家有所帮助。如果存在错误或未考虑完全的地方,请大家不吝赐教,您也可以点击"举报违法"按钮提交疑问。

第1关:softmax回归原理

任务描述

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

相关知识

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

softmax回归原理

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

头歌-机器学习 第11次实验 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 np

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

头歌-机器学习 第11次实验 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 OneHotEncoder

def 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 y
    

def 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.shape
    train_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和y
        z = np.dot(train_data, w)
        y = softmax(z)

    #将x0加入测试数据
    m_test,n_test = test_data.shape
    test_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个特征对红酒进行分类,部分数据如下图:

头歌-机器学习 第11次实验 softmax回归,头歌,机器学习,回归,人工智能

数据获取代码:

 
  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则视为通关。文章来源地址https://www.toymoban.com/news/detail-847808.html

#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

到了这里,关于头歌-机器学习 第11次实验 softmax回归的文章就介绍完了。如果您还想了解更多内容,请在右上角搜索TOY模板网以前的文章或继续浏览下面的相关文章,希望大家以后多多支持TOY模板网!

本文来自互联网用户投稿,该文观点仅代表作者本人,不代表本站立场。本站仅提供信息存储空间服务,不拥有所有权,不承担相关法律责任。如若转载,请注明出处: 如若内容造成侵权/违法违规/事实不符,请点击违法举报进行投诉反馈,一经查实,立即删除!

领支付宝红包 赞助服务器费用

相关文章

  • 机器学习|Softmax 回归的数学理解及代码解析

    Softmax 回归是一种常用的多类别分类算法,适用于将输入向量映射到多个类别的概率分布。在本文中,我们将深入探讨 Softmax 回归的数学原理,并提供 Python 示例代码帮助读者更好地理解和实现该算法。 Softmax 函数将输入向量的线性得分转换为每个类别的概率。给定一个输入向

    2024年02月12日
    浏览(25)
  • 2 机器学习知识 Softmax回归 deep learning system

    The hypothesis class: 模型结构 loss fuction 损失函数 An optimization method:在训练集上减小loss的方法 训练数据: x ( i ) ∈ R n , y ( i ) ∈ 1 , . . . , k f o r i = 1 , . . . m x^{(i)}in mathbb{R}^n ,y^{(i)}in {1,...,k} for i=1,...m x ( i ) ∈ R n , y ( i ) ∈ 1 , ... , k f or i = 1 , ... m n 是输入数据的维度,输入的每

    2024年02月05日
    浏览(34)
  • 机器学习_数据升维_多项式回归代码_保险案例数据说明_补充_均匀分布_标准正太分布---人工智能工作笔记0038

    然后我们再来看一下官网注意上面这个旧的,现在2023-05-26 17:26:31..我去看了新的官网, scikit-learn已经添加了很多新功能,     我们说polynomial多项式回归其实是对数据,进行 升维对吧,从更多角度去看待问题,这样 提高模型的准确度. 其实y=w0x0+w1x1.. 这里就是提高了这个x的个数对吧

    2024年02月06日
    浏览(36)
  • 机器学习 day24(多类分类模型,Softmax回归算法及其损失函数)

    1. 多类分类 多类分类问题仍然是分类问题,所以预测y的可能结果是少量的,而不是无穷多个,且对于多类分类它>2 如上图:左侧为二分类,右侧为多分类,可以通过决策边界来划分区域 2. Softmax回归算法 对逻辑回归模型,先计算z,再计算g(z)。此时可以将逻辑回归视为计算

    2024年02月13日
    浏览(31)
  • 头歌人工智能学习记录

    因为这个实训的顺序不同,所以这里的顺序是个人学习的顺序,可能有些变动 相关知识 为了完成本关任务,你需要掌握: 激活函数概述; 线性函数; Sigmoid 函数。 神经网络中的每个神经元节点接受上一层神经元的输出值作为本神经元的输入值,并将输入值传递给下一层,

    2024年02月05日
    浏览(49)
  • 头歌实训-机器学习(逻辑回归)

    1.逻辑回归简述 2.逻辑回归算法详解 3.sklearn逻辑回归 - 手写数字识别 4.逻辑回归案例 - 癌细胞精准识别

    2024年04月13日
    浏览(28)
  • 【头歌平台】人工智能-深度学习初体验

    第一题 神经网络中也有神经元,这些神经元也会与其他神经元相连接,这样就形成了神经网络,而且这种网络我们称之为 全连接网络 。如下图所示( 方块表示神经元 ): 从图可以看出,神经网络由一层一层的神经元所构成的,并且不同的层有不同的名字。其中 输入层 表示用

    2024年02月08日
    浏览(36)
  • 广西民族大学高级人工智能课程—头歌实践教学实践平台—机器翻译--English to Chinese

    任务描述 本关任务:基于机器学习的思想,是一种数据驱动的研究思想,因此首先要对准备研究的数据进行处理。对于机器翻译模型,数据预处理主要分为两个方面: 标准化自然语言语句的格式 构建训练所用的语言词典 将语词转化为向量 相关知识 为了完成本关任务,你需

    2024年02月19日
    浏览(34)
  • 初识人工智能,一文读懂机器学习之逻辑回归知识文集(1)

    🏆作者简介,普修罗双战士,一直追求不断学习和成长,在技术的道路上持续探索和实践。 🏆多年互联网行业从业经验,历任核心研发工程师,项目技术负责人。 🎉欢迎 👍点赞✍评论⭐收藏 🔎 人工智能领域知识 🔎 链接 专栏 人工智能专业知识学习一 人工智能专栏 人

    2024年01月23日
    浏览(46)
  • 头歌平台-人工智能技术应用-实践学习与答案2(补充实训部分)

    注:这一题的输出没有很符合我的预期,所以我干脆直接改了他的print输出,用自己更喜欢的方式输出 注: 这里对字典的统计我引入了defaultdict函数(这个函数是用来新建一个键值对的),算是额外引入了一个算法库使用 测试用例: 一、 针对集体宿舍人员如何科学防控的问

    2024年02月07日
    浏览(51)

觉得文章有用就打赏一下文章作者

支付宝扫一扫打赏

博客赞助

微信扫一扫打赏

请作者喝杯咖啡吧~博客赞助

支付宝扫一扫领取红包,优惠每天领

二维码1

领取红包

二维码2

领红包