机器学习(一):机器学习基础知识及感知机(perceptron)/ 线性回归(linear regression)

在这篇文章中,我们会介绍机器学习的基础知识及一个简单的线性模型-感知机模型。

机器学习(machine learning)是创建和使用数学的数据结构来对数据进行预测。这些数据结构(也叫模型)有多种表现形式,比如树,图,代数方程以及概率分布等。我们先从线性模型(linear model)开始讲起。

机器学习的基础知识

我们举一个例子,有一个橄榄球俱乐部和一个芭蕾舞俱乐部相隔很近,有一些芭蕾舞运动员会偷偷进入橄榄球俱乐部,我们想用机器学习的方法把橄榄球运动员和芭蕾舞运动员进行区分,这样我们就能判断进入俱乐部的人是芭蕾舞运动员还是橄榄球运动员。目前我们有这些人的身高体重数据,如图1。

 

运动员的身高体重及类别
图1. 运动员的身高体重数据及类别
图2. 身高体重数据画图表示

 

图1 是这些运动员的身高体重数据及他们的类别(0或者1),这种用表格的形式不太方便理解,所以我们把它画成散点图,见图2,红色的叉表示橄榄球运动员(y=1),蓝色的点表示芭蕾舞运动员(y=0)。有了数据之后我们就想用机器学习的方法来对每一个进入俱乐部的人来判断他是橄榄球运动员还是芭蕾舞运动员(label是0还是1),如果是橄榄球运动员,就让他进去。

那么首先我们得明白机器学习的流程。

图3. 机器学习 pipeline

我们有了一些知道类别的数据,我们称之为训练数据,我们用训练数据和它们的类别来训练一个模型,这个是训练过程。当过来一个没有类别的新数据(测试数据)的时候,我们就要通过这个模型来预测这个测试数据的类别。

对于我们刚刚这个例子,它的流程如图4这样:我们有了一些运动员的身高体重数据及对应的类别,我们把它训练成一个模型,当来一个新的人的时候,我们得到他的身高和体重数据(如85.2,160.3),将这个数据放入我们的模型,模型就会预测出一个类别(如1)。

图4. 橄榄球-芭蕾舞运动员问题 学习pipeline

抛开机器学习的思想,我们直观地看一下图2的数据,是不是可以考虑到,如果我们简单画一条线(图5),比如{x_{1}} = 70,那我们就能把两个类别的数据分开了。写成式子的话就是 if (x{_1} > 70): \widehat{y} = 1, else: \widehat{y} = 0。 这里\widehat{y}是指对y的预测值。

如果我们想到有个公式为f(x)=(x_{1} -t)t = 70, 那么我们就可以把我们刚刚那个式子改为 if (f(x)>0): \widehat{y} = 1, else: \widehat{y} = 0

其中f(x)我们就可以称之为一个模型(model),它有一个参数t体重x{_{1}},身高x{_{2}}就叫做模型的特征(feature),图5中的这个模型是一个最简单的线性模型,我们称为决策树桩(Decision Stump),它的预测结果是0还是1取决于参数tx_{1}=70这条线我们称之为决策边界(decision boundary),这个模型有一个线性决策边界(linear decision boundary)

图5. 决策边界

当我们改变t的值的时候,比如t=90,那我们可以生产一个不同的决策边界,这时数据(85.2,160.3)就会被划分为0类而不是1类。

对于模型f(x)=(x{_1} -t),如果参数t设得好的话,那我们就能得到比较好的分类,所以我们可以将t从最小值0到最大值进行搜索,计算在每一个阈值的分类错误的个数,去找最优解,即错误率最低的解。找到最好的参数的值的过程我们叫做学习(learning)

对于图5中的数据我们可以用一条直线就把它分开了,但是在很多时候数据是没有办法用一条直线进行区分的,如图6,这种问题叫做非线性分类问题(non-linearly separable)

图6. 非线性分类数据

 

不管是线性分类问题还是非线性分类问题,当我们确定一个决策边界的时候,我们都可以计算出分类错误的个数,从而计算出错误率,我们可以画出图6数据的基于决策树桩的错误率曲线,也叫error landscape,如图7。

图7. error landscape

不同的阈值可以产生不同的错误率,在图7中,当t=-2时,大多数的点都被预测成了1类,所以产生了较多的错误。当t=0.2或者t=0.8时,可以得到最小的错误率,大约是8%的错误率,所以我们可以随机的选择其中一个作为t_{best},然后我们把它填入我们的模型f(x)=(x{_1} -t)中,就可以得到我们最终的模型。

所以我们可以看到得到最终的模型经历了3个步骤,首先确定我们的模型函数f(x)=(x{_1} -t)。第二步是计算我们的错误率,在这里我们是用分错的个数除以总个数。第三步根据错误率来学习模型函数中的参数值tt的学习是通过遍历它的可能值,找到使错误率最小的过程。经历这3个步骤,我们就可以能到我们最终的模型。

当我们得到模型以后,我们是不是需要考虑将我们的模型应用到现实数据中会发生什么样的事情呢,我们是基于我们已经有的数据来训练模型的,但是在实际中它可能会碰到我们之前没见过的数据,比如120kg的芭蕾舞运动员o(╯□╰)o。就像我们在学开车考驾照一样,我们可能是在某一个特定的路上进行练习,但当我们拿到驾照正式上路的时候,我们可能会在一些我们没见过的路上开,在不同的天气状况下开等等,那我们就必须把在驾校中学习的技能泛化(generalise)到这些场景中。同理,模型也需要有好的泛化能力。

