机器学习从入门到放弃之KNN算法

谈起机器学习,真是使人心生向往同时又让人头痛不已。git

心生向往是由于机器学习在不少方面都已经展示出其魅力,在人工智能的领域好比说AlphaGo,计算机视觉领域的人脸识别,车牌识别,靠近生活的有推荐系统,用户画像情感分析等等,都或多或少用到机器学习的知识。其中大部分应用是至关能知足程序员心中的极客精神的程序员

但使人头不痛不已的当你去涉足机器学习这个领域的时候,你会发现其中涉及大量的数学知识,这对不少程序员来讲都很不友好。github

但不要紧,程序员应该是工程师,而不是科学家,咱们要作的是学会把理论落实成为生产力。算法

所以本系列将尽量下降数学的描述(避免一长串的数学证实)来描述机器学习算法的基本原理。若是须要对算法进行深刻了解和学习,那么读者仍是应该学习算法背后的数学原理。机器学习

好了,废话很少说,立刻开讲第一个机器学习的算法,KNN算法。学习

KNN算法

算法背景

假设,你是一个电影公司的影片分类员,你须要从一大堆影片里面分类出武侠片爱情片,用肉眼一部部看确定不科学,如今有一个程序能识别影片中的镜头,聪明的你想到了又么么哒的场面的必定是爱情片,有厮打场面的就是武侠片。人工智能

其中,么么哒厮打两种场面则称为特征spa

你把这两种特征放入程序里面一分类,咦,怎么错这么多?!设计

而后,你决定打开其中一两个错误的结果看看……code

咦,刚刚还刀剑相向的女主角怎么怎么和男主角吻了起来,卧槽,那但是你的杀父仇人啊喂,哦,原来男主角是被奸人所逼……

咦,这爱情片男女主角怎么吻着吻着就厮打起来,卧槽,还要脱衣服,天啊,我仍是个孩子……

你终于明白,错误的缘由是由于没法将么么哒厮打做为单一特征,这时,你明白须要重设设计分类的标准了。

算法设计

牛逼的你发现,虽然没法将么么哒厮打做为惟一标准,可是是能够做为参考的。好比说,在武侠片中虽然也会出现么么哒的镜头,但显然厮打镜头仍会占主流。

因而你对以往已经分好类别的电影作出统计,并的作出如下表格。

其中这部分样本又叫作训练集

X=么么哒镜头的数量
Y=厮打镜头的数量
0表明爱情片,1表明武侠片

电影ID X Y 类型
1 10 2 0
2 8 3 0
3 2 6 1
…… …… …… ……

把它画出二维图大概是这样:

图片描述

黄点表明1类电影的分布,绿色表明0类电影的分布,紫色表明须要分类的电影样本。

那么该怎么判别紫色的那颗点所在的类别呢?

没错,KNN就是最简单粗暴的方法,首先判别紫色点离黄色群体和离绿色群体距离,而后将紫色判断为距离最近的那个群体。

这里具体指出利用KNN的具体步骤:

  • 计算上述图中全部点到达待测点的欧式距离(勾股定理计算)。

  • 选出离待测点最近的K个点,k由用户指定。

  • 计算在这k个点中,各个类型的个数

  • 将个数最多的类型做为预测点的类型。

代码实现

KNN代码实现,收录个人github上,点击一下链接并进入classify目录下就可访问

github

后话

在个人github中会慢慢更新TO DO LIST里说起的算法,但文章因须要语言总结会稍慢一点。

另外,本文题目是机器学习从入门到放弃之KNN算法而非机器学习从入门到放弃(1):KNN算法这样,由于若是是后者,某日我要弃坑就会触发个人强迫症,而前者并不会,哈哈哈。

若有错误,欢迎指点。

相关文章
相关标签/搜索