摘要
本周继续进行机器学习,通过预测宝可梦cp值和宝可梦分类的例子,对线性回归有了清晰的了解;为提高模型在训练集和测试集上的准确性,增加了模型的复杂性,但模型过于复杂会出现过拟合现象,我也简单学习了解决过拟合的几种方法。对于分类问题,线性回归是连续的函数不适合解决分类问题,而解决分类问题需要使用逻辑回归
Abstract
This week continued with machine learning and gained a clear understanding of linear regression through examples of predicting Pokemon cp values and Pokemon classification; In order to improve the accuracy of the model on the training set and the test set, the complexity of the model was increased, but the overfitting phenomenon would occur if the model was too complicated. I also briefly learned several methods to solve the overfitting. For classification problems, linear regression is a continuous function that is not suitable for solving classification problems, which requires the use of logistic regression
1、预测神奇宝贝
预测宝可梦进化后的cp值(战力值),首先要找一个函数,input为一个宝可梦,output是宝可梦进化后的cp值;
f(一个宝可梦)=进化后cp值
输入X:一只宝可梦,Xcp:宝可梦的战力值,Xs:宝可梦的种类,Xhp:宝可梦的身高,Xw:宝可梦的重量,输出Y.
先找一个简单的model y=b+w*x(w,b是参数,可以是任何值)
X的右上角上标表示一个完整的宝可梦的数据
十个宝可梦的数据
L函数是评估参数w、b的好坏(这里采用的是最小二乘法)。
Loss函式作图如下,横轴为b,纵轴为w,颜色表示Loss函式的好坏,越接近红色表示Loss函式输出越大,越接近蓝色表示Loss函式输出越小
如何找到最好的Function
第一种方法:穷举w,b带入Loss中,找使得Loss函数值最小的w,b;
第二种方法:梯度下降法(Gradient Descent)
与第一章学习中的方法一样,分一个参数和两个参数两种情况
对于Linear Regression,无Local minima,梯度下降基本上都能找到最优点。
按照这种方法更新参数,实际上Loss函式的值沿着法线在更新
- 实际结果
使用训练集(10组上面数据)和测试集(另外10组数据)计算误差来验证训练好的模型的好坏
1.简单线性模型
在训练集上的Loss值为31.9比在测试集上的Loss值为35小
2.选择更复杂的模型
该模型中,在训练集上的Loss值为15.4,在测试集上的Loss值为18.4
进一步复杂的模型
该模型中,在训练集上的Loss值为15.3,在测试集上的Loss值为18.1
选择更复杂的模型可能会出现过拟合的情况
过拟合是指在机器学习中,模型在训练集上表现较好,但在测试集或实际应用中表现较差的现象。
模型越复杂,在训练集上的Loss值变小了,但是在测试集上的Loss值反而变大了,这种现象称为过拟合。所以要选择合适的模型
增加训练数据并且考虑上宝可梦的物种类别
再设计一个更复杂的model,将Xhp(血量),Xh(身高),Xw(重量)考虑进去
但是将更多的特征值考虑进去后,发生了过拟合
- 解决过拟合的几种方法
1.增加训练数据
通过增加训练数据量,从而减少模型在训练集上的过拟合风险,提高模型的泛化能力。
2.正则化
在损失函数中引入正则化项,用于限制模型参数的大小,减小模型的复杂度,从而减少过拟合。
3.早停策略(Early Stopping)
在训练过程中,根据验证集的性能表现,在验证集上性能不再提升时提前停止训练,从而防止模型在训练集上过拟合。
4.随机丢弃(Dropout)
在训练过程中,随机丢弃一些神经元的输出来减少神经元之间的依赖性;让某个神经元的激活值以一定的概率p停止工作,这样可以使模型泛化性更强,因为它不会太依赖某些局部的特征。
5.控制模型复杂度
通过减少模型的层数、节点数或卷积核的个数等方式降低模型的复杂度,从而减小过拟合的风险。对于模型的设计而言,我们应该选择简单、合适的模型解决复杂的问题。也不宜为了一昧的追求低误差而选择特别复杂的模型。
6.降低特征的数量
对于一些特征工程而言,可以降低特征的数量——删除冗余特征,人工选择保留哪些特征。这种方法也可以解决过拟合问题。
加入正则化(Regularization) 项,使其更平滑。
越大,更倾向考虑w的值(这个Function的平滑程度跟bias没有关系),表示Function越平滑;但是不能太平滑,否则在从测试集上的数据会表现变差
2、分类神奇宝贝
分类是输入一个相关信息后,输出为诸多选择中的最符合预期的一个结果
以宝可梦为例,输入一只宝可梦,输入为这只宝可梦属于哪一类
用数值表示输入的一只宝可梦
用皮卡丘为例子
Total:整体强度,表示宝可梦有多强,比如皮卡丘是320
HP:血量,35
Attack:攻击力,55
Defense:防御力,40
SP Atk:特殊攻击力,50
SP Def:特殊防御力,50
Speed:速度,90
这七个数值组成一个向量
把Classification用Regression的方法处理解决
以BInary Classification为例,在训练数据时,让Class1的输出为1,让Class2的输出为-1。在测试数据时,Regression的输出是一个数值,此时,输出数值接近1时说明他是Class1,输出数值接近-1时说明他是Class2.
这样做存在的问题
1.如右图中Class1中右下角的这些点,如果继续用绿色那条线所代表的函数进行预测,这些新加入的点的误差将特别的大,为了缓解由此带来的误差,绿色的线向下移动到紫色的线所代表的函数,以减少误差
2.Regression的output是连续性质的数值,而classification要求的output是离散性质的点,我们很难找到一个Regression的function使大部分样本点的output都集中在某几个离散的点附近因此,Regression定义model好坏的定义方式对classification来说是不适用的。
关于此时Loss的值:预测的结果和真实的结果相同为0,否则为1
贝叶斯估计
以上称为Generative Model,由上述四个框内的概率可得P(x)=p(x|c1)p(c1)+p(x|c2)p(c2)
通过概率公式计算宝可梦x是属于哪个类型,比较p(c1|x)和p(c2|x)那个大,其中P(C1) 和P(C2)是通过类别个数的频数来计算的。
还里以两个类别(一般系和水系的宝可梦)为例,训练样集中有79只水系的,61只一般系的。
一只已知的其属性的宝可梦属于水系的概率是多少?
在这里用防御力和特殊防御力作为一个二维向量(方便画图)来表示宝可梦
海龟是79个training data之外的,假设这79个点是从Gaussian distribution(正态分布/高斯分布)sample的;而现在有这79个点怎么找到这个Gaussian distribution再求从该分布sample出海龟那个点的几率
对于高斯函数,这里表示均值μ,表示协方差 Σ,两者都是矩阵matrix,输入vector x,得到输出的是一个sample 出x的概率密度。
下图中可以看出,同样的 Σ,不同的μ,概率分布最高点的地方是不一样的。
同样的的μ,不同的 Σ,概率分布最高点的地方是一样的,但是分布散的程度不同
接下来就是找到这个Gaussion 函数,需要我们去估测出这个Gaussian的均值μ和协方差 Σ
估测均值μ和协方差的方法就是极大似然估计法(Maximum Likelihood)
79个点中每个点所代表的Gaussion函数都可以sample出其他点,只是sample的几率大小不同。
给定均值μ和协方差 Σ的一个Gaussion函数求出其sample其他各个点的几率,由于数据是独立同分布的,所以最终的概率值为各个点的概率之积。
现在就要找出到底是那个Guassion函数sample这79个点的概率最大
(即L(μ,Σ)最大)
这样做,只考虑防御和特殊防御准确率只有,但是考虑到宝可梦的七个属性也只有
进一步修改模型,使用相同的Σ
μ1,μ2跟之前的μ1,μ2相同,Σ公式如下
只考虑防御和特殊防御时并采用同一个Σ,Class1和Class2的分界线是一条直线了。
采用同一个Σ,并考虑宝可梦的全部feature,准确率得到了提升
生成模型步骤
- step1 找到若干高斯模型作为解决问题的模型集
- step2 使用极大似然估计来判断一个模型的好坏
- step3 通过验证参数,选出最好的模型
后验概率(posterior probability)
后验概率:在已知与其相关的其他事件发生的情况下,某一事件发生的概率。
经过最终的化简计算可以知道,生成模型 + 贝叶斯概率公式本质上是寻找参数w和b的过程,如果我们直接进行参数w和b的求解,是不是就可以简化前面那么复杂的计算过程?这也是逻辑回归算法
总结与反思
通过本周的案例学习。对于不管是预测宝可梦的cp值还是宝可梦的分类问题,都是三个步骤,第一确定合适训练数据和模型;第二通过损失函数的误差值来判定模型的好坏;第三通过梯度下降的方法,不断优化模型的参数。同时,对于模型的复杂度不是越复杂越好,有时候越复杂的模型可能会发生过拟合,要选择合适的模型。
本周对于学习有所拖沓。对概率论的有关理论知识有所遗忘,对于逻辑回归学习但没完全理解,下周继续完善这一块内容后,再继续向下学习。
文章评论