Loading [MathJax]/jax/output/CommonHTML/config.js
前往小程序,Get更优阅读体验!
立即前往
首页
学习
活动
专区
圈层
工具
发布
首页
学习
活动
专区
圈层
工具
MCP广场
社区首页 >专栏 >Softmax ClassifierSoftmax Classifier

Softmax ClassifierSoftmax Classifier

作者头像
西红柿炒鸡蛋
发布于 2018-09-07 09:28:22
发布于 2018-09-07 09:28:22
47900
代码可运行
举报
文章被收录于专栏:自学笔记自学笔记
运行总次数:0
代码可运行

Softmax Classifier

softmax分类器和logistics regression有点像,softmax其实就是从logistics发张过来的。由于是多分类了,需要走更多的概率来表示每一个分类。softmax的公式:

问题来了,为什么不直接求

?而是绕这么大的一圈最后还是求最大值。①我们需要的其实就是max,但是这个max有一个缺点,就是不可导。所以我们需要一个函数来模拟max,exp是指数函数,数值大的增长的速度就会更块,这样就可以把最大的区分出来。同时也是可导的,这样设计也可以使得特征对概率的影响是乘性的。②softmax是从logistics发展过来的,自然就用到了交叉熵损失函数,

,目标类

其他的都是0,这个时候求导,

,这个形式非常简洁,而且与线性回归(采用最小均方误差目标函数)、两类分类(采用cross-entropy目标函数)时的形式一致。 主要实现流程: 首先就是exp的归一化操作,得到当前样本属于每一个类别的概率,

然后就是求对数化求cost function。

求导操作:

Softmax里的参数特点

所以可以看出,最优参数

减去一些向量φ对预测结果是没有什么影响的,也就是说在模型里面,是有多组的最优解,因为φ的不同就意味着不同的解,而φ对于结果又是没有影响的,所以就存在多组解的可能。

Softmax和logistics的关系

所以说softmax是logistics的一种扩展,回到二分类,softmax也是一样的,都是用的cross-entropy。

代码实现

使用手写数字识别的数据集:

代码语言:javascript
代码运行次数:0
运行
AI代码解释
复制
class DataPrecessing(object):
    def loadFile(self):
        (x_train, x_target_tarin), (x_test, x_target_test) = mnist.load_data()
        x_train = x_train.astype('float32')/255.0
        x_test = x_test.astype('float32')/255.0
        x_train = x_train.reshape(len(x_train), np.prod(x_train.shape[1:]))
        x_test = x_test.reshape(len(x_test), np.prod(x_test.shape[1:]))
        x_train = np.mat(x_train)
        x_test = np.mat(x_test)
        x_target_tarin = np.mat(x_target_tarin)
        x_target_test = np.mat(x_target_test)
        return x_train, x_target_tarin, x_test, x_target_test

    def Calculate_accuracy(self, target, prediction):
        score = 0
        for i in range(len(target)):
            if target[i] == prediction[i]:
                score += 1
        return score/len(target)

    def predict(self, test, weights):
        h = test * weights
        return h.argmax(axis=1)

引入数据集,格式的转换等等。

代码语言:javascript
代码运行次数:0
运行
AI代码解释
复制
def gradientAscent(feature_data, label_data, k, maxCycle, alpha):
    '''train softmax model by gradientAscent
    input:feature_data(mat) feature
    label_data(mat) target
    k(int) number of classes
    maxCycle(int) max iterator
    alpha(float) learning rate
    '''
    Dataprecessing = DataPrecessing()
    x_train, x_target_tarin, x_test, x_target_test = Dataprecessing.loadFile()
    x_target_tarin = x_target_tarin.tolist()[0]
    x_target_test = x_target_test.tolist()[0]
    m, n = np.shape(feature_data)
    weights = np.mat(np.ones((n, k)))
    i = 0
    while i <= maxCycle:
        err = np.exp(feature_data*weights)
        if i % 100 == 0:
            print('cost score : ', cost(err, label_data))
            train_predict = Dataprecessing.predict(x_train, weights)
            test_predict = Dataprecessing.predict(x_test, weights)
            print('Train_accuracy : ', Dataprecessing.Calculate_accuracy(x_target_tarin, train_predict))
            print('Test_accuracy : ', Dataprecessing.Calculate_accuracy(x_target_test, test_predict))
        rowsum = -err.sum(axis = 1)
        rowsum = rowsum.repeat(k, axis = 1)
        err = err / rowsum
        for x in range(m):
            err[x, label_data[x]] += 1
        weights = weights + (alpha/m) * feature_data.T * err
        i += 1
    return weights

