精华内容
下载资源
问答
  • 分类:类别数目大于2个,类别之间是互斥的。比如是猫,就不能是狗、猪 多标签:类别之间不是...首先,说下多类分类和多标签分类的区别 多标签分类: 一个样本可以属于多个类别(或标签),不同类之间是有关联...

    多分类:类别数目大于2个,类别之间是互斥的。比如是猫,就不能是狗、猪

    多标签:类别之间不是互斥的。它有多个label,比如既有类别,又有位置信息等等

    以下转载自这篇文章:https://blog.csdn.net/u011734144/article/details/80915559

    首先,说下多类分类和多标签分类的区别

    多标签分类: 一个样本可以属于多个类别(或标签),不同类之间是有关联的,比如一个文本被被划分成“人物”和“体育人物”两个标签。很显然这两个标签不是互斥的,而是有关联的
    多类分类:  一个样本属于且只属于多个分类中的一个,一个样本只能属于一个类,不同类之间是互斥的,比如一个文本只能被划分成“人物”,或者被划分成“文化”,而不能同时被划分成“人物”和“文化”,“文化”和“人物”这两个分类就是互斥的

    那么,如何用softmax和sigmoid来做多类分类和多标签分类呢?

    1、如何用softmax做多分类和多标签分类
    现假设,神经网络模型最后的输出是这样一个向量logits=[1,2,3,4], 就是神经网络最终的全连接的输出。这里假设总共有4个分类
    用softmax做多分类的方法:
      tf.argmax(tf.softmax(logits))
      首先用softmax将logits转换成一个概率分布,然后取概率值最大的作为样本的分类
      这样看似乎,tf.argmax(logits)同样可以取得最大的值,也能得到正确的样本分类,这样的话softmax似乎作用不大
      那么softmax的主要作用其实是在计算交叉熵上,首先样本集中y是一个one-hot向量,如果直接将模型输出logits和y来计算交叉熵,
      因为logits=[1,2,3,4],计算出来的交叉熵肯定很大,这种计算方式不对,而应该将logits转换成一个概率分布后再来计算,
      就是用tf.softmax(logits)和y来计算交叉熵,当然我们也可以直接用tensorflow提供的方法sofmax_cross_entropy_with_logits来计算
      这个方法传入的参数可以直接是logits,因为这个根据方法的名字可以看到,方法内部会将参数用softmax进行处理 
      现在我们取的概率分布中最大的作为最终的分类结果,这是多分类
      我们也可以取概率的top几个,作为最终的多个标签,或者设置一个阈值,并取大于概率阈值的。这就用softmax实现了多标签分类 

    2、如何用sigmoid做多标签分类
    sigmoid一般不用来做多类分类,而是用来做二分类的
    它是将一个标量数字转换到[0,1]之间,如果大于一个概率阈值(一般是0.5),则认为属于某个类别,否则不属于某个类别
    那么如何用sigmoid来做多标签分类呢?其实就是针对logits中每个分类计算的结果分别作用一个sigmoid分类器,分别判定样本是否属于某个类别
    同样假设,神经网络模型最后的输出是这样一个向量logits=[1,2,3,4], 就是神经网络最终的全连接的输出。这里假设总共有4个分类
    tf.sigmoid(logits)
    sigmoid应该会将logits中每个数字都变成[0,1]之间的概率值,假设结果为[0.01, 0.05, 0.4, 0.6],然后设置一个概率阈值,比如0.3,如果概率值大于0.3,则判定类别符合,那这里,样本会被判定为类别3和类别4都符合。

    展开全文
  • 机器学习多分类和多标签处理方法

    千次阅读 2017-08-15 17:47:19
    #coding=utf-8 from sklearn import metrics from sklearn import cross_validation from sklearn.svm import SVC from sklearn.multiclass import OneVsRestClassifier from sklearn.preprocessing import ...
    #coding=utf-8
    from sklearn import metrics
    from sklearn import cross_validation
    from sklearn.svm import SVC
    from sklearn.multiclass import OneVsRestClassifier
    from sklearn.preprocessing import MultiLabelBinarizer
    import numpy as np
    from numpy import random
    X=np.arange(15).reshape(5,3)
    y=np.arange(5)
    Y_1 = np.arange(5)
    random.shuffle(Y_1)
    Y_2 = np.arange(5)
    random.shuffle(Y_2)
    Y = np.c_[Y_1,Y_2]
    def multiclassSVM():
      X_train, X_test, y_train, y_test = cross_validation.train_test_split(X, y, test_size=0.2,random_state=0)
      model = OneVsRestClassifier(SVC())
      model.fit(X_train, y_train)
      predicted = model.predict(X_test)
      print predicted
    def multilabelSVM():
      Y_enc = MultiLabelBinarizer().fit_transform(Y)
      X_train, X_test, Y_train, Y_test = cross_validation.train_test_split(X, Y_enc, test_size=0.2, random_state=0)
      model = OneVsRestClassifier(SVC())
      model.fit(X_train, Y_train)
      predicted = model.predict(X_test)
      print predicted
    if __name__ == '__main__':
      multiclassSVM()
      # multilabelSVM()
    
    作者:Cer_ml
    链接:http://www.jianshu.com/p/516f009c0875
    來源:简书
    著作权归作者所有。商业转载请联系作者获得授权,非商业转载请注明出处。
    展开全文
  • 标签多分类多标签多分类算法

    千次阅读 2020-03-27 15:45:07
    标签分类算法,单标签多分类算法,多标签多分类算法及多标签多分类在Scikit-learn中的实现方式。

    1、单标签二分类算法

    单标签二分类这种问题是我们最常见的算法问题,主要是指label标签的取值只有两种,并且算法中只有一个需要预测的label标签。直白来讲就是每个实例的可能类别只有两种(A or B)。此时的分类算法其实是在构建一个分类线将数据划分为两个类别。常见的算法有:Logistic、SVM、KNN等。
    y = f ( x ) ,       y ∈ { − 1 , + 1 } y=f(x),\ \ \ \ \ y\in\{-1, +1\} y=f(x),     y{1,+1}

    Logistic算法

    s i g m o i d = h θ ( x ) = 1 1 + e − θ T x J ( θ ) = − 1 m [ ∑ i = 1 m y ( i ) log ⁡ h θ ( x ( i ) ) + ( 1 − y ( i ) ) log ⁡ ( 1 − h θ ( x ( i ) ) ) ] ,       y ( i ) ∈ { 0 , 1 } \begin{aligned} sigmoid&=h_{\theta}(x) \\ &=\frac{1}{1+e^{-\theta^Tx}} \\ J(\theta)&=-\frac{1}{m}[\sum_{i=1}^my^{(i)}\log h_{\theta}(x^{(i)})+(1-y^{(i)})\log(1-h_{\theta}(x^{(i)}))], \ \ \ \ \ y^{(i)}\in\{0, 1\} \end{aligned} sigmoidJ(θ)=hθ(x)=1+eθTx1=m1[i=1my(i)loghθ(x(i))+(1y(i))log(1hθ(x(i)))],     y(i){0,1}

    2、单标签多分类算法

    单标签多分类问题其实是指待预测的label标签只有一个,但是label标签的取值可能有多种情况。直白来讲就是每个实例的可能类别有K种 ( t 1 , t 2 , … , t k , k ≥ 3 ) (t_1, t_2, \dots, t_k ,k\ge3) (t1,t2,,tk,k3)。常见算法:Softmax、KNN等。
    y = f ( x ) ,        y ∈ { t 1 , t 2 , … , t k } D = { ( x 1 , y 1 ) , ( x 2 , y 2 ) , … , ( x n , y n ) } y i = j ,      i = 1 , 2 , … , n      j = 1 , 2 , … , k \begin{aligned} y&=f(x),\ \ \ \ \ \ y\in\{t_1, t_2, \dots, t_k\} \\ D&=\{(x_1, y_1), (x_2, y_2), \dots, (x_n, y_n)\} \\ y_i&=j, \ \ \ \ i=1, 2, \dots, n \ \ \ \ j=1, 2, \dots, k \end{aligned} yDyi=f(x),      y{t1,t2,,tk}={(x1,y1),(x2,y2),,(xn,yn)}=j,    i=1,2,,n    j=1,2,,k

    Softmax算法

    p ( y = k ∣ x ; θ ) = e θ k T x ∑ l = 1 K e θ l T x ,       k = 1 , 2 , … , K h θ ( x ) = [ p ( y ( i ) = 1 ∣ x ( i ) ; θ ) p ( y ( i ) = 2 ∣ x ( i ) ; θ ) … p ( y ( i ) = k ∣ x ( i ) ; θ ) ] = 1 ∑ j = 1 k e θ j T x ( i ) ⋅ [ e θ 1 T x e θ 2 T x … e θ k T x ] ⟹ θ = [ θ 11 θ 12 ⋯ θ 1 n θ 21 θ 22 ⋯ θ 2 n ⋯ ⋯ ⋯ ⋯ θ k 1 θ k 2 ⋯ θ k n ] J ( θ ) = − 1 m ∑ i = 1 m ∑ j = 1 k I ( y ( i ) = j ) log ⁡ ( e θ j T x ( i ) ∑ l = 1 K e θ l T x ) I ( y ( i ) = j ) = { 1 , y ( i ) = j 0 , y ( i ) ≠ j \begin{aligned} p(y=k|x;\theta)&=\frac{e^{\theta_k^Tx}}{\sum_{l=1}^Ke^{\theta_l^Tx}}, \ \ \ \ \ k=1, 2, \dots, K \\ h_{\theta}(x)&=\begin{bmatrix} p(y^{(i)}=1|x^{(i)};\theta) \\ p(y^{(i)}=2|x^{(i)};\theta) \\ \dots \\ p(y^{(i)}=k|x^{(i)};\theta) \end{bmatrix} \\ &=\frac{1}{\sum_{j=1}^ke^{\theta_j^Tx^{(i)}}}\cdot\begin{bmatrix} e^{\theta_1^Tx} \\ e^{\theta_2^Tx} \\ \dots \\ e^{\theta_k^Tx} \end{bmatrix} \\ \Longrightarrow \theta&=\begin{bmatrix} \theta_{11} & \theta_{12} & \cdots & \theta_{1n} \\ \theta_{21} & \theta_{22} & \cdots & \theta_{2n} \\ \cdots & \cdots & \cdots & \cdots \\ \theta_{k1} & \theta_{k2} & \cdots & \theta_{kn} \end{bmatrix} \\ J(\theta)&=-\frac{1}{m}\sum_{i=1}^m\sum_{j=1}^kI(y^{(i)}=j)\log(\frac{e^{\theta_j^Tx^{(i)}}}{\sum_{l=1}^Ke^{\theta_l^Tx}}) \\ I(y^{(i)}=j)&=\begin{cases} 1, &y^{(i)}=j \\ 0, &y^{(i)}\ne j \end{cases} \end{aligned} p(y=kx;θ)hθ(x)θJ(θ)I(y(i)=j)=l=1KeθlTxeθkTx,     k=1,2,,K=p(y(i)=1x(i);θ)p(y(i)=2x(i);θ)p(y(i)=kx(i);θ)=j=1keθjTx(i)1eθ1Txeθ2TxeθkTx=θ11θ21θk1θ12θ22θk2θ1nθ2nθkn=m1i=1mj=1kI(y(i)=j)log(l=1KeθlTxeθjTx(i))={1,0,y(i)=jy(i)=j
    在实际的工作中,如果是一个多分类的问题,我们可以将这个待求解的问题转换为二分类算法的延伸,即将多分类任务拆分为若干个二分类任务求解,具体的策略如下:
    (1)One-Versus-One(ovo):一对一
    将K个类别中的两两类别数据进行组合,然后使用组合后的数据训练出来一个模型,从而产生K(K-1)/2个分类器,将这些分类器的结果进行融合,并将分类器的预测结果使用多数投票的方式输出最终的预测结果值。

    (2)One-Versus-All / One-Versus-the-Rest(ova/ovr): 一对多
    在一对多模型训练中,不是两两类别的组合,而是将每一个类别作为正例,其它剩余的样例作为反例分别来训练K个模型。然后在预测的时候,如果在这K个模型中,只有一个模型输出为正例,那么最终的预测结果就是属于该分类器的这个类别。如果产生多个正例,那么则可以选择根据分类器的置信度作为指标,来选择置信度最大的分类器作为最终结果,常见置信度:精确度、召回率。

    (3)Error Correcting Output codes(纠错码机制):多对多
    将模型构建应用分为两个阶段:编码阶段和解码阶段。编码阶段中对K个类别中进行M次划分,每次划分将一部分数据分为正类,一部分数据分为反类,每次划分都构建出来一个模型,模型的结果是在空间中对于每个类别都定义了一个点。解码阶段中使用训练出来的模型对测试样例进行预测,将预测样本对应的点和类别之间的点求距离,选择距离最近的类别作为最终的预测类别。

    3、多标签多分类算法

    Multi-Label Machine Learning(MLL算法)是指预测模型中存在多个y值,具体分为两类不同情况:

    • 多个待预测的y值
    • 在分类模型中,一个样例可能存在多个不固定的类别

    根据多标签业务问题的复杂性,可以将问题分为两大类:

    • 待预测值之间存在相互的依赖关系
    • 待预测值之间是不存在依赖关系的

    对于这类问题的解决方案可以分为两大类:

    • 转换策略(Problem Transformation Methods)
    • 算法适应(Algorithm Adaptation)

    (1)Problem Transformation Methods
    该方法又叫做策略转换或者问题转换,是一种将多标签的分类问题转换成为单标签模型构造的问题,然后将模型合并的一种方法,主要有以下几种方式:

    • Binary Relevance(first-order)
    • Classifier Chains(high-order)
    • Calibrated Label Ranking(second-order)
    Binary Relevance

    Binary Relevance的核心思想是将多标签分类问题进行分解,将其转换为q个二元分类问题,其中每个二元分类器对应一个待预测的标签。
    Binary Relevance方式的优点如下:

    • 实现方式简单,容易理解
    • 当y值之间不存在相关的依赖关系的时候,模型的效果不错

    Binary Relevance方式的缺点如下:

    • 如果y之间存在相互的依赖关系,那么最终构建的模型的泛化能力比较弱
    • 需要构建q个二分类器,q为待预测的y值数量,当q比较大的时候,需要构建的模型会比较多
    Classifier Chains

    Classifier Chains的核心思想是将多标签分类问题进行分解,将其转换成为一个二元分类器链的形式,其中后链的二元分类器的构建是在前面分类器预测结果的基础上的。在模型构建的时候,首先将标签顺序进行shuffle打乱排序操作,然后按照从头到尾分别构建每个标签对应的模型。
    Classifier Chains方法的优点如下:

    • 实现方式相对比较简单,容易理解
    • 考虑标签之间的依赖关系,最终模型的泛化能力相对于Binary Relevance方式构建的模型效果要好

    缺点如下:

    • 很难找到一个比较适合的标签依赖关系
    Calibrated Label Ranking

    Calibrated Label Ranking的核心思想是将多标签分类问题进行分解,将其转换为标签的排序问题,最终的标签就是排序后最大的几个标签值。
    Calibrated Label Ranking 方法的优点如下:

    • 考虑了标签两两组合的情况,最终的模型相对来讲泛化能力比较好

    Calibrated Label Ranking 方法的缺点如下:

    • 只考虑两两标签的组合,没有考虑到标签与标签之间的所有依赖关系

    (2)Algorithm Adaptation
    Algorithm Adaptation又叫做算法适应性策略,是一种将现有的单标签的算法直接应用到多标签上的一种方式,主要有以下几种方式:

    • ML-kNN
    • ML-DT
    ML-kNN

    ML-kNN的思想:对于每一个实例来讲,先获取距离它最近的k个实例,然后使用这些实例的标签集合,通过最大后验概率(MAP)来判断这个实例的预测标签集合的值。
    最大后验概率(MAP):其实就是在最大似然估计(MLE)中加入了这个要估计量的先验概率分布。
    θ ^ M L E ( x ) = arg ⁡ max ⁡ θ f ( x ∣ θ ) θ ^ M A P ( x ) = arg ⁡ max ⁡ θ f ( x ∣ θ ) g ( θ ) ∫ θ f ( x ∣ θ ′ ) g ( θ ′ ) d θ ′ = arg ⁡ max ⁡ θ f ( x ∣ θ ) g ( θ ) \begin{aligned} \hat{\theta}_{MLE}(x)&=\arg\max_{\theta}f(x|\theta) \\ \hat{\theta}_{MAP}(x)&=\arg\max_{\theta}\frac{f(x|\theta)g(\theta)}{\int_{\theta}f(x|\theta')g(\theta')d\theta'} \\ &=\arg\max_{\theta}f(x|\theta)g(\theta) \end{aligned} θ^MLE(x)θ^MAP(x)=argθmaxf(xθ)=argθmaxθf(xθ)g(θ)dθf(xθ)g(θ)=argθmaxf(xθ)g(θ)

    ML-DT

    ML-DT是使用决策树处理多标签内容,核心在于给予更细粒度的信息熵增益准则来构建这个决策树模型。
    e n t r y = ∑ j = 1 q [ − p j log ⁡ p j − ( 1 − p j ) log ⁡ ( 1 − p j ) ] p j = ∑ i = 1 n ∣ ∣ y j ∈ Y i ∣ ∣ n \begin{aligned} entry&=\sum_{j=1}^q[-p_j\log p_j-(1-p_j)\log(1-p_j)] \\ p_j&=\frac{\sum_{i=1}^n||y_j\in Y_i||}{n} \end{aligned} entrypj=j=1q[pjlogpj(1pj)log(1pj)]=ni=1nyjYi

    4、多标签多分类在Scikit-learn中的实现方式

    在Scikit-learn中使用OneVsRestClassifier对多标签进行分类操作,内部其实是将多标签问题转换为多类别的区分问题。

    展开全文
  • 详解sigmoid与softmax, 多分类多标签分类

    万次阅读 多人点赞 2018-09-19 21:35:50
    详解sigmoid与softmax, 多分类多标签分类激活函数介绍sigmoid激活函数sigmoid激活函数的性质sigmoid激活函数的使用 激活函数介绍 对于熟悉机器学习或神经网络的读者来说,sigmoid与softmax两个激活函数并不陌生,...

    激活函数介绍

    对于熟悉机器学习或神经网络的读者来说,sigmoid与softmax两个激活函数并不陌生,但这两个激活函数在逻辑回归中应用,也是面试和笔试会问到的一些内容,掌握好这两个激活函数及其衍生的能力是很基础且重要的,下面为大家介绍下这两类激活函数。

    sigmoid激活函数

    从函数定义上来看,sigmoid激活函数的定义域能够取任何范围的实数,而返回的输出值在0到1的范围内。sigmoid函数也被称为S型函数,这是由于其函数曲线类似于S型,在下面的内容中可以看到。此外,该函数曲线也可以用于统计中,使用的是累积分布函数。

    sigmoid激活函数的性质

    根据定义,sigmoid激活函数的计算公式如下:
    在这里插入图片描述
    其中:

    • x: 输入
    • float:表示浮点型数据
    • exp:对其求指数
    • f(x): 函数输出

    从上述函数可以看到,x的取值范围可以是全实数,sigmoid函数返回一个实数值输出,此外,sigmoid函数的一阶导数是非负或非正:

    • 非负: 如果输入数字大于或等于零;
    • 非正: 如果输入数字小于或等于零;

    sigmoid激活函数的使用

    • Sigmoid函数用于逻辑回归模型中的二进制分类。
    • 在创建人造神经元时,Sigmoid函数用作激活函数。
    • 在统计学中,S形函数图像是常见的累积分布函数。

    sigmoid激活函数python实现并画图

    实现代码

    # Required Python Package
    import numpy as np
    
    def sigmoid(inputs):
        """
        Calculate the sigmoid for the give inputs (array)
        :param inputs:
        :return:
        """
        sigmoid_scores = [1 / float(1 + np.exp(- x)) for x in inputs]
        return sigmoid_scores
    
    
    sigmoid_inputs = [2, 3, 5, 6]
    print "Sigmoid Function Output :: {}".format(sigmoid(sigmoid_inputs))
    

    上是Sigmoid函数的实现代码。该函数将以列表形式的值作为输入参数。列表中的每个元素值将被视为Sigmoid函数的输入,并计算输出值。
    接下来,我们将一个列表sigmiod_inputs作为函数的输入,列表值为2,3,5,6,经过sigmoid函数计算后获得Sigmoid分数。
    函数输出:

    Sigmoid Function Output :: [0.8807970779778823, 0.9525741268224334, 0.9933071490757153, 0.9975273768433653]
    

    画图

    现在使用上面的函数来创建图像,以方便了解Sigmoid函数的性质。传递一个包含0到21范围内的数字的列表,计算输入列表的sigmoid分数,然后使用输出值来显示图像。

    # Required Python Packages
    import numpy as np
    import matplotlib.pyplot as plt
    
    
    def sigmoid(inputs):
        """
        Calculate the sigmoid for the give inputs (array)
        :param inputs:
        :return:
        """
        sigmoid_scores = [1 / float(1 + np.exp(- x)) for x in inputs]
        return sigmoid_scores
    
    
    def line_graph(x, y, x_title, y_title):
        """
        Draw line graph with x and y values
        :param x:
        :param y:
        :param x_title:
        :param y_title:
        :return:
        """
        plt.plot(x, y)
        plt.xlabel(x_title)
        plt.ylabel(y_title)
        plt.show()
    
    
    graph_x = range(0, 21)
    graph_y = sigmoid(graph_x)
    
    print "Graph X readings: {}".format(graph_x)
    print "Graph Y readings: {}".format(graph_y)
    
    line_graph(graph_x, graph_y, "Inputs", "Sigmoid Scores")
    

    创建一个包含0到21范围内的数字的graph_x列表,之后在graph_y列表中存储给定graph_x输入的计算sigmoid分数,调用line_graph函数,该函数采用图像的x,y和标题来创建线形图。
    脚本输出:

    Graph X readings: [0, 1, 2, 3, 4, 5, 6, 7, 8, 9, 10, 11, 12, 13, 14, 15, 16, 17, 18, 19, 20]
    
    Graph Y readings: [0.5, 0.7310585786300049, 0.8807970779778823, 0.9525741268224334, 0.9820137900379085, 0.9933071490757153, 0.9975273768433653, 0.9990889488055994, 0.9996646498695336, 0.9998766054240137, 0.9999546021312976, 0.999983298578152, 0.9999938558253978, 0.999997739675702, 0.9999991684719722, 0.999999694097773, 0.9999998874648379, 0.9999999586006244, 0.9999999847700205, 0.9999999943972036, 0.9999999979388463]
    

    在这里插入图片描述

    从上图可以看出,随着输入值的增加,sigmoid得分增加到1。

    softmax激活函数

    Softmax函数计算事件超过’n’个不同事件的概率分布。一般来说,这个函数将会计算每个目标类别在所有可能的目标类中的概率。计算出的概率将有助于确定给定输入的目标类别。
    使用Softmax的主要优点是输出概率的范围,范围为0到1,所有概率的和将等于1。如果将softmax函数用于多分类模型,它会返回每个类别的概率,并且目标类别的概率值会很大。指数公式计算给定输入值的指数和输入中所有值的指数值之和。那么输入值的指数与指数值之和的比值就是softmax函数的输出。

    softmax激活函数的性质

    根据定义,softmax激活函数的计算公式如下:
    在这里插入图片描述
    其中:

    • x: 输入
    • exp:对其求指数
    • f(x): 函数输出
      从上述计算公式可以看出:
    • 计算出的概率将在0到1的范围内。
    • 所有概率的和等于1。

    softmax激活函数的使用

    • 用于多重分类逻辑回归模型。
    • 在构建神经网络中,在不同的层使用softmax函数。

    softmax激活函数python实现并画图

    实现代码

    # Required Python Package
    import numpy as np
    
    
    def softmax(inputs):
        """
        Calculate the softmax for the give inputs (array)
        :param inputs:
        :return:
        """
        return np.exp(inputs) / float(sum(np.exp(inputs)))
    
    
    softmax_inputs = [2, 3, 5, 6]
    print "Softmax Function Output :: {}".format(softmax(softmax_inputs))
    

    脚本输出:

    Softmax Function Output :: [ 0.01275478  0.03467109  0.25618664  0.69638749]
    

    从中可以观察到,输入值为6时,函数输出值的概率最高,这是可以从softmax函数预先知道的。之后在分类任务中,可以使用高概率值来预测给定输入特征的目标类别。

    画图

    现在让我们使用实现的Softmax函数创建图像来了解这个函数的表现。
    创建一个包含0到21范围内的值的列表,之后将通过此列表来计算已实现函数的分数,使用列表和估计分数创建图像。

    # Required Python Packages
    import numpy as np
    import matplotlib.pyplot as plt
    
    
    def softmax(inputs):
        """
        Calculate the softmax for the give inputs (array)
        :param inputs:
        :return:
        """
        return np.exp(inputs) / float(sum(np.exp(inputs)))
    
    
    def line_graph(x, y, x_title, y_title):
        """
        Draw line graph with x and y values
        :param x:
        :param y:
        :param x_title:
        :param y_title:
        :return:
        """
        plt.plot(x, y)
        plt.xlabel(x_title)
        plt.ylabel(y_title)
        plt.show()
    
    
    graph_x = range(0, 21)
    graph_y = softmax(graph_x)
    
    print "Graph X readings: {}".format(graph_x)
    print "Graph Y readings: {}".format(graph_y)
    
    line_graph(graph_x, graph_y, "Inputs", "Softmax Scores")
    

    脚本输出:

    Graph X readings: [0, 1, 2, 3, 4, 5, 6, 7, 8, 9, 10, 11, 12, 13, 14, 15, 16, 17, 18, 19, 20]
    Graph Y readings: [ 1.30289758e-09 3.54164282e-09 9.62718331e-09 2.61693975e-08 7.11357976e-08 1.93367146e-07 5.25626399e-07 1.42880069e-06 3.88388295e-06 1.05574884e-05 2.86982290e-05 7.80098744e-05 2.12052824e-04 5.76419338e-04 1.56687021e-03 4.25919483e-03 1.15776919e-02 3.14714295e-02 8.55482149e-02 2.32544158e-01 6.32120559e-01]
    

    在这里插入图片描述
    该图显示了softmax函数的基本属性,输入值越大,其概率越高。

    多类分类及多标签分类

    多类分类意味着候选集是一个多分类,而不仅仅是二分类,不是是与否的问题,而是属于多类中哪一类的问题。一个样本属于且只属于多个分类中的一个,一个样本只能属于一个类,不同类之间是互斥的。举例而言,MNIST数据集,常用的数字手写体识别数据集,它的标签是一个多分类的过程,要将数字手写体识别为0~9中的某一个数字:
    在这里插入图片描述

    而对于多标签分类而言,一个样本的标签不仅仅局限于一个类别,可以具有多个类别,不同类之间是有关联的。比如一件衣服,其具有的特征类别有长袖、蕾丝等属性等,这两个属性标签不是互斥的,而是有关联的。

    使用softmax和sigmoid激活函数来做多类分类和多标签分类

    在实际应用中,一般将softmax用于多类分类的使用之中,而将sigmoid用于多标签分类之中,对于图像处理而言,网络模型抽取图像特征的结构基本相同,只是根据不同的任务改变全连接层后的输出层。下面介绍如何使用softmax和sigmoid完成对应的分类任务。

    softmax激活函数应用于多类分类

    假设神经网络模型的最后一层的全连接层输出的是一维向量logits=[1,2,3,4,5,6,7,8,9,10],这里假设总共类别数量为10,使用softmax分类器完成多类分类问题,并将损失函数设置为categorical_crossentropy损失函数:
    用tensorflow实现:

    tf.argmax(tf.softmax(logits))
    

    首先用softmax将logits转换成一个概率分布,然后取概率值最大的作为样本的分类 。softmax的主要作用其实是在计算交叉熵上,将logits转换成一个概率分布后再来计算,然后取概率分布中最大的作为最终的分类结果,这就是将softmax激活函数应用于多分类中。

    sigmoid激活函数应用于多标签分类

    sigmoid一般不用来做多类分类,而是用来做二分类,它是将一个标量数字转换到[0,1]之间,如果大于一个概率阈值(一般是0.5),则认为属于某个类别,否则不属于某个类别。这一属性使得其适合应用于多标签分类之中,在多标签分类中,大多使用binary_crossentropy损失函数。它是将一个标量数字转换到[0,1]之间,如果大于一个概率阈值(一般是0.5),则认为属于某个类别。本质上其实就是针对logits中每个分类计算的结果分别作用一个sigmoid分类器,分别判定样本是否属于某个类别同样假设,神经网络模型最后的输出是这样一个向量logits=[1,2,3,4,5,6,7,8,9,10], 就是神经网络最终的全连接的输出。这里假设总共有10个分类。通过:

    tf.sigmoid(logits)
    

    sigmoid应该会将logits中每个数字都变成[0,1]之间的概率值,假设结果为[0.01, 0.05, 0.4, 0.6, 0.3, 0.1, 0.5, 0.4, 0.06, 0.8], 然后设置一个概率阈值,比如0.3,如果概率值大于0.3,则判定类别符合,那么该输入样本则会被判定为类别3、类别4、类别5、类别7及类别8。即一个样本具有多个标签。
    在这里强调一点:将sigmoid激活函数应用于多标签分类时,其损失函数应设置为binary_crossentropy。

    展开全文
  • 针对多分类和多标签问题,虽然深度学习具有较好的表现,但采用传统机器学习方法可以作为对问题深入理解的尝试. sklearn.multiclass 提供了很多机器学习算法,处理 multiclass 和 multilabel分类问题,主要是将问题...
  • 多分类多标签分类算法

    万次阅读 多人点赞 2019-04-08 19:49:55
    一、单标签多分类 1、单标签分类算法原理 1、单标签分类这种问题是我们最常见的算法问题,主要是指label 标签的取值只有两种,并且算法中只有一个需要预测的label标签; 直白来讲就是每个实例的可能类别...
  • 首先,说下多类分类和多标签分类的区别 多标签分类: 一个样本可以属于多个类别(或标签),不同类之间是有关联的,比如一个文本被被划分成“人物”和“体育人物”两个标签。很显然这两个标签不是互斥的,而是有...
  • 多标签分类

    千次阅读 2019-06-29 18:24:55
    如文本分类、图像类别标注、语义场景分类等一些实际应用中,常常会出现一个示例同时属于多个类别(比如:一张电影海报图片可能会同时有科幻、动作、喜剧等多个标签),下图展示了单标签分类和多标签分类之间的区别。...
  • 内含有大量多标签多类别分类算法对应的代码,包括MIML_LPT,MIMLBoost,MIMLSVM,MIMLfast,KISAR,MIMLKNN,MLKNN,DMIMLSVM,MIMLMISVM等等,部分代码含有对应的文献,学习类标分类的好资源。
  • 标签多分类算法 Softmax算法 One-Versus-One(ovo):一对一 One-Versus-All / One-Versus-the-Rest(ova/ovr): 一对 ovoovr的区别 Error Correcting Output codes(纠错码机制): 多标签多...
  • 分类一般分为三种情况:二分类、多分类和多标签分类。多标签分类比较直观的理解是,一个样本可以同时拥有几个类别标签,比如一首歌的标签可以是流行、轻快,一部电影的标签可以是动作、喜剧、搞笑,一本书的标签可以...
  • 类别分类(Multiclass Classification) ...多标签分类又称多标签学习、标记学习,不同于多类别分类,一个样本可以属于个类别(或标签),不同类之间是有关联的。 sklearn.multiclass 提供了很机器学习...
  • 使用pythonsklearn的文本多标签分类实战开发

    千次阅读 多人点赞 2019-03-04 20:41:40
    文本分类一般可以分为二分类多分类多标签分类三种情况,二分类是指将一组文本分成两个类(0或1),比较常见的应用如垃圾邮件分类、电商网站的用户评价数据的正负面分类等,多分类是指将文本分成若干个类中的某一个类,...
  • 多标签分类的评价指标

    万次阅读 2018-01-24 19:03:22
    多标签分类作为多分类的一种推广,每个样本可以有个类别,如下图的标签为:sea,sunset。所以其评价指标与多分类的也有差异,本文将介绍几种评价指标。  1.Hamming loss(汉明损失),表示所有label中错误样本...
  • 标签多分类问题,指一个样本(一个图片或者一个候选框)有一个标签,但总共的类别数是类的。 比如常见的OCR问题,目标检测中针对每个候选框的分类多分类问题。 在深度学习中,softmax是最常用的解决方案。 ...
  • 3. 多标签分类问题 参考文章 1. 基本概念 2分类 分类任务有两个类别,每个样本属于两个类别中的一个,标签0/1.比如:训练一个图像分类器,判断一张输入图片是否是猫。 多分类 分类任务有n个类别,每个样本...
  • CNN图像多标签分类

    千次阅读 2019-10-14 15:00:27
    正像是一个神经网络没法预测出一个它未曾训练过的类,你的神经网络没法预测出它未曾见过的标签组合。这个特性是由于神经网络内部神经元的激活函数。 如果你的神经网络同时经过:(1)黑色裤子(2)红色衬衫的...
  • 深度学习在多标签分类中的应用

    万次阅读 2018-08-12 15:28:31
    分类多标签分类 分类(multi-class classification):有个类别需要分类,但一个样本只属于一个类别 多标签分类(multi-label classificaton):每个样本有标签 区别: 对于分类,最后一...
  • 多类分类和多标签分类

    万次阅读 2009-12-06 09:15:00
    给定一组训练实例(X1,Y1),(X2,Y2),......(Xn,Yn),典型地,每个实例Xi i=1,2,...,n是一个m维向量,Yi是一个有l(l>=1)个类别的向量,分类的...分类(multiclass classification)学习的分类器旨在对一个新的实例指定
  • sklearn 多分类多标签算法

    千次阅读 2018-11-26 10:58:10
    多标签分类格式 One-Vs-The-Rest 类学习 多标签学习 One-Vs-One 类学习 错误校正输出代码  类学习 输出回归 输出分类   原文链接 : ...
  • 文本分类多标签分类

    千次阅读 2020-02-19 11:30:12
    给网络新闻打多标签可以更好地反应文章的真实意义,方便日后的分类和使用。 难点 类标数量不确定,有些样本可能只有一个类标,有些样本的类标可能高达几十甚至上百个。  类标之间相互依赖,例如包含蓝天类标的...
  • 前言虽然不是搞分类的,但是还是看看多标签和多分类的区别。当然是选择原谅他啊…….找正规文档看哇. 分别来自scikit-learn.org和 维基 喂鸡百科国际惯例,贴上来源:Multiclass and multilabel algorithmsMulti-...
  • 多标签分类问题的评价指标

    万次阅读 2018-09-09 09:39:04
    多标签分类的评价指标 多标签学习系统中的性能评估与经典的单标签学习问题中不同,在单标签问题中使用的经典度量标准包括准确率,Precision,Recall F-measure.在多标签学习中,评估会更加复杂,对于一个测试...
  • 多标签分类及其 caffe 实现总结

    千次阅读 2017-11-02 19:13:05
    一直对多标签分类(multi-label)“情有独钟”,因为一直感觉没有完全弄懂它。最近看博客看了,看着看着突然有点感觉,所以就把目前的理解整理一下写下来。 目前我看到的多标签分类任务有下面的两种情况(如有错误...
  • 多标签分类的激活函数损失函数

    千次阅读 2019-07-16 15:39:58
    刚入门DeepLearning不久,前一段时间一直在学习cifar10的分类,突然最近要做一个多标签的任务,突然有点不知所措,不知从何下手了。于是查阅了一些资料,了解一下多分类任务与多标签分类任务的异同。 -多分类任务...
  • 深度学习---多标签分类问题

    万次阅读 多人点赞 2018-05-06 11:18:10
    由于本项目既有涉及multi-class(分类),也有涉及multi-label(标记分类)的部分,multi-class分类网上已经很相关的文章了。这里就说一说multi-label的搭建网络的部分。之后如果有时间的时候,再说一说...
  • 多标签分类(multilabel classification )

    万次阅读 2018-05-17 10:25:48
        这几天看了几篇相关的文章, 写篇文章总结一下,就像个小综述一样, 文章会很乱   &...多标签分类问题很常见, 比如一部电影可以同时被分为动作片犯罪片,...
  • 多标签分类的学习感悟

    千次阅读 2017-11-07 21:17:45
    关于多标签学习的一些自我理解

空空如也

空空如也

1 2 3 4 5 ... 20
收藏数 359,214
精华内容 143,685
关键字:

多分类和多标签