谈起机器学习,真是使人心生向往同时又让人头痛不已。git
心生向往是由于机器学习在不少方面都已经展示出其魅力,在人工智能的领域好比说AlphaGo
,计算机视觉领域的人脸识别
,车牌识别
,靠近生活的有推荐系统
,用户画像
,情感分析
等等,都或多或少用到机器学习的知识。其中大部分应用是至关能知足程序员心中的极客精神的程序员
但使人头不痛不已的当你去涉足机器学习
这个领域的时候,你会发现其中涉及大量的数学知识,这对不少程序员来讲都很不友好。github
但不要紧,程序员应该是工程师,而不是科学家,咱们要作的是学会把理论落实成为生产力。算法
所以本系列将尽量下降数学的描述(避免一长串的数学证实)来描述机器学习算法的基本原理。若是须要对算法进行深刻了解和学习,那么读者仍是应该学习算法背后的数学原理。机器学习
好了,废话很少说,立刻开讲第一个机器学习的算法,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
中会慢慢更新TO DO LIST
里说起的算法,但文章因须要语言总结会稍慢一点。
另外,本文题目是机器学习从入门到放弃之KNN算法而非机器学习从入门到放弃(1):KNN算法这样,由于若是是后者,某日我要弃坑就会触发个人强迫症,而前者并不会,哈哈哈。
若有错误,欢迎指点。