数据分析师进阶算法之KNN详细讲解

写这篇文章,希望对数据分析师进阶或是入门机器学习人有很好的帮助。

今年即将毕业,目前在某公司上班职位数据分析师,专业不是计算机,不是统计学,不是金融,而是前途无望的硬件电路,考虑到以后的发展,毅然转入“DT”行业。没有报过任何培训机构,一路走来是自学,到目前来说算是入门了。数据分析师的门槛很高吗?答案是一点不高,因为你不是去研究深度学习搞人工智能,而是数据分析。我一没有任何专业背景的人都找到了数据分析师的工作,我的专业是物理高频低频焊接线路。高中时对物理是比较喜欢的所以大学报了和物理相关的专业,后来才知道物理是一个巨大的坑啊,高中物理都是小儿科,真正的物理世界不是我的脑袋所能想象的。骗自己说先试试看吧。大学大学大学是天堂啊,游戏的乐园,面对各种诱惑踏上了颓废的康庄大道。后来对钱很喜欢,定了个目标先挣个1个亿?开玩笑,当时我还没‘亿’这个概念,大二过年提个车开回家?这个我能想到。哎,过程很复杂,结果很简单,人是有梦想的但我却不是一个天才。最后又回到颓废的路上。直到某年暑假,还有一年就毕业了我能干什么呢,遥想2015在浏览新闻时看到了一偏文章说未来是DT的时代,我又搜索了相关DT的文章,是马云这货说的。当时对马云也是很崇拜的,就仔细了解了一下DT,还创建了一个相关的QQ群,在各大论坛发出消息,让志同的人加群。又找了各种资料。。。自食恶果最后因为自己的懒散和对游戏的执迷不悟,又让自己融入到了真正的大学生活中潇洒。DT抛到了脑后。暑假同学都去做暑假工我不想去就找了份兼职又想到了DT时代,嘿嘿就开始了。暑假兼职带学习两个月,开学后上课3个多月后学校安排实习我选择了自己找数据分析师岗位。“数据分析师”百度一搜满大街上都是培训机构,MD我再去培训那我大学的学费想想就心疼,每年1万多大洋呢。后来验证不去培训是对的,有的培训很水的,懂行的都知道,我就不点名了。

什么?数据分析师不懂算法?那你是毛的数据分析师啊,公司对你的印象瞬间没有了.。不怕,我这系列文章就是来想帮帮大家的,对于不懂算法的数据分析师或想入门机器学习的小伙伴们,我这文章很适合你们的。“KNN”,“决策树”,“贝叶斯”,“线性回归”,“逻辑回归”,“多项式回归”,“SVM”,“k_means”等等基本的算法和常用的数据分析基本方法。

(字都是一个个敲出来的,我没有检查错别字或是病句,欢迎阅读时发现了告诉我,写的不好不详细的地方也可以告诉我)

这篇文章主要讲的是数据分析师的进阶能力,分类算法knn。那么什么是分类算法呢?看这个例子

《数据分析师进阶算法之KNN详细讲解》 第一行打斗3次接吻104次的类型是Romance(浪漫爱情片) ;最后一行打斗98次接吻2次是Action(武打战斗片)

如果我们想通过打斗次数和接吻次数来划分电影的类型试试我们的knn分类算法

《数据分析师进阶算法之KNN详细讲解》 这是我们实现knn分类的编程,看不懂没关系,稍后会仔细的说的。

如果打斗次数是10次,接吻次数是106次,它是什么类型的电影呢?把10和106写进去

《数据分析师进阶算法之KNN详细讲解》 出来结果是Romance类型的电影。

如果打斗次数是95次,接吻次数是12次,它是什么类型的电影呢?把95和12写进去

《数据分析师进阶算法之KNN详细讲解》 出来结果是Action类型的电影。

这就是分类,按类型给分出来。

(“TM我看不懂代码,老子不会啊,怎么办?”)

(不会就学呗,那能怎么办)

