什么是机器学习

Jul 15, 2015   #机器学习  #线性模型 

机器学习是一门综合学科,用到了统计学、数学优化理论、计算机科学等学科的知识, 其目标是使机器能够通过学习来提高其性能。具体概念请先看完下面这个例子。

从一个例子讲起

夏天到了,如何挑选一个美味可口的西瓜可能是大多数人都想过的问题。我听到过的 方法包括拍一拍听声音、看西瓜皮的纹理等等。现在,我们考虑,如何让计算机来给 西瓜打分,假设分数从0-100,越甜分数越高。

如果计算机能够很好的完成这个任务,以后卖西瓜的可以直接标在西瓜上标上甜度, 以及预测的准确程度,我们挑西瓜就省事多了,而瓜农也可以按甜度来定价。

现在,任务的输出已经很明确了,即西瓜的甜度,以及预测的准确程度。任务的输入 是什么呢?

确定输入的过程,即特征提取。机器学习领域,我们通常把输入称为特征。特征提取 就是从原始数据中,提取有意义的指标。例如,现在,原始数据就是一个西瓜,我们 可以从中提取出的特征有:半径、品种、纹理密度、产地、质量、生长周期、 摘出了多久(按天计)、是否施肥。

可以看出,这些特征中,有连续型变量,如半径。也有离散型变量,如产地、品种等。 这么多特征,选哪些使用呢? 特征并不是越多越好,理想情况,当然是使用较少的特征 同时达到较高的性能。因此,需要进行特征选择。特征选择的目标是提出对预测任务 贡献不大的特征,避免其影响预测结果,进而提高预测性能。

输入与输出都已经确定了,我们的基本假设是:输入与输出之间存在一定的关系。 下一步需要确定关系是何种类型。例如线性模型,假设输出是输入的线性组合, 因此,只要求得线性组合的系数,就找到了输入与输出的关系。诸如此类的关于关系 类型的假设,不一定是对的,但有一些假设是有用的,即我们确实可以获得不错的 预测效果。

假设我们选定了线性模型作为我们的假设,如何确定模型的参数呢?最朴素的方法,请 专家给出参数。当然,这样做,主观因素太强,效果不能保证,对复杂的问题,如上百 个特征,专家可能也无能为力。

此时,机器学习方法就有了优势。机器学习,即通过对历史数据的学习,得到关系模型 的参数。至于如何从历史数据中学习,就是后文要讲的。

由于需要使用历史数据,因此,我们需要拿到若干条样本数据。即买1000个西瓜, 测量到上面提到的特征,再把西瓜切开,测量其甜度。这样1000条记录,构成了样本集。

我们把样本集分为两部分,一部分用于学习模型参数,另一部分用于测试习得模型的预测 准确度,分别称为训练集测试集

模型在训练集上训练完成后,通过测试集得到预测准确程度。如果准确程度符合预期, 那我们的任务就圆满完成了。

线性回归模型

通过上面的例子,相信你已经对机器学习有了简单的了解。有一点必须清楚的是,机器学习 并不是银弹,并不一定能解决你的问题。如果输入与输出之间没有潜在的关系,再好的 学习算法也无能为力。

基本概念

我们在此处将上面的例子中提到的概念,进行形式化。

一般而言,我们将多个特征(假设p个)组合为一个特征向量,用列向量$\mathscr{x}$表示: $\mathscr{x}=[x_1,x_2,\ldots,x_p]$,维度为p。

输出变量,我们一般称为目标变量,用$y$表示。(目标变量,也可以是高维的)

样本集中的特征集合,我们使用矩阵$X$表示(Design Matrix),假设有n个样本,则$X$为nxp的矩阵:

$$ X = \left[ \begin{array}{c} \mathscr{x}_1^T \\ \mathscr{x}_2^T \\ \vdots \\ \mathscr{x}_p^T \\ \end{array} \right] $$

$X$中每一行特征向量,对应的目标变量, 组成列向量$\mathscr{y}=[y_1,y_2,\ldots,y_n]^T$

线性模型假设

线性回归模型,假设特征向量与目标变量之间存在着线性组合关系,即 $$ y = \omega^T\mathscr{x} $$ 其中$\omega$为线性组合的系数,也是线性模型的参数。 由此关系,我们可以在训练集上得到如下等式

$$ \mathscr{y} = X\omega $$

如果我们可以找到满足此等式的参数,我们有理由相信,该系数对其他的未知数据应该 也是满足的。

可惜,上述等式可能无解($X$为奇异矩阵时)。

没办法,只能退而求其次,我们给出一个衡量标准,根据标准找出一个最好的系数来当 模型参数。

衡量标准,我们一般称为损失函数,选取带来损失最小的系数,当作模型参数。

线性回归模型,选取的损失函数为:

$$ {\lVert}X\omega - \mathscr{y}{\rVert}_2 $$

即所有样本的预测值减去实际值的平方和的和。

此时,问题转化为一个优化问题,即求上述函数的最小值。

由于此损失函数,是二阶可导的凸函数,可以断定,其有且仅有一个最小值。

对损失函数求导

$$ \begin{align} \partial{\lVert}X\omega - \mathscr{y}{\rVert}_2 \over \partial{\omega} & = \frac{\partial{(X\omega - \mathscr{y})^T(X\omega - \mathscr{y})}}{\partial{\omega}} \\ & = X^TX\omega - X^T\mathscr{y} \\ & = 0 \end{align} $$

问题转化为一个线性方程组的求解问题,我们可以使用一些现有的软件包(如LAPACK) 来计算出问题的解。

求出模型参数之后,即完成了学习过程。我们在训练集上,使用习得的参数,使用预先 确定的标准,计算预测的准确率。(对于前面预测西瓜甜度的问题,我们可以计算预测 误差的百分比的平均值)

以上,我们完成了一个简单的机器学习任务。

总结

此处,讲一下我对机器学习的理解,其核心内容包括:

  1. 根据对领域问题的理解,提出假设,建立模型。
  2. 根据模型,将问题转化为优化问题。
  3. 求解优化问题,即模型的学习。

当然,上面只是模型的确定与模型学习的过程。机器学习还包括许多其他内容:

特征提取,也称为特征工程。很多时候,特征的好坏直接决定学习算法的性能,即 特征决定了学习算法的上限。因此,在实际问题中,一个机器学习任务,可能最重要 的一部分是对实际问题的理解,从而提取出好的特征。

模型选择。机器学习算法与模型,多种多样,选择何种模型,对学习的效果也有很大 的影响。