[机器学习] 用 MySQL 来演示 KNN算法


机器学习这几年越来越火, 特别是相关算法五花八门, 但最有名的就那么几种, 而在这几种中, 要数KNN算法最为简单, 高效并且有鲁棒性 (Robustness).

我们先来看一问题: 已知正方形和三角形的归类, 请问绿色的圆是属于三角还是属于正方形?

KNN [机器学习] 用 MySQL 来演示 KNN算法 I.T. 学习笔记 数据结构与算法 程序设计

K Nearest Neighbor Algorithm

这里的KNN 指的是 K-nearest neighbour 翻译过来就是 K个最近的邻居, 如果我们指定K=3, 那么和绿色圆最近的是2个三角形和1个正方形, 所以按多数为主的标准, 我们预测这个圆属于三角, 相反, 如果K=5的情况, 和圆最近的有3个正方形和2个三角形, 这时候我们就按多数投正方形.

用 MySQL 来演示 KNN算法

我们先创建一个表含有两个字段x和y,

1
2
3
4
5
6
7
8
9
10
11
mysql> select * from test1;
+------+------+
| x    | y    |
+------+------+
|    1 |   23 |
|  1.2 |   17 |
|  3.2 |   12 |
|    4 |   27 |
|  5.1 |    8 |
+------+------+
5 rows in set (0.04 sec)
mysql> select * from test1;
+------+------+
| x    | y    |
+------+------+
|    1 |   23 |
|  1.2 |   17 |
|  3.2 |   12 |
|    4 |   27 |
|  5.1 |    8 |
+------+------+
5 rows in set (0.04 sec)

假设已知一个新点x=6.5, 我们想通过KNN (K=2)来预测y的值, 那么我们可以通过以下SQL语句来查找和6.5最近的两个点:

1
2
3
4
5
6
7
8
mysql> select x,y from test1 order by abs(6.5-x) limit 2;
+------+------+
| x    | y    |
+------+------+
|  5.1 |    8 |
|    4 |   27 |
+------+------+
2 rows in set (0.00 sec)
mysql> select x,y from test1 order by abs(6.5-x) limit 2;
+------+------+
| x    | y    |
+------+------+
|  5.1 |    8 |
|    4 |   27 |
+------+------+
2 rows in set (0.00 sec)

然后需要做的就是平均这两个点的y值, 用一个嵌套SQL语句就可以了:

1
2
3
4
5
6
7
mysql> select avg(y) as predicted from (select y from test1 order by abs(6.5-x) limit 2) as KNN;
+-----------+
| predicted |
+-----------+
|      17.5 |
+-----------+
1 row in set (0.00 sec)
mysql> select avg(y) as predicted from (select y from test1 order by abs(6.5-x) limit 2) as KNN;
+-----------+
| predicted |
+-----------+
|      17.5 |
+-----------+
1 row in set (0.00 sec)

KNN算法简单 但是有一个很大的问题是这个算法是属于 lazy 算法, 意思是拿到数据 (training set) 后并不是马上训练(甚至是并没有训练这个过程)而是等需要预测的时候实时去找最近的K个邻居, 所以当数据量大的时候 效率就比较低了.

英文: The K Nearest Neighbor Algorithm (Prediction) Demonstration by MySQL

GD Star Rating
loading...
本文一共 369 个汉字, 你数一下对不对.
[机器学习] 用 MySQL 来演示 KNN算法. (AMP 移动加速版本)
上一篇: The Fox 英式午餐
下一篇: SteemIt 就可以把图片也存在区块链上了

扫描二维码,分享本文到微信朋友圈
bf840458aa51276e776474857a889f3d [机器学习] 用 MySQL 来演示 KNN算法 I.T. 学习笔记 数据结构与算法 程序设计

5 条评论

评论