回归模型
前面我们说到,机器学习的两大基本任务是:分类,回归。本节我们重点探讨,机器学习中 “回归” 任务的实现。
- 什么是 “回归” (regression):它是确定几个相互依赖的变量的关系的一种统计方法。简单说,就是 已知若干样本点,寻找一个 恰当的函数,将样本点“串”在一起的过程。
- “机器学习” (machine learning)与 “回归” 的关系:一般而言,要通过纯数学的方法去寻找这个函数是及其困难的一件事,需要进行许多的尝试,寻找合适的函数。而计算机对于这种冗杂的问题,有着天然的优势,于是人们就想到通过设计合理的算法,让计算机通过迭代,自动寻找合适的函数,这就是机器学习中的回归算法。同时,计算机获得了这个函数,也就意味着它 掌握了各个变量之间的依赖关系,即具备了 由已知条件预测未知条件的能力。
- 如何利用计算机处理回归问题的流程:
- 首先,我们要有合适的数据集:一般会去网上下载。有能力和资本的可以自己去标注,当然要学习成本的,所以还是先去网上找来练吧。
- 要按一定的结构,把已知的数据存入计算机中:合理地使用各大编程语言的数据结构,把数据导入即可。我主推用 Python 学习,Python 的库众多,并设计了各式各样的数据结构(或者说 “类”),能帮我们高效地完成任务,例如 pytorch 中的 tensor,numpy 中的 narray 。
- 选择合适的模型结构:根据样本集的特点,构造合适的函数,以便计算机进行合适参数的寻找,当然你也可以让计算机自己去寻找这个合适的函数,只不过会大大增加算法的复杂度和学习成本。对于一些简单的样本集,手工构造也更加明智。
- 选择合适的代价函数:利用代价函数,评判生成的模型的好坏,让计算机不断调整模型。我们也可以根据代价函数的性质,针对性地更新我们的模型。
- 依据设计的算法编程:相关的算法有很多,有些需要阅读专业论文去研究并针对性的学习与编程。当然,凡事不要急,毕竟大部分问题的解决用不到特别高深的算法。写学会用基础方法解决,效果不好,再针对问题去学习更难的算法即可。
- 执行程序,寻找合适的函数并输出。
- 检验与评判。
线性回归问题
线性回归模型(linear regression model)是最简单的回归模型,许多复杂的回归问题也是转化为线性回归进行求解的,这种转化会在我们以后讲 “特征工程” (feature engineering)时提到。
我们先规定几个符号,便于后面的讨论,留意英文,在阅读文献时有用。
符号 | 意义 | 补充 |
---|---|---|
x x x | 输入变量(input variable) | |
y y y | 输出变量(target variable) | |
m m m | 训练集样本数(number of training example) | |
( x , y ) (x,y) (x,y) | 单个样本(single training example) | |
( x ( i ) , y ( i ) ) (x^{(i)},y^{(i)}) (x(i),y(i)) | 第 i 个样本(i_th training example) | |
f f f | 函数,模型,预测器(function, model, estimator) | |
J J J | 代价函数(cost function) | |
y ^ \hat y y^ | 预测值(prediction) |
在线性回归问题中, f f f 有着简单的形式,我们从最简单的 单变量线性回归问题(univariable linear regression)入手,先了解一下 模型,代价函数 的概念吧。
单变量线性回归问题的模型: f w , b = w x + b f_{w,b}=wx+b fw,b=wx+b
参数 | 含义 |
---|---|
w | 线性模型斜率(slope),权重(weight) |
b | 线性模型截距(intercept),偏置(bias) |
(w,b) | 参数(parameters) |
在机器学习中,确定 模型的结构 是至关重要的,这可以大大缩小我们寻找函数的复杂度。问题巧妙的变成了寻找合适的参数,让这个函数拟合样本点。我们就可以通过迭代参数的方式,逐步寻找到最合适的参数。
话虽这么说,我们要如何判断所取的参数是合适的呢?我们应该构造一个函数,他能根据估计的参数和样本,实时将当下的拟合情况映射为数字。这个函数,就是我们说的 代价函数。
单变量线性回归问题的代价函数:
e r r = y ^ ( i ) − y ( i ) J ( w , b ) = 1 m ∑ i = 1 m e r r 2 \begin{aligned} &err=\hat{y}^{(i)}-y^{(i)}\\ &J(w,b)=\frac{1}{m}\sum^m_{i=1}err^2 \end{aligned} err=y^(i)−y(i)J(w,b)=m1i=1∑merr2
这就是大名鼎鼎的 平方误差代价函数(the squared error cost function)。它随 预测值与输出变量间的偏差 增大而增大,非常好用于定量描述拟合情况。我们当然希望偏差尽可能小,所以当我们选定的参数恰好让代价函数达到 0 时,我们就说我们找到了最好的拟合参数了。但是,由于所选模型结构的限制,我们通常是无法让代价函数为 0 的。事实上,代价函数为 0 也不见得是一件好事,后续章节谈论的 过拟合(over-fitting) 现象,将重点介绍原因。
一般而言,我们从模型本身出发,寻找能让 J 最小的参数即可。有时候,由于样本过于庞大,我们还可以根据实际需求,设定一个 条件(condition),及时终止训练,尽快获得模型。以上我们在编程时具体情况,具体分析。
下一个问题是,我们要怎么去寻找合适的参数呢?穷举固非良计,这就要用上我们后面要讲的 梯度下降算法 (gradient descent)了,所谓有脑子的穷举。
不过现在我们已经对回归问题的基本处理流程有了大致了解了,可以愉快的编程了,当然,目前我们无法处理复杂的问题,全在对基本概念进行了解。
下期预告:
(代码课)
- 寻找数据集
- 学会数据的导入
- 编程实现 函数,代价函数,与迭代逻辑
(理论课)
- 梯度下降算法简介