(“我需要报python培训吗?”)

(你傻啊报培训,自学的就够你用的了,这可不是搞开发,不需要你精通python,掌握基础知识就行了,再看几个库就能驾驶无人汽车了)

                                                                  —我用的是jupyter notebook—

知道了什么是分类那我们看看什么是knn分类算法。

knn核心思想是距离,通过计算每个训练样例到待分类样品的距离,取和待分类样品距离最近的 K 个训练样例,K 个样品中哪个类别的训练样例占多数,则待分类样品就属于哪个类别。我们通过实例来理解一下这句话。

《数据分析师进阶算法之KNN详细讲解》 导入我们的numpy和matplotlib库
《数据分析师进阶算法之KNN详细讲解》 我们创建一些数据点,前五个类型是0,后五个类型是1
《数据分析师进阶算法之KNN详细讲解》 把我们创建的数据点画出来类型是0的用绿色显示,类型是1 的用红色显示。看出大约是左右两类。
《数据分析师进阶算法之KNN详细讲解》 我们再创建一个新的数据点x

《数据分析师进阶算法之KNN详细讲解》 那么这个x是属于哪一类呢,我们把它也画出来看一下

蓝色的点就是我们新创建的x点,直观判断蓝色的x在红色的一堆中,那它应该属于红色的点即类型是1。那我们怎么使用knn算法得出蓝色的点的类型呢?先看knn思想的第一句话“通过计算每个训练样例到待分类样品的距离”。如绿色和红色的点就是训练样例,蓝色的点就是待分类样本,这句话的意思就是计算出绿色和红色的各个点到蓝色点的距离。距离怎么计算呢?

《数据分析师进阶算法之KNN详细讲解》 欧拉距离
《数据分析师进阶算法之KNN详细讲解》 曼哈顿距离

我们使用欧拉距离

《数据分析师进阶算法之KNN详细讲解》 我们的点是二维的有两个特征即x和y,如果是多维的话 公式如此

我们通过python来实现一下

《数据分析师进阶算法之KNN详细讲解》 这样我们计算出的距离就保存在了distance里了
《数据分析师进阶算法之KNN详细讲解》 查看一下这是我们10个点到蓝色点的10个距离。

“通过计算每个训练样例到待分类样品的距离”这句话我们做完了下一句是“取和待分类样品距离最近的 K 个训练样例”。

《数据分析师进阶算法之KNN详细讲解》 把得出来的距离按从小到大排序查看排序后的索引

意思就是第8个点离蓝色点最近,其次是第7个点…第2个点离蓝色点最远。“最近的k个训练样例”k是多少呢?这个不太好选,需要足够的经验才能选出来,没关系后面会介绍一种方法,很方便的就把k选出来。现在我们不妨把k值设为6。那句话的意思就是取6个离蓝色点最近的点。

《数据分析师进阶算法之KNN详细讲解》 这6个点分别是排序后的第8个,第7个,第5个,第6个,第9个和第3个点。

还有最后一句话“K 个样品中哪个类别的训练样例占多数,则待分类样品就属于哪个类别”

意思是在这6个点中一共有0和1两个类型,哪个特征占比最多,蓝色点就属于哪个特征。

《数据分析师进阶算法之KNN详细讲解》 结果显示1有5个,0有1个。所以蓝色点是属于类型1的点。

好了,这就是knn的思想,学会了算法你就是高级一点的数据分析师了。

knn就这样结束了?还没有,只会这一点你发现解决问题是有局限的,现在来看看怎么选出我们之前的k值。k选多少比较好呢?

先说一下为什么选择用python,python有一个sklearn库,就把我们前面的knn方法给整合了,我们不必自己构建只需要调用就行了。

《数据分析师进阶算法之KNN详细讲解》 KneighborsClassifier就是knn,n_neighbors=6就是k为6
《数据分析师进阶算法之KNN详细讲解》 最后预测结果是1