但是又有一个问题,我们只有一个数据集,怎么才能知道模型在未知的数据上效果怎么样呢。答案是我们可以把数据集分成两份,一份做训练集(training data),一份做测试集(testing data),如图8。一个简单的方法就是随机的将数据集平均分成两份(我们后面的章节会讲数据集划分的其他方法),我们只在训练集上学习模型的参数,然后,当我们固定参数后,我们再在测试集上看模型的效果怎么样。

图8. 将数据拆分成训练集和测试集

当模型在训练集上效果很好,但是在测试集上效果不好的时候,我们称之为过拟合(overfitting)。

当我们随机划分训练集和测试集,在训练集上训练模型,在测试集上测试并记录错误率,再随机划分数据集循环多次,我们就可以得到多个错误率,我们就可以求得这多次错误率的标准差,这个可以告诉我们模型对数据的随机变化的敏感程度。

以上是机器学习的一些基础知识,有些部分讲得比较简单,后面章节会有一些详细的讲解,但是已经可以让我们继续进行下一个有意思的模型的讲解了。这个仍然是一个线性模型,但是它能解决稍微复杂一点的数据。我们接下来要介绍的是感知机模型。

感知机(perceptron)

写一句题外话,感知机是深度学习神经网络的基础,如果想学习深度学习,首先得对感知机有一定了解。

上面讲到的决策树桩有一个明显的局限性,它只能使用一个特征。如果图2的数据集旋转45度(如图9左图),那这个模型就没有办法对数据进行划分,接下来这个模型我们就来看看怎么处理这种局限。

在目前,这个决策边界只考虑了一个特征,为了让我们的决策边界能覆盖到任意多维特征,我们可以用判别函数(discriminant function)。在n维特征中,判别函数是f(x)=\sum_{j=1}^{d}w_jx_j-t,我们还可以用一种更紧凑的方式来表达,\sum_{j=1}^{d}w_jx_j可以写成矩阵形式W^{T}X(如果有点记不清楚,可以看看线性代数的知识)。判别函数描述了一个平面方程(决策边界),如果我们在d维的数据下,边界的纬度就是d-1维。比如d=2时,它会画出一个1维的边界,是一条线,如果d=3时,它会画出一个2维的边界,是一个平面。如图9所示。

图9. 左图2维数据的边界是一条线,右图3维数据的边界是一个平面

 

如果X在这条线上,我们就会有f(x)=W^{T}X-t=\sum_{j=1}^{d}w_jx_j-t=0,对于二维空间来说,

其中m为斜率,c为截距,即x=0时y的值。从上面的公式,我们可以看出W和t是可以怎么影响决策侧边界的移动。

决策边界通常会垂直于参数向量(parameter vector)。如图10所示,图中黑色的箭头表示参数向量。在这个边界上,f(x)=0,在它的一边,f(x)>0, 在另一边,f(x)<0。参数向量总是指向f(x)>0的一边。

所以我们可以写成 if (f(x)>0): \widehat{y} = 1, else: \widehat{y} = 0。 这个看上去和上面的决策树桩没有什么差别,他们的差别在决策树桩的f(x)=(x{_1} -t),而感知机的是f(x)=W^{T}X-t

图10. 斜率,截距, 参数向量

现在我们要做是去找到W和t的合适的值,使得决策边界可以尽可能好的对数据进行划分。我们将用到感知机学习算法(Perceptron learning algorithm),我们知道决策边界是由W和t控制,那么我们就需要对W和t进行不断的更新,试着去找到它的最优值。算法是不停的迭代的,就是说我们会对数据集使用多次,每次叫一个epoch,有的地方也叫iteration。算法如图11所示:

图11. 感知机学习算法

其中\alpha是学习率。算法会每次以\alpha的步幅更新参数。我们的预测label和真实label都只能是0或者1。从上面的式子可以得到图12的表

图12. 参数更新

 

从这个表中我们可以看到当真实值和预测值都是0时,说明预测正确,参数不需要更新。当真实值是1,预测值是0时,说明f(x)<0,而f(x)=W^{T}X-t,这时W会增加\alpha x,这就会使\sum_{j=1}^{d}w_jx_j增加,当\sum_{j=1}^{d}w_jx_j超过t时,f(x)>0,则会使\widehat{y} = 1。反之亦然。

当我们以一个很大的学习率\alpha进行更新的时候,参数的变化会很大,但是学习率并不是越大越好,实际上,在很多时候,学习率取0.1是一个比较合适的值。

今天我们介绍了机器学习的基础知识以及感知机算法。学习感知机算法更多的目的在于其历史意义及作为学习后序算法的一个铺路石,而不是它的实际应用。在实际中,它有很多限制,而且只能解决线性分类问题。如果我们能保证要解决的问题是线性可分的,在有限的迭代之后感知机会收敛,如果数据是线性不可分的,那算法就会一直震荡。

接下来的文章中我们将学习另一个算法,它能解决这个问题。

  • 2
    点赞
  • 5
    收藏
    觉得还不错? 一键收藏
  • 0
    评论
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值