三 Python神经网络学习--机器学习--西瓜书学习笔记

前言
【三Python神经网络学习--机器学习--西瓜书学习笔记】最近跟老师学习西瓜书,正好和之前的学习路程重合,便结合在一起更新,也建议大家跟着看看机器学习的内容,根据我的理解(不一定对),学习路线应该是:
机器学习->深度学习(包含神经网络)
那么今天从西瓜书的绪论开始吧,我会尽量把我学到的以及书上难懂的讲清楚 。一起加油!!
我不会直接系统说大量的定义,而是在文章中慢慢渗透进去,慢慢理解 。
机器学习 什么是机器学习?
根据百度百科的定义:
是专门研究计算机怎样模拟或实现人类的学习行为,以获取新的知识或技能,重新组织已有的知识结构使之不断改善自身的性能 。
通俗来讲,机器学习,就是使机器通过某种方法,学习到我们想让他学习到的东西,比如前两讲,我们使“机器”学习到了如何给他一个华氏度,他计算出摄氏度,我们使一个“机器”学会怎么分辨玫瑰和月季,这就是机器学习的实例 。
而在这个过程中,我们给机器一些例子,让他们学习 。
机器学习的过程
正如前两讲中,我们通过一个初始的公式+一些我们已知的数据,可以慢慢慢慢的计算出最后较为精确的公式,从而帮助我们分析计算 。
而这个过程,就是机器学习的过程 。而给出已知数据,通过已知数据调整系统参数的过程,可以近似的认为机器在上课 。
通过上述的内容,我们可以把过程化简为下面的流程图:
这个过程,就是机器学习的过程了 。
数据选择
我们拿到一堆数据之后,要去把数据分组,需要有训练的数据和验证测试的数据,如下图:
举个例子,可以拿到80%作为训练集(即使用这80的样本用来训练),拿10%的样本去验证,剩下的样本全部用来测试 。
这个地方,验证集是用来测试后,验证模型是否正确,验证的过程中还会调整参数,而测试集,仅仅是用来测试,测试的过程中不会调整参数 。还是有略微的区别的 。
但是要注意,三个分组的数据分布,要尽量保证一样,比如玫瑰花-月季花分类,我们不能把月季花作为训练集,玫瑰花作为验证集,而应各个品类在各个分组中比例大致相同 。
误差
前两讲中说过,误差=真实值-计算值(或计算值-真实值,只要自己清楚即可) 。
对于最终得到的结果公式 g ≈ f(x),我们希望它误差尽可能小,这样才能较为准确的进行工作 。
最终函数g ≈ f(x)
其实最终的g还是较为难控制的,误差太小,有可能会出现过拟合的问题(over- ),误差过大,就会出现欠拟合的问题(under-) 。
其实这个问题很容易理解,我们可以通过坐标系来看,假设现在有这些数据:
我们想拟合出这些数据的曲线,较为理想并且几率较大的曲线应该是下面的:
这些曲线能符合这些数据的趋势,还能最大程度的体现出数据的特征,其他可以的当然都能作为最终的曲线函数,采用的时候都可以有较大的信服力 。
什么是欠拟合呢?如下图:
整个函数其实是一条直线(此时数据量少,看起来没区别,但数据量大了,就有区别了),只能看到趋势,但就像一条随手画的直线一样 。
同样,下面这张图是过拟合的样子:
我们不排除原本的数据就是这个曲线的可能,但是那样几率太小了,所以一般认为这样就是过拟合 。
如何防止欠拟合或过拟合呢?
一般来讲,欠拟合较为容易克服,我们可以通过镜像翻转或者再次训练来增加样例的数量,从而防止欠拟合的现象 。