频道栏目
首页 > 资讯 > SQL Server > 正文

SQL实现kNN算法讲解

18-06-14        来源:[db:作者]  
收藏   我要投稿

言归正传,今天的主题是 kNN ( top k nearest ) 最近邻算法。参考的书目是两本《机器学习实战》(Peter 著)与《机器学习》(周志华著). 这两本书各有其优点,《实战》这本书对于 Python 代码实现算法讲的比较多,让你很容易就写出一个模型来完成一次实战,跟玩王者一样的,反馈很及时,而周志华教授的这本《机器学习》则是讲的比较细致了,用的是挑西瓜的例子,很有趣味。当然 Peter 这本书用的还是 Python 2.0 , 我费了很大的劲儿,才转成 Python 3.0 的语法,以下的例子会有注解, 而周教授的这本书,则是没有数学底子根本看不懂在讲啥,碰到 kNN , 会跟你详细解释权重,概率,线性矩阵,有多少种求解最短距离的算法等,很开眼界,让我瞬间觉得我活着都是在浪费社会资源。

用一幅图来讲解 kNN, 可以让你瞬间秒懂:

这里写图片描述

图中的五角星,就是我们待分类的数据。与他最近的 k 个圆点所代表的类别,比重最大的就是预测数据的类别。求解方式很简单,在 2 个属性下,就是求解直三角形斜边的长度,勾股定理一算就出来了。如果在多个属性下,也就是将各自之差的平方相加,再求根,就得到最短距离

Peter 书中采用了婚恋网的匹配推荐项目来演示 kNN。采用的特征分别是:

1 每年的飞行里程

2 每天玩视频游戏所占的时间份额

3 每周吃掉的冰激凌分量

根据这三个特征,收集了近1000个打分结果,来判断约会双方对彼此的影响,是不喜欢,喜欢还是极度渴望约会。

求解 kNN 的核心代码的代码,经过 Python 3.0 修改 之后,如下:

这里写图片描述

模型做出来了,我们就用划分为测试用例的数据做预测,观察其正确率:

这里写图片描述

最后得到的误差是4%,模型可以用来预测分类。只要拿到一个对象的这三个特征,就能得到他/她是否能得到大家的喜欢,而这个结果有 96% 的准确性。

为了更好的了解这个功能,用 MatPlotLib 做了一个图,图中面积最大的那些点,就是最受喜欢的那群人,他们的特征在某些方面具有奇高的重叠

这里写图片描述

气泡图在 Python 的 MatPlotLib 下实现也非常容易:

这里写图片描述

那么如何用 SQL 实现呢,kNN 的算法是所有算法中最简单的一个,只要对原理掌握了,不过是把 Python 换成了 SQL。当然这两者在如今的数据量环境下,都不是好的实现语言,必须与 Spark , Hadoop 等分布式存储于计算环境结合起来,方能全量无死角的洞悉信息。

以下是两张数据表,第一张 datingSampleDataSet 就是收集好的数据其中的900条,第二张 datingTestingDataSet 是从收集好的数据中取出来的 100 条,因这份数据已经有喜好的分类了,因此可以作为误差的计算.

select *

from dbo.datingSampleDataSet

select *

from dbo.datingTestingDataSet

这里写图片描述

在 SQL 的实现过程中,我们用一个函数来求解预测值的分类,再来判断函数的误差。最后得到的误差和 Python 实现的一样,都是 4%。

这里写图片描述

这里写图片描述

相关TAG标签
上一篇:linux 系统vim使用技巧大全
下一篇:MySQL数据库的使用优势、数据库类型、常用的属性约束和常用存储引擎介绍
相关文章
图文推荐

关于我们 | 联系我们 | 广告服务 | 投资合作 | 版权申明 | 在线帮助 | 网站地图 | 作品发布 | Vip技术培训 | 举报中心

版权所有: 红黑联盟--致力于做实用的IT技术学习网站