从线性分类器谈起
其中 x x x 为样本, x = [ x 1 , x 2 , ⋯ , x n ] x = [x_1,x_2,\cdots,x_n] x=[x1,x2,⋯,xn] 为n维向量,函数g为我们常说的logistic函数。g的更一般公式为:
g ( z ) = 1 1 + e − z g(z) = \frac{1}{1+e^{-z}} g(z)=1+e−z1
这个公式,对机器学习稍微有点了解的同学可能都特别熟悉,不光在logistic回归中,在SVM中,在ANN中,都能见到他的身影,应用特别广泛。大部分资料在谈到这个式子时候,都是直接给出来。但是不知道大家有没有想过,既然这个式子用途这么广泛,那我们为什么要用它呢?
是不是已经有好多人愣住了。大家都是这么用的。书上都是这么写的啊。是的,但是当一个东西老在你眼前晃来晃去的时候,你是不是应该想想为什么呢?反正对于我来说,如果一个东西在我眼前都出现了第三次了而我还不知其所以然,我一定会去想方设法弄明白为什么。
为什么要用Logistic函数
感知器的思想,就是对所有特征与权重做点积(内积),然后根据与阈值做大小比较,将样本分为两类。稍微了解一点神经网络的同学,对一下这幅图一定不陌生:


这两者的本质都是一致的,即通过划定一个阈值,然后比较样本与阈值的大小来分类。
这个模型简单直观,实现起来也比较容易(要不怎么说是最简单的现行分类器呢)。但是问题在于,这个模型不够光滑。第一,假设 t 0 = 10 t_0=10 t0=10,现在有一个样本进来,最后计算出来的值为10.01,你说这个样本分类应该是为1还是0呢?好像都不太靠谱的样子。第二,这个函数在 t 0 t_0 t0 这点有个阶跃,有从0到1的突变,导致这点不连续,在数学上处理起来也不方便。
发布者:全栈程序员-站长,转载请注明出处:https://javaforall.net/201217.html原文链接:https://javaforall.net
