目录
k邻近(KNN)
基础算法
KNN是通过测量不同特征值之间的距离进行分类。它的的思路是:
如果一个样本在特征空间中的k个最相似(即特征空间中最邻近)的样
本中的大多数属于某一个类别,则该样本也属于这个类别。K通常
是不大于20的整数。KNN算法中,所选择的邻居都是已经正确分
类的对象。该方法在定类决策上只依据最邻近的一个或者几个样本
的类别来决定待分样本所属的类别。
适用于稀有事件的分类问题
实例
如图,绿色圆要被决定赋予哪个类,是红色三角形还是蓝色四方形?如果K=3,由于红色三角形所占比例为2/3,绿色圆将被赋予红色三角形那个类,如果K=5,由于蓝色四方形比例为3/5,因此绿色圆被赋予蓝色四方形类。
优缺点
- 优点:简单,易于理解,易于实现,无需估计参数,无需训练适合对稀有事件进行分类特别适合于多分类问题(multi-modal,对象具有多个类别标签),例如根据基因特征来判断其功能分类,kNN比SVM的表现要好。
- 缺点:懒惰算法,对测试样本分类时的计算量大,内存开销大,评分慢可解释性较差,无法给出累决策树的规则。
代码实现
from sklearn.neighbors import KNeighborsClassifier
#定义随KNN分类器 参数N为邻居数目
knn = KNeighborsClassifier(n_neighbors=10)
#训练过程 X为特征向量,y为标签数据/向量
knn.fit(X, y)
支持向量机(SVM)
基础算法
给定训练样本集 D { ( x 1 , y 1 ) , ( x 2 , y 2 ) , … , ( x m , y m ) } , y ∈ { − 1 , + 1 } D\{(x_1,y_1),(x_2,y_2),\dotsc,(x_m,y_m)\},y\in\{-1,+1\} D{ (x1,y1),(x2,y2),…,(xm,ym)},y∈{ −1,+1},SVM的基本思想就是基于训练集合 D D D在样本空间中找到一个划分超平面,将不同的类别样本分开。理论上会存在无数个超平面存在,如下图所示。
由于训练集中存在局限性或噪声的因素,训练集外的样本(例如测试集)可能比图中的训练样本更接近两个分类的分割界,通过肉眼观察图中较粗的线受到的影响最小,即具有鲁棒性,泛化能力强。
在样本空间中,划分超平面可以按照如下方程进行描述:
w T x + b = 0 w^Tx+b=0 wTx+b=0
其中 w = ( w 1 ; w 2 ; … ; w d ) w=(w_1;w_2;\dotsc;w_d) w=(w1;w2;…;wd)为法向量,决定了超平面的方向; b b b为位移项,决定了超平面与原点之间的距离。因此可以用 ( w , b ) (w,b) (w,b)来描述一个超平面。样本空间中任意点 x x x到超平面 ( w , b ) (w,b) (w,b)的距离可以写为:
r = ∣ w T x + b ∣ ∥ w ∥ r= \frac{\left|w^Tx+b \right|}{\left \| w \right \|} r=∥w∥∣∣wTx+b∣∣
假设超平面 ( w , b ) (w,b) (w,b)可以将训练样本正确分类,即对于 ( x i , y i ) ∈ D (x_i,y_i)\in D (xi,yi)∈D,若 y i = + 1 y_i=+1 yi=+1,则有 w T x + b > 0 w^Tx+b>0 wTx+b>0;若 y i = − 1 y_i=-1 yi=−1,则有 w T x + b < 0 w^Tx+b<0 wTx+b<0,令:
{ w T x + b ⩾ + 1 , y i = + 1 ; w T x + b ⩽ − 1 , y i = − 1. \begin{cases} w^Tx+b\geqslant +1, \quad y_i = + 1;\\ w^Tx+b\leqslant -1, \quad y_i = - 1. \end{cases} {
wTx+b⩾+1,yi=+1;wTx+b⩽−1,yi=−1.
距离超平面最近的几个训练样本且使上式成立,被称为“支持向量”(support vector),两个异类支持向量到超平面的距离之和为:
γ = 2 ∥ w ∥ \gamma = \frac{2}{\left \| w \right \|} γ=∥w∥2
该距离被称为“间隔”(margin),即为SVM主要进行工作的区间,对于该二分类问题,在间隔内的为难以区分的类型(因为异类距离很近),如果该类型都可以很好的区分开来,那么间隔外的样本都可以很好的区分开。可以参考下图进行理解。
因此SVM的核心就是如何找到“最大间隔”的划分超平面,也就是要找到能满足上式中约束的参数 w w w和 b b b,使得 γ \gamma γ最大,即
m a x w , b 2 ∥ w ∥ s . t . y i ( w T x + b ) ⩾ 1 , i = 1 , 2 , … , m \begin{aligned} & \mathop{max}\limits_{w,b}\quad\frac{2}{\left \| w \right \|} \\ & s.t.\quad y_i(w^Tx+b)\geqslant 1,\qquad i=1,2,\dotsc,m \end{aligned} w,bmax∥w∥2s.t.yi(wTx+b)⩾1,i=1,2,…