最邻近
背景
给定一组含有标签的记录.
outlook | temp. | humidity | windy | play |
---|---|---|---|---|
sunny | hot | high | false | no |
sunny | hot | high | true | no |
overcast | hot | high | false | yes |
rainy | mild | high | false | yes |
rainy | cool | normal | false | yes |
rainy | cool | normal | true | no |
overcast | cool | normal | true | yes |
sunny | mild | high | false | no |
sunny | cool | normal | false | yes |
rainy | mild | normal | false | yes |
sunny | mild | normal | true | yes |
overcast | mild | high | true | yes |
overcast | hot | normal | false | yes |
rainy | mild | high | true | no |
- 14条记录
- 4列属性: outlook, temp, humidity, windy
- 1列标签: play
任务就是开发一个模型, 这个模型能够基于给出的新的属性值来判断play的类型. 用于开发模型的记录集被称为训练集. 为了能够衡量模型的性能, 需要一组测试数据, 这组测试数据是不参与开发模型的, 它也是带有标签的.
1-最邻近算法
记住所有的训练样本. 通过距离测量得到离新样本(不含有标签)距离最近的样本, 这个样本的标签将会是新样本的预测标签.
这个算法的边界可以参考Voronoi图(在计算机图形学中是一大章内容).
例子
Example | a1 | a2 | a3 | Class |
---|---|---|---|---|
ex1 | 1 | 3 | 1 | yes |
ex2 | 3 | 4 | 5 | yes |
ex3 | 3 | 2 | 2 | no |
ex4 | 5 | 2 | 2 | no |
给出一组属性(a1=2, a2=4, a3=2), 预测它的Class.
- D(new, ex1) = sqrt((2-1)^2 + (4-3)^2 + (2-1)^2) = sqrt(3) yes
- D(new, ex2) = sqrt((2-3)^2 + (4-4)^2 + (2-5)^2) = sqrt(10) yes
- D(new, ex3) = sqrt((2-3)^2 + (4-2)^2 + (2-2)^2) = sqrt(5) no
- D(new, ex4) = sqrt((2-5)^2 + (4-2)^2 + (2-2)^2) = sqrt(13) no
可以看出在1-邻近下, 和它最近的样本是ex2, 所以它的Class是Yes.
复杂度
没有建立模型, 只是存储了训练样本. 将每个未见过的样本和训练样本进行比较, 假设有m个已知训练样本, 每个训练样本为n维, 则查找每一个未见过的训练样本的时间复杂度是O(mn).
对于大量的数据来说, 这个算法的效率不行. 但是也可以借助一些数据结构像是KD树或者是Ball树提高算法的效率.
k-最邻近算法
使用1个最近的训练样本来预测未知样本的标签的算法称为1-邻近算法, 使用k个最近的训练样本预测未知样本的标签的算法称为k-最邻近算法, 即KNN.
k-最邻近算法对于k的值非常敏感, 经验法则为\(k\leq \sqrt{训练集}\), 商业的包一般使用的k是10. 参考更多的邻近样本能够增强抗干扰能力. K最邻近算法不仅用于分类, 还能用于回归. k-最邻近算法的结果基于k个最邻近样本的标签的均值.
例子
Example | a1 | a2 | a3 | Class |
---|---|---|---|---|
ex1 | 1 | 3 | 1 | yes |
ex2 | 3 | 4 | 5 | yes |
ex3 | 3 | 2 | 2 | no |
ex4 | 5 | 2 | 2 | no |
给出一组属性(a1=2, a2=4, a3=2), 预测它的Class.
- D(new, ex1) = sqrt((2-1)^2 + (4-3)^2 + (2-1)^2) = sqrt(3) yes
- D(new, ex2) = sqrt((2-3)^2 + (4-4)^2 + (2-5)^2) = sqrt(10) yes
- D(new, ex3) = sqrt((2-3)^2 + (4-2)^2 + (2-2)^2) = sqrt(5) no
- D(new, ex4) = sqrt((2-5)^2 + (4-2)^2 + (2-2)^2) = sqrt(13) no
可以看出在3-邻近下, 和它最近的样本是ex1, ex2, ex3, 由于yes的数量多于no的数量, 所以它的Class是Yes.
加权最邻近算法
这个算法的思想是离未知样本更近的训练样本的权值应该更大.