推荐一本好书(机器学习实战),别问我问什么,那么好的内容,为什么不一起入坑呢。欢迎fold 代码哦,python 代码:
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 都是新学的语言。暂时更新到这里。后面会继续更新,不好意思了,各位大佬们。