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 删除。

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

评论
登录后参与评论
暂无评论
推荐阅读
编辑精选文章
换一批
Softmax算法原理及实现
在上一篇的逻辑回归中,主要是用于处理二分类问题,如果面对的是多分类问题,如手写字识别,其中有十个类别,这时候就需要对逻辑回归进行推广,且同样任意两个类之间都是线性可分的。
guichen1013
2020/08/13
1.1K0
Softmax算法原理及实现
我的机器学习算法之路
未来,人工智能是生产力,是变革社会的主要技术力量之一。 掌握人工智能技术,需要从基础的机器学习算法开始学习,逐渐建立机器学习知识体系。
Datawhale
2019/07/08
6170
我的机器学习算法之路
Aggregation Model : Blending , Bagging , Boosting
比如现在有一支股票,你不知道是跌还是涨。你有T个friends,每一个friend对应的建议分别是g1,g2,g3...gn,那么你应该怎么选择建议?
西红柿炒鸡蛋
2018/09/07
6160
卷积神经网络 第一周作业 Convolution+model+-+Application+-+v1
Welcome to Course 4’s second assignment! In this notebook, you will:
Steve Wang
2019/05/29
1.2K0
从零开始实现Logistic Regression,最简单的单元深度神经网络。
来自吴恩达深度学习视频,第二周编程作业,有详细注释。 如果直接看代码对你来说太难,参考 https://blog.csdn.net/u013733326/article/details/79639509。 # Logistic Regression with a Neural Network mindset # Initializing parameters # Calculating the cost function and its gradient # Using an optimizat
Steve Wang
2019/05/26
6070
小白必定收藏的机器学习文章
本篇文章源自武博士,这篇文章在gitchat上原本收费,现在公开分享。 一. 引言
公众号guangcity
2019/09/20
5160
小白必定收藏的机器学习文章
Radial Basis Function Network
使用高斯核函数方式把数据维度扩展到无限维度进而得到一条粗壮的分界线。仔细看一下这个分割函数,其实就是一些Gaussian函数的线性组合,y就是增长的方向。 Gaussian函数还有另外一个叫法——径向基函数,这是因为这个base function的结果只和计算这个x和中心点xn的距离有关,与其他的无关。 从其他方面来看SVM,先构造一个函数: g(x) = y_nexp(-γ|x - x_n|^2)指数求出来的其实就是x点和中心点的相似度,相似度越高,那么=晚y这个方向投票的票数就会越多。不同的g(x)有不同的权重,他们的线性组合就成了SVM,g(x)函数称为是radial function。所以Gaussian SVM就是把一些radial function联合起来做linear aggregation。
西红柿炒鸡蛋
2018/09/07
7810
用Python实现机器学习算法——简单的神经网络
导读:Python 被称为是最接近 AI 的语言。最近一位名叫Anna-Lena Popkes的小姐姐在GitHub上分享了自己如何使用Python(3.6及以上版本)实现7种机器学习算法的笔记,并附有完整代码。所有这些算法的实现都没有使用其他机器学习库。这份笔记可以帮大家对算法以及其底层结构有个基本的了解,但并不是提供最有效的实现。
IT派
2018/07/30
7010
用Python实现机器学习算法——简单的神经网络
Emojify_v2a
Welcome to the second assignment of Week 2. You are going to use word vector representations to build an Emojifier.
列夫托尔斯昊
2020/08/25
1.5K0
Emojify_v2a
softmax分类算法原理(用python实现)
逻辑回归神经网络实现手写数字识别 如果更习惯看Jupyter的形式,请戳Gitthub_逻辑回归softmax神经网络实现手写数字识别.ipynb 1 - 导入模块 import numpy as np import matplotlib.pyplot as plt from PIL import Image from ld_mnist import load_digits %matplotlib inline 2 - 导入数据及数据预处理 mnist = load_digits() Extrac
marsggbo
2018/01/23
4K0
softmax分类算法原理(用python实现)
Convolution_model_Application_v1a
Welcome to Course 4's second assignment! In this notebook, you will:
列夫托尔斯昊
2020/08/25
1.7K0
Convolution_model_Application_v1a
神经网络思想建立LR模型(DL公开课第二周答案)
LR回顾 LR计算图求导 算法结构 设计一个简单的算法实现判别是否是猫。 用一个神经网络的思想建立一个LR模型,下面这个图解释了为什么LR事实上是一个简单的神经网。 [图片上传失败...(image
用户1332428
2018/03/30
8310
神经网络思想建立LR模型(DL公开课第二周答案)
序列模型第二周作业2:Emojify!
在读取data/glove.6B.50d.txt你可能会遇到这样一个问题: 'gbk' codec can't decode byte 0x93 in position 3136 解压作业文件夹同名压缩包,并更改w2v_utils.py文件中的读取函数的with open部分如下:
Steve Wang
2019/05/28
2K0
序列模型第二周作业2:Emojify!
Optimization of Machine Learning
机器学习就是需要找到模型的鞍点,也就是最优点。因为模型很多时候并不是完全的凸函数,所以如果没有好的优化方法可能会跑不到极值点,或者是局部极值,甚至是偏离。所以选择一个良好的优化方法是至关重要的。首先是比较常规的优化方法:梯度下降。以下介绍的这些算法都不是用于当个算法,可以试用于能可微的所有算法。
西红柿炒鸡蛋
2019/01/23
5150
小姐姐带你一起学:如何用Python实现7种机器学习算法(附代码)
2018 区块链技术及应用峰会(BTA)·中国 倒计时 1 天 2018,想要follow最火的区块链技术?你还差一场严谨纯粹的技术交流会——2018区块链技术及应用峰会(BTA)·中国将于2018年3月30-31日登陆北京喜来登长城饭店。追求专业性?你要的这里全都有:当超强嘉宾阵容遇上业界同好的脑洞大联欢,1+1=无限可能,目前门票预购火热进行中。 活动详情: http://dwz.cn/7FI1Ch 编译 | 林椿眄 出品 | 人工智能头条(公众号ID:AI_Thinker) 【AI科技大本营导读】P
用户1737318
2018/06/05
1.7K0
01.神经网络和深度学习 W2.神经网络基础(作业:逻辑回归 图片识别)
文章目录 编程题 1 1. numpy 基本函数 1.1 编写 sigmoid 函数 1.2 编写 sigmoid 函数的导数 1.3 reshape操作 1.4 标准化 1.5 广播机制 2.
Michael阿明
2021/02/19
4370
神经网络python实现
版权声明:本文为博主原创文章,未经博主允许不得转载。 https://blog.csdn.net/haluoluo211/article/details/81158209
bear_fish
2018/09/14
6240
神经网络python实现
python实现adaboost
Boosting,也称为增强学习或提升法,是一种重要的集成学习技术,能够将预测精度仅比随机猜度略高的弱学习器增强为预测精度高的强学习器,这在直接构造强学习器非常困难的情况下,为学习算法的设计提供了一种有效的新思路和新方法。作为一种元算法框架,Boosting几乎可以应用于所有目前流行的机器学习算法以进一步加强原算法的预测精度,应用十分广泛,产生了极大的影响。而AdaBoost正是其中最成功的代表,被评为数据挖掘十大算法之一。在AdaBoost提出至今的十几年间,机器学习领域的诸多知名学者不断投入到算法相关理论的研究中去,扎实的理论为AdaBoost算法的成功应用打下了坚实的基础。AdaBoost的成功不仅仅在于它是一种有效的学习算法,还在于
西西嘛呦
2020/08/26
7440
python实现adaboost
A.机器学习入门算法(五):基于企鹅数据集的决策树分类预测
本项目链接:https://www.heywhale.com/home/column/64141d6b1c8c8b518ba97dcc
汀丶人工智能
2023/03/26
7530
A.机器学习入门算法(五):基于企鹅数据集的决策树分类预测
Assignment 2 | 斯坦福CS231n-深度学习与计算机视觉课程
该笔记是以斯坦福cs231n课程的python编程任务为主线,展开对该课程主要内容的理解和部分数学推导。这篇文章是第二篇。 CS231n简介 CS231n的全称是CS231n: Convolution
用户1332428
2018/03/08
1.7K0
Assignment 2 | 斯坦福CS231n-深度学习与计算机视觉课程
相关推荐
Softmax算法原理及实现
更多 >
加入讨论
的问答专区 >
1技术专家擅长2个领域
    领券
    问题归档专栏文章快讯文章归档关键词归档开发者手册归档开发者手册 Section 归档
    本文部分代码块支持一键运行,欢迎体验
    本文部分代码块支持一键运行,欢迎体验