这是菜鸟学Python的第125篇原创文章
阅读本文大概需要3分钟
上一篇(菜鸟学机器学习启航篇)对机器学习做了初步的介绍,机器学习的算法有很多,小白开始学习的时候,往往会被弄晕。有没有比较简单适合小白入手的算法呢~~当然有的,今天我们从最最简单的机器学习算法kNN入手,慢慢的通过一些简单的例子来理解机器学习。
1).语言
机器学习的文章,我主要以Python3为主,当然有的时候会穿插Python2.因为我一直是Py2/3混用的,而且Py2有点恋恋不舍,毕竟用了好多年了,一般会针对不同的项目用不同的语言.
2).开发工具
Python开发的工具非常多,前面入门上手篇我介绍过一些(入门篇我写了60几篇值得收藏|菜鸟学Python【入门文章大全】),机器学习我主要用Jupyter notebook非常方便,其实做数据分析我也喜欢用它(爬虫,数据分析我写了40几篇),但是爬虫一般我会用Pycharm去爬数据。
3).主要的库
机器学习框架我以sklearn为主,当然pandas和numpy也都是必备的!有同学会问这些库怎么下载啊? 你可以用pip安装,也可以直接下载anaconda这个神器,非常方便,一下子把机器学习,数据分析要的库全部安装了,省的你一个一个下载.
工欲善其事,必先利其器。挑完了称手兵器,准备工作都做好了,那么开始看数据集了.
一开始上手的时候,切记不能太难,欲速不达则不达。选来选去,我还是觉得最经典的数据集irsi(鸢尾花)比较合适,亮点如下:
1).数据集非常小巧
直接内置在sklearn库里面,不用我们再去网站上下载了,150行的数据,适合上手
2).数据比较干净
因为sklearn里面的数据都是经过清洗的,现实里的大部分数据都是未清洗的,其实机器学习里面有一大部分的时间是清洗数据,对特征值进行处理.
3).数据集长啥样
鸢尾花是一个非常有趣的数据集,一般一朵花有3部分组成:有花萼、花瓣和花蕊三个部分,花萼就是绿色的那部分在最外边,然后是花瓣,最里面是花蕊.
这里我通过采集花萼和花瓣的长宽,来对数据进行分类。一共有150朵花,分成了3类花:
1).Iris setosa
2).Iris versicolor
3).Iris virginica
是不是蛮漂亮的,下我们来具体看一下数据集.
4).导入数据集
导入相应的库和sklean里面的iris数据集,它是一个大的字典里面有花的数据(4个维度的特征值,标签值,标签名,表述,特征名字)
构建iris数据集,把数据转换成pandas的DataFrame看一下,我们随机抽5行看一下:
发现第一行花萼的长度是5.8/2.8,花瓣5.1/2.4,那这样的花就是virginica
1).好万事具备,我们可以开始愉快的玩耍算法吧
用玩的心态去学Python,好比你玩乐高积木,你就会乐此不疲了.今天我们用kNN算法来训练数据,一般的机器学习流程大致如下:
-
获取你的数据集,观察你的数据集,进行清洗和特征值选择,并划分训练和测试集的数据
-
选择合适的机器学习的模型
-
训练数据
-
测试测试集的数据
-
看准确率得分
-
最后模型调整参数,降维等,重复上面的步骤
2).什么是kNN算法
kNN是k-Nearest Neighbors的简称,我觉得是机器学习里面最简单的算法.它的核心思想就是,要确定测试样本属于哪一类
就寻找所有训练样本中与该测试样本“距离”最近的前K个样本,然后看这K个样本大部分属于哪一类,那么就认为这个测试样本也属于哪一类。
简单的说就是让最相似的K个样本来投票决定。
举例比如有一个身高,体重,是否正常的3个维度的数据集:
2).横坐标是身高,纵坐标体重,蓝色表示正常,红色表示偏胖或者偏瘦
如果我们有个老王他是160cm,85kg,那么计算这个点跟周围所有点的距离进行计算,看最近的距离为k=1的是谁,发现是165/90这个点,那么我们就认为老王和距离他最近的点是一类人,把他划分为胖的
如果我们有个老李他是170cm,65kg,同理计算距离为k=1的点是谁,发现是170/69这个点,那么我们就认为老李和距离他最近的点是一类人,把他划分为正常的
是不是很简单啊,我们上面假设是在距离为1,也就是k=1的情况下的分类,有同学会问,具体k应该怎么设置,如果k大一点比如3,那么有3个样本都跟他很近,而这3个样本的分类又不一致,应该如何划分呢,好下面我们开始真正探索iris这个数据集,然后回答问题.
1).划分数据集
一般我们拿到一个数据集都会进行划分,挑一部分为训练集,一部分为测试集.训练集主要用来训练模型,就是给算法喂数据,让它学习数据;测试集主要是验证我们的模型
我们把150朵花,分成两大阵营:112朵的训练集和38朵的测试集
有同学说这个大写的X, 小写的y是什么鬼,为啥要这样命名;这是一个约定,一般把数据集以X打头,标签以小写的y打头。就好像pandas我们一般喜欢写成pd
2).选择模型算法,进行训练
kNN算法有分类和回归,今天我们讲的是分类的例子.还记得上面的胖瘦的分类吗,就是一个典型的分类问题.鸢尾花也有分类问题,我们来看一下到底是如何机器如何学习的:
-
首先我们选择knn分类器
-
然后设置k=1,距离为1
-
接着训练数据集
-
最后预测数据结果
哇,原理机器学习这么简单,就这几步。先不要得意,后面还有很多工作要做呢,我们接着看
3).看一下预测准确率
knn算法在我们喂了一堆112朵花的训练集数据之后,变得智能了,可以帮我们预测测试集里面38朵花的分类标签了,感觉很好,到底准确率多多高呢,靠不靠谱呢:
准确率有97.36%,哇非常高哈!厉害,厉害!
4).调整一下参数看看
刚才我们是选的k=1,也就是找距离最近的为1的分类,如果我们k变化和 调整训练和测试集的比例,准确率会怎么样:
>>
<span style="color: rgb(255, 41, 65);">k=1,s=0.1,score=1.0<br /></span><span style=";">k=2,s=0.1,score=0.9333333333333333<br /></span><span style="color: rgb(255, 41, 65);">k=3,s=0.1,score=1.0</span><span style=";"><br /></span><span style="color: rgb(255, 41, 65);">k=4,s=0.1,score=1.0 k=5,s=0.1,score=1.0 k=1,s=0.2,score=1.0<br /></span><span style=";">k=2,s=0.2,score=0.9666666666666667</span><span style="color: rgb(255, 41, 65);"><br /></span>k=3,s=0.2,score=0.9666666666666667<br /><span style="color: rgb(255, 41, 65);">k=4,s=0.2,score=1.0<br /></span><span style=";">k=5,s=0.2,score=0.9666666666666667</span><span style="color: rgb(255, 41, 65);"><br /></span>k=1,s=0.3,score=0.9777777777777777 k=2,s=0.3,score=0.9777777777777777 k=3,s=0.3,score=0.9777777777777777 k=4,s=0.3,score=0.9777777777777777 k=5,s=0.3,score=0.9777777777777777 k=1,s=0.4,score=0.9166666666666666 k=2,s=0.4,score=0.8833333333333333 k=3,s=0.4,score=0.9333333333333333 k=4,s=0.4,score=0.9 k=5,s=0.4,score=0.95 k=1,s=0.5,score=0.9066666666666666 k=2,s=0.5,score=0.8933333333333333 k=3,s=0.5,score=0.9333333333333333 k=4,s=0.5,score=0.92 k=5,s=0.5,score=0.96
发现s的值越小,也就是说训练的数据越多,算法的准确率越高.如果训练的数据小了,k值变大准确率也会高很多.
5).预测数据
我们挑一个准确率最高的分类器模型,就可以预测数据了,
完全正确,随着人工智能的深入发展,未来机器学习的数据越来越多,会变的非常聪明,这就是为啥AlphaGo能这么打败那么多围棋高手的原因,不过还好机器不懂情感~~
结论:
好了,今天的机器学习入门第一篇就讲到这里,knn算法是不是很简单,其实knn的效果还是蛮好的!如有什么问题,欢迎大家留言讨论。我们期待下一篇更精彩!
长按二维码,加入小密圈
更多私密技巧干货,尽在小密圈
推荐阅读:
双十二来了,我爬取了淘宝上所有的羽绒服|想找到最大折扣
Python年薪最高有50w|探秘全国近1600个Python岗位数据分析
学好Python薪水有多少|我爬取了所有的Python职位
一份值得了解的Google Python风格规范指南
南京楼市火吗|16000套二手房数据分析
分析9000部电影|一个简单的电影推荐系统
厉害了!实战爬取全网5000部手机|上篇
本篇文章来源于: 菜鸟学Python
本文为原创文章,版权归知行编程网所有,欢迎分享本文,转载请保留出处!
你可能也喜欢
- ♥ 字节跳动大佬的Python自学笔记.pdf02/24
- ♥ 如何使用安装的python09/24
- ♥ Python中的匿名函数是什么11/08
- ♥ python如何切换目录09/18
- ♥ python如何判断文件夹不存在并创建10/14
- ♥ 如何在python中设置参数的范围09/01
内容反馈