回到我们之前说的k值,k通常是根据经验取得,但我们没有经验怎么办,搜索呗(一个一个试)之前我们自己创建的数据集太小了,下面我们使用sklearn里面的数据集。

《数据分析师进阶算法之KNN详细讲解》 导入相应的库
《数据分析师进阶算法之KNN详细讲解》 手写数字数据集我在这不介绍了,有兴趣的可以查查
《数据分析师进阶算法之KNN详细讲解》 把我们的数据集划分为训练数据和测试数据,目的是计算选择当前k值时的准确度(划分数据集的函数我会在以后的文章里详细介绍它的原理,有兴趣的到时候可以看一下)
《数据分析师进阶算法之KNN详细讲解》 n_neighbors=3把k值传入3,knn_clf.score(x_test,y_test)的结果是0.9888888888意思是准确度是98.88%(knn_clf.score()这个函数在以后的文章我也会详细的介绍,现在都说的话…打字好累的,打不完)

k=3准确度是98.88%,哇看起来很高了的。那它是不是最好的呢

《数据分析师进阶算法之KNN详细讲解》 运行后最好的k值出来了,是4,准确度是99.17%。

我们试了k是1到10的10中可能,看哪个值最好。(什么?看不懂,可以问我。)

结束了吗?还没有看一张图

《数据分析师进阶算法之KNN详细讲解》 红色和蓝色是训练数据,绿色是待分类样本,如果k值取3,那绿色会分为蓝色。绿色明明离红色的最近啊,这样会不会出错?那怎么办呢?如果我们考虑距离,红色离绿色是1,蓝色离绿色分别是3和4,看倒数比大小:红色:1/1=1 ;蓝色:1/3+1/4=7/12,  红色>蓝色,红色胜,应分为红色。
《数据分析师进阶算法之KNN详细讲解》 ‘uniform’是不考虑距离;’distance’是考虑距离。我们的结果是不考虑距离。

结束了?

之前提到了计算距离的公式

《数据分析师进阶算法之KNN详细讲解》 曼哈顿公式
《数据分析师进阶算法之KNN详细讲解》 欧拉公式

格式变一下

《数据分析师进阶算法之KNN详细讲解》 上面曼哈顿,下面欧拉

再变

《数据分析师进阶算法之KNN详细讲解》 上面曼哈顿,下面欧拉

再变

《数据分析师进阶算法之KNN详细讲解》 上面曼哈顿,下面欧拉

再变

《数据分析师进阶算法之KNN详细讲解》 上面曼哈顿,下面欧拉

有相同的规律啊

总结一下

《数据分析师进阶算法之KNN详细讲解》 原来格式相同啊
《数据分析师进阶算法之KNN详细讲解》 这是明可夫斯基距离

那么p的取值到底取多少呢?老方法:试一下

《数据分析师进阶算法之KNN详细讲解》 出来了,p取2,k取3,  准确度是98.89%。

结束了?我就先说到这吧,重要的参数都说的差不多了,够用的了。

k,p, ‘uniform’,’distance’一个一个筛选出来好麻烦,以后我会介绍简单的整合好的方便用的一个方法,一下就把这些值都求出来。下篇文章再说吧。

对knn算法了解的怎么样了?有没有脑袋一亮?我自认为我这篇文章含金量还是很高的,我学knn的时候逛了很多网站,看了别人写的很多文章都是模模糊糊,我看的也是一知半解。以后打算更新,“决策树”,“贝叶斯”,“线性回归”,“逻辑回归”,“多项式回归”,“SVM”,“k_means”等等基本的算法和常用的数据分析基本方法,或者python的基本用法.

本文原创,不要复制转载,后果自负。

    原文作者:哆啦A梦小口袋
    原文地址: https://www.jianshu.com/p/20c3749ed2ad
    本文转自网络文章,转载此文章仅为分享知识,如有侵权,请联系博主进行删除。
点赞

发表评论

电子邮件地址不会被公开。 必填项已用*标注