最近比较空闲,打算利用这一段时间理一下机器学习的一些常见的算法。第一个是KNN算法:
- KNN
- 1、原理:
KNN,K-NearestNeighbor---K最近邻
K最近邻,就是K个最近的邻居的意思,说的就是每个样本都可以用它最接近的K个邻居来代表。核心思想是如果一个样本在特征空间中的K个最相邻的样本中的大多数属于某一个类别,则该样本也属于这个类别,并具有这个类别上样本的特性。
KNN算法的结果很大程度上取决于K的选择。
|
如左图所示,有两类不同的样本数据,分别用蓝方块和红三角表示,中间的绿色圆点是待分类的数据。 1、如果K=3,绿色圆点的最近的3个邻居是2个红色小三角形和1个蓝色小正方形,少数从属于多数,基于统计的方法,判定绿色的这个待分类点属于红色的三角形一类。 2、如果K=5,绿色圆点的最近的5个邻居是2个红色三角形和3个蓝色的正方形,还是少数从属于多数,基于统计的方法,判定绿色的这个待分类点属于蓝色的正方形一类。 |
- 2、重要术语:
- 1.算法三要素:
K值得选择、距离度量的方式、分类决策规则
1)K的选择:
没有固定的经验,一般根据样本的分布,选择一个比较小的值,可以通过交叉验证法(简单来说,就是一部分样本做训练集,一部分做测试集)选择一个合适的K值;
选择较小的K值,就相当用较小的邻域中的训练实例进行预测,训练误差会减小,容易发生过拟合;
选择较大的K值,就相当于较大邻域中的训练实例进行预测,其优点是可以减少繁华误差,但缺点是训练误差会增大。
- 2.距离度量:
K近邻算法的核心在于找到实例点的邻居,如何找到邻居,邻居的判定标准是什么?用什么度量?
距离一般使用欧式距离或曼哈顿距离
欧式距离:
是最常见的两点之间或多点之间的距离表示法,如点 x = (x1,...,xn) 和 y = (y1,...,yn) 之间的距离为:
曼哈顿距离:
又称为城市街区距离(City Block distance),通俗来讲,想象你在曼哈顿要从一个十字路口开车到另一个十字路口,驾车距离是两点间的直线距离吗?显然不是,除非你能穿越楼。实际驾驶距离就是这个‘曼哈顿距离’,此及曼哈顿距离的来源。
- 二维平面两点a(x1,y1)与b(x2,y2)间的曼哈顿距离 :
- 两个n维向量a(x11,x12,…,x1n)与 b(x21,x22,…,x2n)间的曼哈顿距离:
补充:切比雪夫距离:
玩过国际象棋的朋友或许知道,国王走一步能够移动到相邻的8个方