Python机器学习与可视化分析实战
上QQ阅读APP看书,第一时间看更新

1.2.3 使用Python实现softmax函数计算

对于Python科学计算来说,最简单的想法就是将数学公式直接表达成程序语言,可以说Python满足了这个想法。本小节将使用Python实现一个深度学习中最常见的函数——softmax函数。至于这个函数的作用,现在不加以说明,这里只是简单尝试一下这个函数代码的编写。

softmax函数的计算公式如下:

其中,Vi是长度为j的数列V中的一个数。带入softmax的结果实际上就是先对每一个Vi计算以e为底、Vi为幂次项的值,然后除以所有项之和进行归一化,之后每个Vi就可以解释成:在观察到的数据集类别中,特定的Vi属于某个类别的概率或者称作似然(Likelihood)。

提示:softmax函数用以解决概率计算中概率结果大而占绝对优势的问题。例如,函数计算结果中有两个值a和b,且a>b,如果简单地以值的大小为单位进行衡量,那么在后续的使用过程中a永远被选用,而b由于数值较小而不被选用;但是,有时候也需要使用数值小的b,那么softmax函数就可以解决这个问题。

softmax函数按照概率选择a和b,由于a的概率值大于b,所以在计算时a经常会被选中,而b由于概率较小,所以选中的可能性也较小,但是也有概率被选中。

softmax函数的代码如下:

【程序1-1】

    import numpy
    def softmax(inMatrix):
       m,n = numpy.shape(inMatrix)
       outMatrix = numpy.mat(numpy.zeros((m,n)))
       soft_sum = 0
       for idx in range(0,n):
           outMatrix[0,idx] = math.exp(inMatrix[0,idx])
           soft_sum += outMatrix[0,idx]
       for idx in range(0,n):
           outMatrix[0,idx] = outMatrix[0,idx] / soft_sum
       return outMatrix

【代码解析】

当传入一个数列后,分别计算每个数值所对应的指数函数值,之后将其相加后计算每个数值在数值和中的概率。例如:

    a = numpy.arry([[1,2,1,2,1,1,3]])

结果如下:

    [[ 0.05943317 0.16155612 0.05943317 0.16155612 0.05943317 0.05943317
        0.43915506]]