Python:离散型与连续性预测与 softmax 以及 One-Hot 编码 (五十八)
离散型与连续型预测
在前几个视频中,我们了解到,对于优化而言,连续型误差函数比离散型函数更好。为此,我们需要从离散型预测变成连续型预测。下两将指导我们完成这一操作。
预测的结果就是通过算法计算后得到的结果,离散模型答案就是“是”或“否”的形式,而连续模型答案将是一个数字,通常在 0 到 1 的范围之间,我们称之为概率。
例如学生录取率的示例,蓝色的点表示录取,红色的表示拒绝:
sigmoid 函数
可以看出,概率是关于点离直线距离的函数:
从离散到连续预测的方法是,将激活函数从左侧的阶越函数(step function) 变成右侧的 sigmoid 函数,对sigmoid 函数输入较大的正数,将给出非常接近 1 的值,输入较大的负数则给出非常接近 0 的值,对于接近 0 的数字,将给出接近 0.5 的值
这些数字表示该点属于蓝色的概率:
之前我们说学生是否被录取,现在我们说学生被录取的概率是多少。
多类别分类和 Softmax函数
我们将学习激活函数的对等形式,它和 s 型函数是对等的,但是问题具有 3 个或更多个类别。
1.softmax初探
在机器学习尤其是深度学习中,softmax是个非常常用而且比较重要的函数,尤其在多分类的场景中使用广泛。他把一些输入映射为0-1之间的实数,并且归一化保证和为1,因此多分类的概率之和也刚好为1。
首先我们简单来看看softmax是什么意思。顾名思义,softmax由两个单词组成,其中一个是max。对于max我们都很熟悉,比如有两个变量a,b。如果a>b,则max为a,反之为b。用伪码简单描述一下就是 if a > b return a; else b
。
另外一个单词为soft。max存在的一个问题是什么呢?如果将max看成一个分类问题,就是非黑即白,最后的输出是一个确定的变量。更多的时候,我们希望输出的是取到某个分类的概率,或者说,我们希望分值大的那一项被经常取到,而分值较小的那一项也有一定的概率偶尔被取到,所以我们就应用到了soft的概念,即最后的输出是每个分类被取到的概率。
2.softmax的定义
首先给一个图,这个图比较清晰地告诉大家softmax是怎么计算的。
假设有一个数组V,Vi表示V中的第i个元素,那么这个元素的softmax值为:
该元素的softmax值,就是该元素的指数与所有元素指数和的比值。
练习:编写 Softmax
现在该你来操作了!我们用 Python 编写 Softmax
公式吧。
Softmax 公式:
import numpy as np
# Write a function that takes as input a list of numbers, and returns
# the list of values given by the softmax function.
def softmax(L):
expL = np.exp(L)
print(expL)
sumExpl = sum(expL)
print("sum:")
print(sumExpl)
print("=====sum:=====")
result = []
for i in expL:
print(i)
result.append(i*1.0 / sumExpl)
return result
结果打印:
<type 'numpy.ndarray'>
[ 148.4131591 403.42879349 1096.63315843]
sum:
1648.47511102
=====sum:=====
148.413159103
403.428793493
1096.63315843
Trying for L=[5,6,7].
The correct answer is
[0.09003057317038046, 0.24472847105479764, 0.6652409557748219]
And your code returned
[0.09003057317038046, 0.24472847105479764, 0.6652409557748219]
Correct!
One-Hot编码
One-hot Encoding
如果判断你是否收到礼物,可以记为 1 或 0,如果有多个类别,比如 鸭子,熊猫,大象,我们判断是哪一个,
以前的做法是记做 1,2,3,但是这样不可行,这样就假设各个类别之间的依赖性,实际上不能存在,我们采取的操作是,对每个类别设定一个变量,表格变成下面这样:
为者常成,行者常至
自由转载-非商用-非衍生-保持署名(创意共享3.0许可证)