Datawhale开源学习,机器学习课程,项目地址:https://github.com/datawhalechina/leeml-notes

首先讲机器学习中的:回归,回归Regression可以做哪些东西呢?

股票预测

输入为以往股票走势,预测未来走势

自动驾驶车辆

输入为无人驾驶检测的路况信息,输出为方向盘角度

推荐系统

输入为使用者A和商品B,输出为使用者A购买商品B的可能性

模型选择的步骤有三步:

模型假设(define a set of function),选择合适的模型,比如线性模型模型评估(goodness of function),建立合适的损失函数,判断模型迭代时的收敛情况,可适当调整正则项模型优化(pick the best function),通过梯度下降不断迭代,找到合适的解

那么以上这三步在之前的文章中也有提及,文章链接: 机器学习介绍

模型假设

首先是模型假设,比如对于线性模型而言,可以根据特征多少来划分其为多少元的线性模型,如果只有一个特征

x

c

p

x_{cp}

xcp​,那么线性模型可假设为

y

=

b

+

ω

x

c

p

y=b+\omega*x_{cp}

y=b+ω∗xcp​,所以

ω

\omega

ω和

b

b

b可以猜测很多模型:

当然实际应用中,由于特征数量不止一个,可能最终的结果和多个特征强相关,那么每个特征都有其相应的权重,就拿pokman中生物的cp值来说,其可能收到多个特征的影响,比如:物种类型、物种血量、物种的重量、物种的高度等等,那这时候就不仅只有一个

x

c

p

x_{cp}

xcp​作为特征,特征有

x

c

p

x

h

p

x

w

e

i

g

h

t

x_{cp}、x_{hp}、x_{weight}

xcp​、xhp​、xweight​等等,用线性模型表示就是:

y

=

b

+

ω

i

x

i

y=b+\sum \omega_i x_i

y=b+∑ωi​xi​。

x

i

x_i

xi​表示了各种特征:

x

c

p

x

h

p

x

w

e

i

g

h

t

x_{cp}、x_{hp}、x_{weight}

xcp​、xhp​、xweight​等等

w

i

w_i

wi​表示各类特征的权重:

ω

c

p

ω

h

p

ω

w

e

i

g

h

t

\omega_{cp}、\omega_{hp}、\omega_{weight}

ωcp​、ωhp​、ωweight​等等

b

b

b为偏移量

以上就是模型假设,有「单特征模型」和「多特征模型」两种大致分类,后面两个步骤的说明,我以单特征为例进行说明,一是为了简洁,而是为了方便理解。

模型评估

对于单特征模型而言,要评估其模型的好坏,要将「预测模型」和「真实值」进行比对,求其方差即可。所以若有一系列预测数值,只需要统计真实值

y

n

y^n

yn和预测值

f

(

x

c

p

n

)

f(x^n_{cp})

f(xcpn​)之间的方差即可,方差就是所谓的损失函数loss,即:

(

y

n

f

(

x

c

p

n

)

)

2

(y^n-f(x^n_{cp}))^2

(yn−f(xcpn​))2。

比如统计10组原始数据的和,和越小模型越好,写出损失函数的公式就是:

L

(

f

)

=

n

=

1

10

(

y

n

f

(

x

c

p

n

)

)

2

=

n

=

1

10

(

y

n

(

b

+

ω

x

c

p

n

)

)

2

L(f)=\sum\limits_{n=1}^{10}(y^n-f(x^n_{cp}))^2=\sum\limits_{n=1}^{10}(y^n-(b+\omega*x^n_{cp}))^2

L(f)=n=1∑10​(yn−f(xcpn​))2=n=1∑10​(yn−(b+ω∗xcpn​))2

损失函数Loss分别由w和b确定,映射到二维坐标轴上时,就生成了一系列等高线,图像如下:

相同等高线的损失函数loss值是相同的图中每个点代表模型对应的

ω

\omega

ω和

b

b

b颜色越深loss越小,代表模型更优

最佳模型-梯度下降

