机器学习系列一之 kNN(k近邻算法理解和实现)

   日期:2024-12-26    作者:b1251012 移动:http://oml01z.riyuangf.com/mobile/quote/33209.html

推荐一本好书(机器学习实战,别问我问什么,那么好的内容,为什么不一起入坑呢。欢迎fold 代码哦,python 代码

机器学习系列一之 kNN(k近邻算法理解和实现)

https://github.com/unnunique/MachineLearning/tree/master/Ch02

https://github.com/unnunique/unnunique.github.io/tree/master/ScalaDemo/src/main/scala/com/sydney/dream/classdefine

需要书籍: 请留言,留下邮箱

转载请注明出处哦

大体上机器学习分为分类和回归,有监督学习和无监督学习。kNN 属于监督学习和分类算法模块。

在一大堆数据集合中,每一数据都存在自己的标签,即,每一数据都属于一个分类。当我们输入没有分类的新数据的时候,将新数据和数据集合中的每一数据进行比较,然后计算新数据离哪些数据最相近(把原始数据分布在坐标轴上,计算新数据和原始数据的距离)。距离计算好后,我们选取k个最相近的数据,这个就是kNN 中k 的来源。一般上k不大于20,。k个数据中出现最多的分类,即为kNN 算出来的新数据的分类。

我们以kiss 次数和打斗次数来区分是动作电影还是动作电影。

来接一波图和数据。

假如我们有一个位置的电影,问号脸?我们如何来区分他是爱情电影还是动作电影。

我们来计算他距离其他电影的距离。

例如(18-98)**2 +(90-2)**2, 然后开方。

比如算的的距离最近的三个是Robo Slaye 3000, Kavin Longblode, Califonia Ma, 则起是动作片。(没有计算过哈哈。

接下来我们用scala 以及python 来各自实现一波

写代码嘛,先来一段注释,然后请佛祖开光,这个还是很皮很开心的

 

然后秀一波实验,感觉python 写起来完全像是在写脚本,然后,一个最简单的例子,就这么华丽丽的实现了。

 
 

直接上代码实现吧,具体流程和上面python 大致一样,写Scala 好烧脑,哎。

 
 

先来简单过一下需求背景。

某都市杭州大龄单身妹纸小百合在某百合相亲网站上进行相亲,寻求高富帅。小百合发现自己相过的对象可以分为三类

1,十分喜欢的人

2,一般般喜欢的人

3,不喜欢的屌丝

这三类人,可以用下面的特征数据进行衡量

1,每年飞灰机的里程数。

2,玩游戏的次数。

3,每周吃掉的冰淇淋的公升数。

这些数据保存在txt 文件中类似如下(数据可以在附件中获取哦,亲

32404 3.513921    0.9918541
27268 4.398172    0.9750242
5477 4.276823     1.174874 3

从左到右分别表示

飞行的里程数, 玩游戏次数 冰淇淋公升数  喜欢程度(1,非常喜欢, 2, 一般般, 3,不喜欢

,让我们借鉴电影的例子,来实现相关的程序。

首先啦,需要从文件中读取数据。

然后把读取到的数据转化为矩阵。

函数如下(包含kNN 近邻算法的实现

 

接下来考虑一个问题,如下是4组数据

我们来计算第三组和第四组的距离

(0-67)**2 + (20000-32000)**2 + (0.1-1.1)**2,然后开方。

Oh my good(夸张脸, 有没有发现什么。 每年飞行常客里程数对最终结果的影响远远大于其他两个特征。所以计算出来的结果,可能只与每年 飞行常客的里程数有关。

为了解决这个问题: 

我们使用一些技巧,把这些数据都转换为0到1之间的数据。

专业上叫做归一化数据

我们利用如下的公式,把数据转换到0到1之间

newValue = (oldValue - min)/(max - min)

在上一步,我们已经把数据从文件中读取,并且赋给了矩阵datingDataMat。接下来,我们就用上面这个公式,把这个矩阵中的数据进行归一化(皈依佛门

 

好了,到现在为止,我们改准备的都准备了,数据已有,数据已经皈依佛门,算法已有,接下来我们进行测试

测试代码如下

 

测试结果

the classifier came back with: 3, the real answer is : 3
the classifier came back with: 2, the real answer is : 3
the classifier came back with: 1, the real answer is : 1
the classifier came back with: 2, the real answer is : 2
the classifier came back with: 1, the real answer is : 1
the classifier came back with: 3, the real answer is : 3
the classifier came back with: 3, the real answer is : 3
the classifier came back with: 2, the real answer is : 2
the classifier came back with: 1, the real answer is : 1
the classifier came back with: 3, the real answer is : 1

the total error rate is: 0.050000

错误率为百分之五,效果还行。

最后,来一段python 代码模拟约会网站优化

交互式模拟相亲网站过滤过程

 
 

我比较倾向于直接进行上代码,所以nobb 了。

写得有些累,scala 和python 都是新学的语言。暂时更新到这里。后面会继续更新,不好意思了,各位大佬们。 

























特别提示:本信息由相关用户自行提供,真实性未证实,仅供参考。请谨慎采用,风险自负。


举报收藏 0评论 0
0相关评论
相关最新动态
推荐最新动态
点击排行
{
网站首页  |  关于我们  |  联系方式  |  使用协议  |  隐私政策  |  版权隐私  |  网站地图  |  排名推广  |  广告服务  |  积分换礼  |  网站留言  |  RSS订阅  |  违规举报  |  鄂ICP备2020018471号