def cost(err, label_data):
    m = np.shape(err)[0]
    sum_cost = 0.0
    for i in range(m):
        if err[i, label_data[i]] / np.sum(err[i, :]) > 0:
            sum_cost -= np.log(err[i, label_data[i]] / np.sum(err[i, :]))
        else:
            sum_cost -= 0
    return sum_cost/m

实现其实还是比较简单的。

代码语言:javascript
代码运行次数:0
运行
AI代码解释
复制
    Dataprecessing = DataPrecessing()
    x_train, x_target_tarin, x_test, x_target_test = Dataprecessing.loadFile()
    x_target_tarin = x_target_tarin.tolist()[0]
    gradientAscent(x_train, x_target_tarin, 10, 100000, 0.001)

运行函数。

本文参与 腾讯云自媒体同步曝光计划,分享自作者个人站点/博客。
原始发表:2018.08.27 ,如有侵权请联系 cloudcommunity@tencent.com 删除

本文分享自 作者个人站点/博客 前往查看

如有侵权,请联系 cloudcommunity@tencent.com 删除。

本文参与 腾讯云自媒体同步曝光计划  ,欢迎热爱写作的你一起参与!

评论
登录后参与评论
暂无评论
推荐阅读
编辑精选文章
换一批
【Web前端】CSS”包装盒“--盒模型
CSS 盒模型(Box Model)在 CSS 中,所有的元素都被一个个的“盒子”包围着,理解这些“盒子”的基本原理,是我们使用 CSS 实现准确布局、处理元素排列的关键。
一条晒干的咸鱼
2024/11/19
2500
【Web前端】CSS”包装盒“--盒模型
CSS布局(一) 盒子模型基础
一、盒子模型 标准盒子模型  从下图可以看到标准 w3c 盒子模型的范围包括 content、padding、border、margin,并且 content 部分不包含其他部分。 怪异盒子模型 从下
柴小智
2018/04/10
1.1K0
CSS布局(一) 盒子模型基础
【CSS】309- 复习 CSS盒模型
CSS盒模型本质上是一个盒子,封装周围的HTML元素,它包括:外边距(margin)、边框(border)、内边距(padding)、实际内容(content)四个属性。 CSS盒模型:标准模型 + IE模型
pingan8787
2019/08/06
1.6K0
【Java 进阶篇】CSS盒子模型详解
CSS盒子模型是网页布局的基础之一,它定义了HTML元素在页面上的占用空间和相互关系。理解CSS盒子模型对于构建各种类型的网页布局至关重要。在本文中,我们将深入探讨CSS盒子模型的各个方面,包括盒子模型的概念、属性和如何使用它们来控制元素的大小和间距。
繁依Fanyi
2023/10/12
3010
【Java 进阶篇】CSS盒子模型详解
理解标准盒模型和怪异模式&box-sizing属性
盒子模型 主要有两种,w3c标准盒模型,IE下的怪异盒模型,其实还有就是弹性盒模型(上篇文章我们用他很好的解决了对齐问题) DTD规范 盒模型分为:标准w3c盒模型、IE盒模型、以及css中的伸缩盒模
okaychen
2018/01/05
1.8K0
理解标准盒模型和怪异模式&box-sizing属性
CSS3盒模型:border-box
box-sizing可以声明计算元素高宽的 CSS 盒模型。它有content-box、border-box和inherit三种取值。其中border-box是 css3 新增,也是主流 UI 框架的全局默认属性。
心谭博客
2020/04/20
3.5K0
CSS 盒子模型(Box Model)
内容区(content) 内容区是盒子模型的中心,它呈现了盒子的主要信息内容,这些内容可以是文本、图片等多种类型。内容区有三个属性,width、height 和overflow。使用width和height属性可以指定盒子内容区的高度和宽度,当内容信息太多,超出内容区所占范围时,可以使用overflow 溢出属性来指定处理方法。当overflow 属性值为hidden时,溢出部分将不可见;为visible时,溢出的内容信息可见,只是被呈现在盒子的外部;当为scroll时,滚动条将被自动添加到盒子中,用户可以通过拉动滚动条显示内容信息;当为auto时,将由浏览器决定如何处理溢出部分。
刘亦枫
2020/03/19
1.4K0
CSS 盒子模型(Box Model)
HTML学习之初识CSS盒子模型
此时的width/height只是content的宽度/高度,是不包含padding和border的值。
用户5921339
2025/05/20
690
HTML学习之初识CSS盒子模型
【原创】CSS中的盒子模型以及设置元素居中
元素的宽度:内容区宽度 + 左右内边距宽度 + 左右边框的宽度 + 左右外边距的宽度。
零点
2023/03/03
1.1K0
前端面试题中的“盒模型”是什么?
css 盒模型(Box Model),在html中任何一个元素都可以看作盒子,这里说的盒子与现实不太一样,css中盒子是二维的,盒子由内到外分四个部分:margin(外边距)、border(边框)、padding(内边距)、content(内容)。css通过margin、border、padding三个属性来控制盒子,content是html元素的内容。
呆呆
2021/09/29
5000
CSS 入门指南(二):盒模型 & 浮动弹性布局 & CSS 特性
这个盒子由这几个部分构成 : 边框 border、 内容 content、 内边距 padding、 外边距 margin
IsLand1314
2025/03/30
1700
CSS 入门指南(二):盒模型 & 浮动弹性布局 & CSS 特性
前端系列第3集-如何理解css盒子型?
CSS盒子模型是一种设计网页布局的概念,它将每个HTML元素表示为一个盒子,该盒子由内容、内边距、边框和外边距组成,这些部分共同构成了一个完整的盒子模型。
达达前端
2023/10/08
4790
前端系列第3集-如何理解css盒子型?
CSS 面试要点:盒模型
盒模型(Box Model) (opens new window),包含了元素内容(content)、内边距(padding)、边框(border)、外边距(margin)。
Cellinlab
2023/05/17
6110
CSS 面试要点:盒模型
每天10个前端小知识 【Day 15】
行框的排列会受到中间空白(回车空格)等的影响,因为空格也属于字符,这些空白也会被应用样式,占据空间,所以会有间隔,把字符大小设为0,就没有空格了。
程序媛夏天
2024/01/18
1600
每天10个前端小知识 【Day 15】
【CSS】最核心的几个概念
本文将讲述 CSS 中最核心的几个概念,包括:盒模型、position、float等。这些是 CSS 的基础,也是最常用的几个属性,它们之间看似独立却又相辅相成。为了掌握它们,有必要写出来探讨一下,如有错误欢迎指正。
前端修罗场
2023/10/07
2750
【CSS】最核心的几个概念
【CSS】5分钟带你彻底搞懂 W3C & IE 盒模型!
大家好,我是HoMeTown,CSS是作为前端必有技术栈之一,但是有很多同学其实对CSS的盒模型都不是很了解,今天想聊一下Css盒子模型。
HoMeTown
2022/10/26
8780
【CSS】5分钟带你彻底搞懂 W3C & IE 盒模型!
【面试题解】CSS盒子模型与margin负值
盒子模型,顾名思义,可以装东西的称为盒子,比如 div,h,li 等等。像 img,input 这种不能装东西的就不是盒子。
一尾流莺
2022/12/10
3290
【面试题解】CSS盒子模型与margin负值
【基础巩固】- 带你搞懂CSS盒模型
其实我们大家都能经常看见它,尤其是我们前端的小伙伴们,在浏览器中打开f12就能看见这样一个动态变化的图。
是乃德也是Ned
2022/08/04
8280
【基础巩固】- 带你搞懂CSS盒模型
css面试点一:盒模型详解+遗漏点
可以说,页面就是由一个个盒模型堆砌起来的,每个HTML元素都可以叫做盒模型,盒模型由外而内包括:边距(margin)、边框(border)、填充(padding)、内容(content)。它在页面中所占的实际宽度是margin + border + paddint + content 的宽度相加。
用户10106350
2022/10/28
4710
css面试点一:盒模型详解+遗漏点
前端面试题2(CSS)
对BFC规范(块级格式化上下文:block formatting context)的理解?
keyWords
2018/09/19
3K0
相关推荐
【Web前端】CSS”包装盒“--盒模型
更多 >
领券
问题归档专栏文章快讯文章归档关键词归档开发者手册归档开发者手册 Section 归档
本文部分代码块支持一键运行,欢迎体验
本文部分代码块支持一键运行,欢迎体验