这是《按图索骥学机器学习》-《A01什么是机器学习》的讲义 这门课程之所以叫按图索骥,是因为学习资料都放到了思维导图当中,大家可以根据自己的情况,选择合适的学习路径,自主学习
本节的视频教程,可以点击链接(https://www.bilibili.com/video/av82405911/)观看
导图和有关学习资料都放在了github(git.code946.com)上,并且在不断迭代和更新中
1、传统编程模式
这节课是A系列(A系列是一组从应用方向介绍机器学习的课程,偏基础)第一节课,给大家介绍一下什么是机器学习,和网上类似课程不一样的地方是,先不讲理论先从一个任务出发: 现在我们要求一个圆形的周长,这个时候可能很多同学说太简单了,迅速给出了代码:
ok,这是传统的编程模式,也就是数据+算法,计算机依据算法,传入数据,得出运算结果,我们得先知道有2PIr这个公式,接下来才能编写程序去计算任意半径长度的圆周长 好了,现在我们开一个脑洞:假设人类从来没有发现2PIr这个公式,我们可以利用程序推导出这个圆周长的计算公式吗?
2、机器学习模型推导圆周长公式
首先:圆周长是可以测量的,比如找个线团,环绕一个圆形物体(如手镯,圆形的碗碟等),再捋直 其次:圆半径不好测量,但可以测量直径 因此我们可以找出一堆的圆形,分别测出圆直径和圆周长,形成如下的数据集,当然在这个过程中会有误差
半径为2的圆形周长为:12.560000
接下来程序就可以通过这些数据,发现周长与直径的联系,总结出规律 这就是机器学习的神奇之处
具体怎么做呢? 第一步,读取周长和直径的测量数据,然后将具体数值用matplotlib画出散点图
上图中的横坐标是直径,纵坐标是圆周长,蓝色点就是样本点,可以看出随着直径的增长,圆周长也随着增大,二者呈线性关系,这点很重要,它决定着我们接下来采用的是哪种机器学习的模型去总结圆周长的计算规律 因为直径和圆周长是线性关系,所以用线性回归算法去预测圆周长,这里大家不用去管线性回归等陌生名词的含义,你可以简单的认为这里要调用框架中的一个类,然后调用其中的fit方法,把测试数据集传进去
第二步:引入sk-learn框架中的线性模型包中的LinearRegression类 LinearRegression翻译过来就是线性回归的意思
第三步调用LinearRegression中的fit方法训练模型
当fit方法执行完毕后,程序也就完成了学习过程, 是不是简单得想哭 那么它的训练结果是咋样的呢 因为LinearRegression是线性模型,并且从散点图上可以看出,我们这里学习到的模型就是一条直线 对应的就有直线的斜率和截距,可以将它们打印输出出来进行查看
所以这里我们训练出来的模型就是 周长 = lr.coef_ * 直径 + lr.intercept_ 而我们数学中总结出的计算公式是:周长= PI * 直径 + 0 可见此处的lr.coef对应的就是PI,而lr.intercept是一个误差项 coef的数值为3.09对比PI的3.14还是有点小误差的,之所以是这样,是因为我们用于训练模型的数据本身是有误差的,如果有同学感兴趣,可以在生成数据集的时候去掉误差项,直接用精确数据去训练模型,那么得到的coef就是和PI的数值一致了
3、模型评估
至此我们的模型是做出来了,因为我们已经先知先觉的知道了PI的精确值,所以很容易对这个模型进行评价,认为这个模型还是可以的,误差不大,但是这是一道脑洞题,PI是不会预先得知的,所以我们得有个评价系统来对机器训练出的模型进行评估
要对模型进行评价,需要有专门对模型进行测试的数据 这里我们用numpy直接生成了一组数据,为了清楚表达这里的误差值大小,此处用到的是精确值 这和实际情况是不符的,事实上测试数据和训练数据来源是一样的,训练数据有误差,测试数据同样有误差
接下来用机器训练出的模型,算一下直径为10的圆周长
可以看出,用模型算出的值(这个值可以叫做预测值),和数据集中的真实值,是有差距的,这个差距就是误差了,此处的误差自然是越小越好 在LinearRegression中有个score方法可以评价模型的好坏,我们一起试试看
此处score的具体含义,对应的计算公式,后面再说 我们只需要记住score的分值越接近于1,越好
4、传统编程模式 VS 机器学习编程模式
4.1、传统编程模式
传统编程其实是基于规则和数据的,目的是通过计算机的运算的能力,快速的得到一个答案。 还记得前辈们总结的公式吗:计算机程序=算法+数据结构。说的就是这个道理 但在机器学习的领域,这个模型就发生改变了
4.2、机器学习编程模式
机器学习的模式其实是从已知的数据和答案出发找出某种规则,接下来就可以利用这个规则去处理新的数据,有些同学可能会说通过这种方式得出来的规则有误差怎么办,首先我们可以用更加精准的数据和更加合适的算法,不断去调整我们的模型,得出更加精确的结论,其次在实际的工程项目中出现误差是很普遍的,只要误差的范围是能够接受的就可以了,比如PI本身就是一个无理数,就不是一个精确的数值,在实际工程中,是采用3.14还是使用3.1415926这就要看具体的应用场景了