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

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

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

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

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


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

第一行打斗3次接吻104次的类型是Romance(浪漫爱情片) ;最后一行打斗98次接吻2次是Action(武打战斗片)

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

这是我们实现knn分类的编程,看不懂没关系,稍后会仔细的说的。

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

出来结果是Romance类型的电影。

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

出来结果是Action类型的电影。

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

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

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

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

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


                                                                  ---我用的是jupyter notebook---


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

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

导入我们的numpy和matplotlib库
我们创建一些数据点,前五个类型是0,后五个类型是1
把我们创建的数据点画出来类型是0的用绿色显示,类型是1 的用红色显示。看出大约是左右两类。
我们再创建一个新的数据点x


那么这个x是属于哪一类呢,我们把它也画出来看一下

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

欧拉距离
曼哈顿距离

我们使用欧拉距离

我们的点是二维的有两个特征即x和y,如果是多维的话 公式如此

我们通过python来实现一下

这样我们计算出的距离就保存在了distance里了
查看一下这是我们10个点到蓝色点的10个距离。

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


把得出来的距离按从小到大排序查看排序后的索引

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

这6个点分别是排序后的第8个,第7个,第5个,第6个,第9个和第3个点。

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

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

结果显示1有5个,0有1个。所以蓝色点是属于类型1的点。

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

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

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

KneighborsClassifier就是knn,n_neighbors=6就是k为6
最后预测结果是1

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

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

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

运行后最好的k值出来了,是4,准确度是99.17%。

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

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

红色和蓝色是训练数据,绿色是待分类样本,如果k值取3,那绿色会分为蓝色。绿色明明离红色的最近啊,这样会不会出错?那怎么办呢?如果我们考虑距离,红色离绿色是1,蓝色离绿色分别是3和4,看倒数比大小:红色:1/1=1 ;蓝色:1/3+1/4=7/12,  红色>蓝色,红色胜,应分为红色。
'uniform'是不考虑距离;'distance'是考虑距离。我们的结果是不考虑距离。

结束了?

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

曼哈顿公式
欧拉公式

格式变一下

上面曼哈顿,下面欧拉

再变

上面曼哈顿,下面欧拉

再变

上面曼哈顿,下面欧拉

再变

上面曼哈顿,下面欧拉

有相同的规律啊

总结一下

原来格式相同啊
这是明可夫斯基距离

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

出来了,p取2,k取3,  准确度是98.89%。

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

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

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

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

最后编辑于
©著作权归作者所有,转载或内容合作请联系作者
  • 序言:七十年代末,一起剥皮案震惊了整个滨河市,随后出现的几起案子,更是在滨河造成了极大的恐慌,老刑警刘岩,带你破解...
    沈念sama阅读 157,298评论 4 360
  • 序言:滨河连续发生了三起死亡事件,死亡现场离奇诡异,居然都是意外死亡,警方通过查阅死者的电脑和手机,发现死者居然都...
    沈念sama阅读 66,701评论 1 290
  • 文/潘晓璐 我一进店门,熙熙楼的掌柜王于贵愁眉苦脸地迎上来,“玉大人,你说我怎么就摊上这事。” “怎么了?”我有些...
    开封第一讲书人阅读 107,078评论 0 237
  • 文/不坏的土叔 我叫张陵,是天一观的道长。 经常有香客问我,道长,这世上最难降的妖魔是什么? 我笑而不...
    开封第一讲书人阅读 43,687评论 0 202
  • 正文 为了忘掉前任,我火速办了婚礼,结果婚礼上,老公的妹妹穿的比我还像新娘。我一直安慰自己,他们只是感情好,可当我...
    茶点故事阅读 52,018评论 3 286
  • 文/花漫 我一把揭开白布。 她就那样静静地躺着,像睡着了一般。 火红的嫁衣衬着肌肤如雪。 梳的纹丝不乱的头发上,一...
    开封第一讲书人阅读 40,410评论 1 211
  • 那天,我揣着相机与录音,去河边找鬼。 笑死,一个胖子当着我的面吹牛,可吹牛的内容都是我干的。 我是一名探鬼主播,决...
    沈念sama阅读 31,729评论 2 310
  • 文/苍兰香墨 我猛地睁开眼,长吁一口气:“原来是场噩梦啊……” “哼!你这毒妇竟也来了?” 一声冷哼从身侧响起,我...
    开封第一讲书人阅读 30,412评论 0 194
  • 序言:老挝万荣一对情侣失踪,失踪者是张志新(化名)和其女友刘颖,没想到半个月后,有当地人在树林里发现了一具尸体,经...
    沈念sama阅读 34,124评论 1 239
  • 正文 独居荒郊野岭守林人离奇死亡,尸身上长有42处带血的脓包…… 初始之章·张勋 以下内容为张勋视角 年9月15日...
    茶点故事阅读 30,379评论 2 242
  • 正文 我和宋清朗相恋三年,在试婚纱的时候发现自己被绿了。 大学时的朋友给我发了我未婚夫和他白月光在一起吃饭的照片。...
    茶点故事阅读 31,903评论 1 257
  • 序言:一个原本活蹦乱跳的男人离奇死亡,死状恐怖,灵堂内的尸体忽然破棺而出,到底是诈尸还是另有隐情,我是刑警宁泽,带...
    沈念sama阅读 28,268评论 2 251
  • 正文 年R本政府宣布,位于F岛的核电站,受9级特大地震影响,放射性物质发生泄漏。R本人自食恶果不足惜,却给世界环境...
    茶点故事阅读 32,894评论 3 233
  • 文/蒙蒙 一、第九天 我趴在偏房一处隐蔽的房顶上张望。 院中可真热闹,春花似锦、人声如沸。这庄子的主人今日做“春日...
    开封第一讲书人阅读 26,014评论 0 8
  • 文/苍兰香墨 我抬头看了看天上的太阳。三九已至,却和暖如春,着一层夹袄步出监牢的瞬间,已是汗流浃背。 一阵脚步声响...
    开封第一讲书人阅读 26,770评论 0 192
  • 我被黑心中介骗来泰国打工, 没想到刚下飞机就差点儿被人妖公主榨干…… 1. 我叫王不留,地道东北人。 一个月前我还...
    沈念sama阅读 35,435评论 2 269
  • 正文 我出身青楼,却偏偏与公主长得像,于是被迫代替她去往敌国和亲。 传闻我的和亲对象是个残疾皇子,可洞房花烛夜当晚...
    茶点故事阅读 35,312评论 2 260

推荐阅读更多精彩内容