分类算法还有很多,但由于水平太菜, SVM
和 神经网络
没有办法表述的清,这两种分类算法的数学实现都很高深和精妙,一种算法写个几千页的书都没问题。
支持向量机
支持向量机 Support Vector Machines,多称 SVM,为什么算法的名字都这么奇怪?
先看看下面一张图,驾校考试科目二:曲线行驶
大家都知道考试时车不能压线,所以越往中间开越安全,这个和SVM的概念就很象了。
看下图,普通的分类器在理念上可能是一条线将两种不同的类别分开,而 SVM 则是使用一条可移动的线,线在中间往左移动 b 的距离或向右移动 b 的距离都可以很好的将两组数据分开,而这段可移动的距离称为 margin,支持这根线最高可以移动的点(绿色的部分),叫做 支持向量(Support Vector)
算法原理
和 KNN,贝叶斯这种一看就明白原理的算法相比,SVM 算法原理很复杂,有一大串的数据公式。个人知识浅薄没法解释了。
SVM 算法使用了投射,比如以下一个图,将二维空间的数据投射到三维空间,使得原本线性不可分的数据,变为线性可分。
那么 SVM 的高深之处就在于,SVM的计算是在低维空间中进行的,一般的算法都是维数越低越好(容易计算),而 SVM 将低维空间中的数据投射到高维空间后,使用的仍然是低维空间中的计算,而对应的结果可以在高维空间中进行判断。
神经网络
Neural Networks,神经网络,也是很复杂的算法。只能简单介绍
名字由来
神经网络从名字上来看就够牛了,生物学的东西略说下就是人的反映是由各各神经决定,比如被针扎了一下,就会将(针扎)输入到触觉神经,痛觉神经等神经元,做到一系列的反映,这让我想起了经常报道的很多奇人异士,他们不会感觉到痛,也许就是某些神经缺失吧.
话说回来,一次小小的针扎,在人体里面可能动用的神经元都会有亿万个,如果说用计算机去模拟这个量级很显然不太现实,但可以从中得到启发,借用了生物学上的名词而发名出了这个算法。
如图,和其它算法比机来,神经网络理解起来没那么容易,它没有空间的概念,参考的是生物学的一套系统组成。
生物学上一个神经系统由无数个神经元组成,在机器学习里面,这些神经元称作感知机(perceptrons)
,感知机的功能就和神经元类似,有输入进来,处理后,再根据结果输出到另外一个感知机。
感知机
感知机(神经元)就是神经网络(生物神经系统)里面的一个基础的单元,一个感知机在技术上的实现 是一组权重值$Weight$加一个初始输入($X_0$),有输入,根据权重值将输入作内积,然后输出。
比如这样一个感知机 [$X_0 = -0.5 , Weight = [ 0.3, 0.7 ] $] 接受两个输入参数,并可以输出一个结果,如下:
$X_1$ | $X_2$ | 计算过程 | 输出 |
---|---|---|---|
0 | 0 | -0.5 | 0 |
0 | 1 | -0.5 + 0.7 * 1 = 0.2 | 1 |
1 | 0 | -0.5 + 0.3 * 1 = -0.2 | 0 |
1 | 1 | -0.5 + 0.3 * 1 + 0.7 * 1 = 0.5 | 1 |
可以看出一个感知机是否精确,主要就在于优化权重,通常可以使用梯度下降算法,可以将每个输入项的权重找到比较合理的值。
以自动驾驶为例,汽车前面有个摄相头,摄相头就像人的眼睛一样,看到了前面的画面,并将画面通过图像解析转换成一组数据,做为参数传给自动驾驶程序,感知机即可通过已经训练好的程序进行判断,将结果中控台完成自动驾驶。
深度学习
当然一个感知机的能力是很弱的,通常来说并不实用,通常一般算法都会使用多层感知机,而深度学习则是非常多层的感知机了。
深度学习是以神经网络作为理论基础,目前深度学习算法中,最主流的就是tensorflow了,Google出品的阿尔法狗就是以Tensorflow为框架实现的。
小结
分类算法用的最多的就是这些类别,还有一些集成学习,关联规则等。除了 SVM,其它的应该都还比较好懂。