我们知道loss的大小决定了「预测模型」和「真实值」之间的差距,差距越小说明预测的越精准,因此就将问题转换成了求loss极小值的问题,也就是说,找到使得loss取最小值的w和b即可,那么我们可以通过梯度下降的方式不断迭代w和b的值,使得loss function迭代并取得一个极小值(这里之所以不一定取得最小值,是因为梯度下降不断迭代的时候可能只能陷入到某个极小值解中,而无法跳出该解,除非给梯度下降增加学习率,让其以更大幅度的迭代跳出当前的极小值而进入下一个极小值中,总之梯度下降便于我们去寻找极小值,而无法直接寻找到最小值),比如对于下图中的loss,计算对w的迭代:

上面也说到了学习率,那么什么是学习率?学习率就是移动的步长,如上图的

η

\eta

η,接下来我们来说下梯度下降迭代步骤:

步骤1:随机选取一个权重

ω

0

\omega^0

ω0(之所以随机选取,是因为迭代过程中会让

ω

0

\omega^0

ω0自动修正到周围的极小值上去)步骤2:计算微分,也就是当前的斜率,根据斜率来判断移动的方向

>0向右移动(增加

ω

\omega

ω)<0向左移动(减少

ω

\omega

ω) 步骤3:根据学习率移动

重复以上步骤2和步骤3,知道找到极小值,以上就是梯度下降的过程,只不过根据随机选取的

ω

0

\omega^0

ω0的不同,很可能不断迭代后得到不同的极小值,不一定是最终的最小值,如下图:

以上都只是在说单个模型参数

ω

\omega

ω,便于理解,接下来引入两个模型参数

ω

\omega

ω和

b

b

b,这个过程需要做偏微分,过程如下,分别对

ω

\omega

ω和

b

b

b求偏导:

在求偏导数并且不断迭代的过程中,最终的loss会渠道一个较小的结果,比如说对于下图而言,相同等高线代表相同的loss,越往中心,越接近极小值,那么这张图就是loss function在不断迭代时的一个行为轨迹,会按照等高线切线的发现方向前进,这就是「梯度下降」,即按照梯度的方向下降:

每一条线围成的圈就是等高线,代表损失函数的值,颜色约深的区域代表的损失函数越小红色的箭头代表等高线的法线方向,也就是梯度下降的方向

那么以上就是梯度下降相关的知识,可以看到参数在迭代的过程中总是减去

η

\eta

η乘以对应参数关于loss的偏导数,根据其正负值进行迭代,那如果偏导数为0呢?或者趋近于0呢?又该如何解决?这也是梯度下降在当今现实世界中面临的挑战。

其实线性模型就是一个碗状模型,我们的目的就是找到最优解,但是往往由于很多模型的复杂性,导致在梯度下降的过程中,会出现偏导数为0或者趋近于0的情况,这样就会阻碍我们通过梯度下降去寻找最优解。

复杂模型与过拟合

通常在选取模型的时候,我们根据现有的已知数据去选择适合当下数据的模型,我们知道,若要让模型能够更加准确的预测更多的数据,变的「普世性」更强一些,那么我们需要更多的数据去建立更复杂的模型才行,所以往往随着数据量的增加,线性模型的局限性就出现了,通常一开始我们的做法是,将一元一次的线性模型变为一元二次的线性模型,甚至三次、四次等等,使得我们的线性模型能够进行更加复杂的表示,来拟合更多的数据,随着模型不断变的复杂,也确实让测试的loss变的越来越小,拟合的数据也越来越准确,但是「越来越准确」的前提是「只是基于当前已有数据进行的拟合」,那这就会引出一个问题,叫做「过拟合」。

什么是过拟合?为了能够拟合当下数据,而不断增加模型复杂度,使得模型为了「拟合」而「拟合」,反而丧失了模型的「普世性」,当加入一个新的数据时,该数据可能并不能被已有模型很好的预测到。

由上图可以得出结论就是,越简单的模型是越复杂的模型的一个子集,也就是复杂模型能够拟合出更多的信息,但是往往「过多的信息」反而会影响到真实的预测。接下来就是:如果出现过拟合,我们该如何解决这样的问题呢?主要方法有以下三点:

将多个模型合并起来,然后根据类似于数字电路中的电平信号,来选取合适的项,其他项权重制为0引入更多的特征,也就是之前提到的,将「单特征」模型变为「多特征」模型加入正则化,正则化的引入使得模型的拟合可以变的「曲折」或者「平滑」,这取决于正则项中

λ

\lambda

λ值的大小

推荐阅读

评论可见,请评论后查看内容,谢谢!!!
 您阅读本篇文章共花了: