机器学习的一些基本概念
回想一下,我学习机器学习也有一小段时间了,虽然我脑子确实不太好使,但还是能区分一些基本概念的。
上下标:该特征变量X的上标表示第(i)个样本,下标表示第j个变量值
比如说,假设函数:(简单线性回归里的这条公式是学习机器学习这门课见到的第一条公式),以我理解,那时我们对一个问题做出合理假设时拟出来的一个函数,就是”假设函数“
代价函数:还是先从简单线性回归(linear regression)开始看,,了解过方差知识的同学一定对这个形式不陌生,我第一眼看到它也有那一丝丝的熟悉感,它的大小代表预测值与目标值之间的差值,形象一点说,也就是我们用假设函数来拟合我们给的那一串数据所要付出的”代价“
训练集/测试集/验证集:一开始我也很懵,为什么要将这些数据分成那么多的部分,不累吗,究竟有什么用,数据不都是一样的吗,我很疑惑,但当我浏览了网络上,csdn上的博客,知乎上的文章,一些作者的解释让我对此有了更新的认识,有一篇文章的比喻十分的形象,也很贴切,在此分享一下。
我们通过数据集来拟合我们给的假设函数的参数,即模型参数,就好比一个学生去参加一场考试,训练集,望文知义,是准备考试时用于训练答题的平时练习,做的题多了,训练的数据多了,参数也就向着我们想要的方向变化了,学生的做题能力也就提高了,测试集就好比最终的考试,用于检验假设函数的拟合效果,画的图像不像,能不能精准预测,程序一运行也就出来了,学生的成绩虽然不能真实的反映一个人的水平和能力,但至少能间接反映某一阶段的学习效果,可现在都是网上阅卷啊,只知道分数怎么知道错在了哪里,拟合效果不够理想同样找不出是那个参数出错了,这时候就该发挥发挥验证集的作用了,验证集就好比大考前的一次次模拟考,一次次小测验,通过小考不断调整自己的努力方向,稍微调整一下参数,到了大考不就能考得更加好了吗,同样拟合的效果也再更多的数据帮助调整后变得更好了。
总的来说,训练集即是用来拟合参数的,测试集是用来看最终的拟合效果的,而验证集是用来进一步优化我们的参数的,经过了训练集和验证集的考验,我相信,假设函数也是一个成熟的函数了,能很好地应对测试集所代表的真实环境的考验了。一般,根据Andrew-Ng的话来说,但数据集很大时,按6:2:2来划分训练集,验证集和测试集。
给大家看个可视化后的简单数据集:
特征放缩:有时候有些数据会很大,有的会很小,会明显地影响参数的走向,为了避免这种情况的发生,会对数据进行这样的处理,即
正规方程和梯度下降算法(gradient descent algorithm):
先来说说这两种算法的区别与好处吧,先上公式:
梯度下降法: until convergence,其中α为学习率,可以理解为前进一步所迈多大的步子,每次迭代参数的减少速率
正规方程:
直观来看,正规方程少输入一个参数,有选择困难症的同学有福音啦,输入X和y的值,就能直接得到模型参数值,但梯度下降法不仅要提供模型参数,还要你控制迭代的次数,有人就疑惑了,既然正规方程这么好使,还要梯度下降法干嘛,直接用正规方程不就又方便又直接了吗,但我们好像忽略了一件事,那就是——矩阵的运算。
正规方程在比一万阶大得多的数据上会比梯度下降法慢,这时候最优解就成了梯度下降法,也就是说在Google新闻为例的海量数据面前,正规方程不是正解,不仅费时间,还费容量。
幸好,在平时,我们接触的数据很少会到这么大的量级,我们在大部分情况下还是可以放心,开心地用正规方程来求取所要的参数的。
其实两种算法在数据量比较小的时候效果差别不大,就是写程序时的长短有区别,当然这只是我个人的观点哈,如果有大佬能分享一下它们之间的真实区别就更好了。
下面看一下两种算法在简单线性回归中的效果,上图:
梯度下降法:
正规方程:
除了因为我画图的时候的输出框大小的不同导致的图形有点变形,但也不难看出,效果肉眼可见的相同,那还是控制一下变量吧,继续,
不说都以为是Ctrl+c Ctrl+v的,
可能也是因为现在计算机运算能力都不差,运算所需的时间直观感受不出来,
都是用pycharm运行的,不用time.process_time()测一下还真没啥感觉,这样看来,数据少的时候,正规方程不仅形式简单,还花的时间少。
逻辑回归(logistic regression):这是一种分类算法,当然也用于解决分类问题,我虽然刚开始学习机器学习,但冥冥中感觉这种问题在生活中比线性回归来得更普遍一些,也就是,如果能很好的解决逻辑回归问题,很多事情其实计算机就有了用武之地,这只是我个人的看法哈。
先上图感受感受,
因为要解决的问题变了,当然,假设函数也该变变了,形式有了些小改动。
假设函数: ,可以将方程简化成 ,这个简化后的方程有个英文名,叫做sigmoid function,或者logistic function。
代价函数: 这个函数倒没怎么变化,但是这条式子配合上上面的假设函数,求偏导很麻烦,因此,要变一下形。
令 ,有 , ,但分段函数也无法求导,鉴于y=1和y=0两种情况,将上述Cost函数进行改写,改写成 ,这就舒服了,这下可以求导了,
代价函数也就变成了这个样子, ,梯度下降法中,公式不变,为,
until convergence。
决策曲线:如果以 o r 作为分界线,决策曲线上的点满足,而图像以为横轴,为纵轴,因此,
。
就像这样,
图里面,对应Exam1 Score,对应Exam2 Score。
第二幅图对应的决策曲线有两种,先上图,
第一幅图的learningRate为50,第二幅图的为1,第三幅图的为0,也就是说,第二幅图对应的公式有正则化项,第一幅图对应的公式可以近似看成只有正则化项,而第三幅图没有,可见,正则化项可以更好地防止过拟合,但是只有正则化项只会导致欠拟合。
欠拟合是什么,过拟合是什么,正则化项又是什么,接下来我对此的一些个人想法可能对你的理解有些许帮助。
欠拟合/高偏差:没有很好地拟合,直线感觉好像跟数据关系不大一样;
就像这样?
又或是这样?
过拟合/高方差:没有足够的数据使它生成一个好的假设函数,简单来说,就是变量过多导致泛化能力差。或者说是,太依赖现有的数据了。
上群图,
都是在千方百计将所有数据连起来,或者完全将两种数据分开,所以说,有些时候追求极致并不一定是是一件好事。
从前面两个名词可以看出,逻辑回归会存在拟合不好的情况,因此引入了正则化(regularization)这个概念。
以我的理解,正则化就是利用幂比较大的特征变量对应的模型参数比较小,幂比较小的特征变量对应的模型参数比较大的特点,通过约束幂比较小的模型参数来调整幂比较大的模型参数的大小,以达到使决策曲线or预测曲线更加贴近观测点,而又不至于使曲线震荡过于明显。
代价函数正则化: ,其中λ为正则化参数。
求导后, 。
梯度下降法:公式为,即,
但这次有点不同,按照国际惯例,不参与正则化,故为 ,(其中,为学习率,为正则化参数)
正规方程:(其中,X为(m)x(n+1)矩阵,正则化项矩阵为(n+1)x(n+1)矩阵,图中以n=4为例),值得注意的是,当mn时,
即矩阵大小关系为(m)x(n+1)(n)x(n+1)时,为奇异矩阵,只有加上正则化项后才可逆。
到神经网络啦
我老把两个单词搞混,就是neutral跟neural,其实两者没啥关系,下面要说的是neural network。
激活函数:就是sigmoid function/logistic function.
一个神经网络分成三部分,即
输入层 | 隐藏层 | 输出层 |
上下标:第j层第i个激活项。
权重矩阵。
# 挖个坑,图我后面补。
前向传播:输入单元激活项开始向前传播,传播到隐藏层,计算隐藏层的激活项,传播到输出层,计算输出层的激活项,依次计算激活项,从输入层到隐藏层,再到输出层的过程。我的理解就是由头至尾的传播。
XOR其中一个为1,式子为真;XNOR两个不一样,式子为真;NOT为0,式子为真;AND都为1,式子为真;OR其中一个为1,式子为真;NAND不都为1,式子为真。
代价函数: