仅用一个特征时,我们的分类模型在预测回复方面并不太准确,因此我们现在将扩展它以处理多个特征。我们可以通过改变模型、使多个特征对一封邮件的 score 都有贡献来做到这一点。我们只需决定如何做,这涉及做出一个额外的假设:

  • 某个特征值的某个特定变化,无论其他特征的值是多少,都会引起相同的 score 变化。

让我们考虑把这个假设应用于 ToLine 特征,并考虑把它从 0.0 改为 1.0。这个假设是说,无论其他特征值是多少,由这个特征值变化所导致的 score 变化总是相同的。这个假设可以在模型中这样编码:确保 ToLine 特征score 的贡献总是被加到所有其他特征的贡献之上。由于同样的论证对其他每个特征也成立,这个假设意味着一封邮件的 score 必须是各个特征各自 score 贡献之和。

因此,在我们的多特征模型(图 4.5)中,我们有一个 featureScore 数组,用于保存每封邮件中每个特征score 贡献。随后我们可以使用一个确定性求和因子把这些贡献加在一起,得到总 score。由于我们仍希望假设 4.3 对每个特征成立,一个特征featureScore 可以像之前一样定义为 featureValue 与该特征权重之积。注意,我们添加了一个跨越各特征的新,其中包含该特征的权重、特征值和特征分数。值和分数也在各邮件内,因为它们逐邮件变化,而权重在外面,因为它在所有邮件间共享。

图 4.5

图 4.5:带多个特征分类模型因子图特征内的变量对每个特征各复制一份,因此每个特征有一个单独的权重,而对每封邮件,有一个单独的 featureValuefeatureScore。每个特征featureScore 值被求和,得到每封邮件的总 score

现在我们有了一个能够把整组特征组合在一起的模型。这意味着我们可以自由地放入任意多个特征,以尽可能准确地预测用户是否会回复一封邮件。不止如此,我们还假设任何我们没有作为特征放入的东西都与预测无关。这是我们的最后一个假设:

  • 用户是否会回复一封邮件仅取决于各特征的值,而不取决于其他任何东西。

和之前一样,既然我们已经有了一个完整的模型,回头审视一下我们在构建模型过程中所做的全部假设是一个好练习。完整的假设集如表 4.3 所示。

  • 对于任何一封邮件,特征值总是可以计算出来。
  • 每封邮件都有一个关联的连续 score,当用户回复该邮件的概率较高时,score 更高。
  • 如果一封邮件的特征值变化 $x$,那么其 score 将变化 $\mathit{weight}\times x$,其中 weight 是某个固定的连续权重。
  • 一个特征的权重取正值和取负值的可能性相等。
  • 单个特征通常对回复概率有较小的影响,有时有中等的影响,偶尔有较大的影响。
  • 某个特征值的某个特定变化,无论其他特征的值是多少,都会引起相同的 score 变化。
  • 用户是否会回复一封邮件仅取决于各特征的值,而不取决于其他任何东西。

表 4.3:编码进我们分类模型的七个假设。

假设 4.1 之所以出现,是因为我们选择构建一个条件模型,因此我们需要总是以特征值为条件。

在我们的模型中,我们使用了图 4.3 的红色曲线来满足假设 4.2。若把它视为给定回复概率时计算 score 的函数,这条曲线被称为 probit 函数。它之所以这样命名,是因为 score 的单位在历史上被称为“概率单位”或“probit”[Bliss, 1934]。由于回归(regression)是从某些特征值预测一个连续值(此处为 score)的术语,整个模型被称为一个 probit 回归模型(其完全概率化的形式称为贝叶斯点机,Bayes Point Machine [Herbrich et al., 2001])。我们本可以使用其他函数来满足假设 4.2——最著名的是 logistic 函数(logistic function),它等于 $1/(1+e^{-x})$,具有非常相似的 S 形(看看图 4.6 就知道有多相似!)。如果我们使用 logistic 函数而非 probit 函数,我们就会得到一个 logistic 回归模型——一个使用极其广泛的分类器。在实践中,这两个模型极其相似——我们使用 probit 模型,是因为它让我们能够在上一章你学到的因子和思想的基础上构建。

图 4.6

图 4.6:经水平缩放以匹配图 4.3 中高斯 CDF 的 logistic 函数。两个函数的相似性意味着我们的 probit 回归模型的行为与 logistic 回归模型非常相似。

假设 4.3 与假设 4.6 合起来意味着,score 必须是特征值的一个线性函数(linear function)。例如,如果我们有两个特征score 就会是 $\mathit{weight}_1 \times \mathit{featureValue}_1 + \mathit{weight}_2 \times \mathit{featureValue}_2$。我们使用“线性”一词,是因为如果我们把第一个特征值对第二个作图,那么具有相同 score 的点会构成一条直线。任何基于线性函数分类器都被称为线性分类器

假设 4.4 和假设 4.5 是关于特征如何影响预测概率的合理陈述。然而,假设 4.6 对分类器能学到什么施加了一些微妙但重要的限制,值得理解。这些在专栏 4.2 中作了探讨和解释。

专栏 4.2 特征如何组合在一起

假设 4.6 是关于特征如何组合在一起的一个相当强的假设。为研究这个假设的效果,考虑一个双特征模型,包含既有的 ToLine 特征和一个称为 FromManager 的新特征。这个新的 FromManager 特征在发件人是用户的经理时取值 1.0,否则取值 0.0。假设某位用户会回复来自其经理的 80% 的邮件,但仅当他在收件人栏中时才如此。如果他不在收件人栏中,那么他就把它当作任何其他他在抄送栏中的邮件来对待。为分析这样一位用户,我们将创建一个合成数据集来表示我们这位假想用户的邮件数据。对于 FromManager 为零的邮件,我们取表 4.2b 中 User35CB8E5 的数据集。然后我们添加 500 封 FromManager 为 1 的新合成邮件,使得用户恰好有一半时间在收件人栏中,从而得到下表中的数据集。此表的最后一列给出了在此数据上训练的模型对每种特征组合的预测概率

特征分开分析

预测的回复概率与实际回复比例之间有相当大的差异。例如,对于来自用户经理、且用户在收件人栏中的邮件,预测概率太低了:是 64.6% 而非 80%。类似地,对于来自用户经理、但用户不在收件人栏中的邮件,预测又太高了(是 10.8% 而非 0.8%)。这些不准确的预测之所以出现,是因为不存在任何一组 weightthreshold 变量的设定能够使预测概率与实际回复比例相符。假设 4.6 说 FromManager 引起的 score 变化在 ToLine 为 1.0 时必须与 ToLine 为 0.0 时相同。但是,要与数据相符,我们需要 score 变化在 ToLine 为 1.0 时比为 0.0 时更大。

与其改变模型来去掉假设 4.6,我们可以通过添加一个仅当 ToLine 和 FromManager 都为 1.0 时才为 1.0 的新特征(即两个特征的“与”)来绕过这个限制。这个新特征将有它自己关联的权重,这意味着现在对于经理邮件,用户在收件人栏中时可以有一个不同于不在收件人栏中时的 score。如果我们训练这样一个三特征模型,我们得到这里所示的新预测:

特征复合分析

现在预测概率在每种情形下都与实际回复比例接近得多,这意味着新模型比旧模型做出更准确的预测。任何剩余的差异都归因于假设 4.5,它控制着任何单个特征的效果大小。

这个问题可以通过总是使用一部分特征值的“与”来避免。这正是决策树模型所采取的做法,这是一种非线性分类器,我们将在第 8.2 节中讨论。在训练决策树时,我们实际上是在搜索像上面那样能带来良好预测的特征组合。遗憾的是,决策树受另一个问题困扰:在做预测时许多特征的值被忽略了。对这两个问题的一个流行的解法是通过一个线性模型把若干决策树组合成一个决策森林——这种做法也在第 8.2 节中讨论。

最后,假设 4.7 陈述了我们的特征集包含了与预测用户是否会回复一封邮件相关的所有信息。我们将在下一节看到如何开发一个尽可能贴近地满足这个假设的特征集,但首先我们需要更好地理解特征集所扮演的角色。

特征是模型的一部分

要使用我们的分类模型,我们需要选择一组特征来变换数据,使其更好地符合表 4.3模型假设。看待这一点的另一种方式是:特征集分类模型合起来的假设必须在数据中成立。从基于模型的机器学习的视角看,这意味着特征集与分类模型合起来构成了一个更大的整体模型。在这种看待方式下,特征集是这个整体模型中通常容易更改的部分(通过更改特征计算代码),而分类部分则是通常难以更改的部分(例如,如果你使用现成的分类器软件,没有简单的方法来更改它)。

我们可以通过把特征计算包含进图中,在一个因子图中表示这个整体合并模型,如图 4.7 所示。email 变量保存关于邮件本身的所有数据(你可以把它想成一个邮件对象)。特征计算表现为特征内的确定性 ComputeFeature 因子,每个这样的因子在给定 email 时计算该特征特征值。注意,尽管只有 email 被显示为已观测(带阴影),featureValue 实际上也是被观测的,因为它是从 email 确定性地计算出来的。

图 4.7

图 4.7:一个同时包含特征计算和分类模型因子图ComputeFeature 因子以当前特征 $f$ 和所考虑的 email 为参数,计算特征 $f$ 对该邮件的值。

如果特征集确实是模型的一部分,那么我们在设计特征集时就必须采用与设计模型相同的方法。这意味着我们需要可视化并理解数据、意识到正在被表示的假设、指定评估指标和成功标准,并反复优化和改进特征集直到满足成功标准(换句话说,我们需要遵循机器学习生命周期)。这正是我们接下来将遵循的过程。

本页引入概念回顾

回归(regression):给定某个特定数据项(例如一栋房子或一座城市)的属性,预测一个实值量(例如房价或温度)的任务。在回归中,目标是对模型中的一个连续变量做出预测。

logistic 函数(logistic function):函数 $f(x) = 1/(1+e^{-x})$,常用于把无界的连续值变换成 0 到 1 之间的连续值。它具有与累积高斯相似的 S 形(见图 4.6)。

标准 logistic 函数

线性函数(linear function):一个或多个变量的任何函数 $f(x_1,\ldots,x_k)$,只要它可以写成 $f(x_1,\ldots,x_k) = a + b_1 x_1 + \ldots + b_k x_k$ 的形式。因此单个变量的线性函数可以写成 $f(x) = a + bx$。对这个方程把 $f(x)$ 对 $x$ 作图会给出一条直线,这就是为什么用“线性”一词来描述这一族函数。

参考文献

[Bliss, 1934] Bliss, C. I. (1934). The Method of Probits. Science, 79(2037):38–39.

[Herbrich et al., 2001] Herbrich, R., Graepel, T., and Campbell, C. (2001). Bayes Point Machines. Journal of Machine Learning Research, 1:245–279.


下一节:设计特征集