diff --git a/docs/4.md b/docs/4.md index 334f199981d517bc2a19ce78f679869d22a515af..28398e50b81024357b597b7629990a366753e3dd 100644 --- a/docs/4.md +++ b/docs/4.md @@ -13,7 +13,7 @@ | 线性回归 | 是 | 是 | 否 | 回归 | | 逻辑斯蒂回归 | 否 | 是 | 否 | 分类 | | 决策树 | 否 | 一些是 | 是 | 分类,回归 | -| RuleFit | 是 | 否 | 是 | 分类,回归 | +| 规则拟合 | 是 | 否 | 是 | 分类,回归 | | 朴素贝叶斯 | 否 | 是 | 否 | 分类 | | K近邻 | 否 | 否 | 否 | 分类,回归 | @@ -253,7 +253,7 @@ $$ 特征向量的L1范数术语||\boldsymbol{\beta}||_1导致对大权重的惩罚。由于使用了 L1 范数,许多权重的估计值为 0,而其他权重的估计值则缩水。参数 lambda(λ) 控制正则化效果的强度,通常通过交叉验证进行调整。尤其是当 lambda 很大时,许多权重变为 0。特征权重可以可视化为惩罚项 lambda 的函数。每个特征权重由下图中的曲线表示。 -![](https://christophm.github.io/interpretable-ml-book/images/lasso-path-1.png) +![](https://christophm.github.io/interpretable-ml-book/images/Lasso-path-1.png) 图 4.4:随着权重惩罚的增加,越来越少的特征接受非零权重估计。这些曲线也称为正则化路径。图上的数字是非零权重的数目。 @@ -663,7 +663,7 @@ $$ 对于两个数值特征,交互柱更容易构造:我们简单地将两个数值特征相乘。 -有一些方法可以自动检测和添加交互术语。其中一个可以在[RuleFit chapter](https://christophm.github.io/interpretable-ml-book/rulefit.html#rulefit)中找到。规则拟合算法首先挖掘交互项,然后估计包含交互的线性回归模型。 +有一些方法可以自动检测和添加交互术语。其中一个可以在[RuleFit chapter](https://christophm.github.io/interpretable-ml-book/RuleFit.html#RuleFit)中找到。规则拟合算法首先挖掘交互项,然后估计包含交互的线性回归模型。 **例子** @@ -707,7 +707,7 @@ $$ 在详细介绍每种方法之前,让我们先从一个示例开始,说明这三种方法。我使用[租赁自行车数据集](https://christophm.github.io/interpretable-ml-book/bike-data.html#bike-data)并训练了一个仅具有温度特征的线性模型来预测出租自行车的数量。下图显示了估算的斜率:标准线性模型、转换温度的线性模型(对数)、将温度视为分类特征并使用回归样条(GAM)的线性模型。 -![](https://christophm.github.io/interpretable-ml-book/images/nonlinear-effects-1.png) +![Predicting the number of rented bicycles using only the temperature feature. A linear model (top left) does not fit the data well. One solution is to transform the feature with e.g. the logarithm (top right), categorize it (bottom left), which is usually a bad decision, or use Generalized Additive Models that can automatically fit a smooth curve for temperature (bottom right).](https://christophm.github.io/interpretable-ml-book/images/nonlinear-effects-1.png) 图 4.13:仅使用温度特征预测租用自行车的数量。线性模型(左上角)不适合数据。一种解决方案是用对数(右上)、分类(左下)来转换特征,这通常是一个错误的决定,或者使用可自动拟合平滑温度曲线(右下)的广义加法模型。 @@ -717,143 +717,159 @@ $$ **特征分类** -实现非线性效果的另一种可能性是离散化特征,将其转化为分类特征。例如,您可以将温度特征切割为 20 个间隔,级别为[-10,-5), +实现非线性效果的另一种可能性是离散化特征,将其转化为分类特征。例如,您可以将温度特征切割为 20 个间隔,级别为[-10,-5),[-5,0)等等。当使用分类温度而不是连续温度时,线性模型将估计阶跃函数,因为每个级别都有自己的估计。这种方法的问题在于,它需要更多的数据,更容易过拟合,而且不清楚如何有意义地离散特征(等距间隔或分位数)?有多少个间隔?)只有在有很强的理由的情况下,我才会使用离散化。例如,使模型与另一项研究相比较。 -[-5,0),…等等。当使用分类温度而不是连续温度时,线性模型将估计阶跃函数,因为每个级别都有自己的估计。这种方法的问题在于,它需要更多的数据,更容易过拟合,而且不清楚如何有意义地离散特征(等距间隔或分位数)?有多少个间隔?)只有在有很强的理由的情况下,我才会使用离散化。例如,使模型与另一项研究相比较。 +**广义加法模型(GAMs)** -**广义加法模型** - -为什么不“简单”地允许(广义)线性模型学习非线性关系呢?这就是游戏背后的动机。GAM 放宽了这种限制,即关系必须是一个简单的加权和,而假定结果可以由每个特征的任意函数的和建模。在数学上,gam 中的关系如下: - -\[g(e_y(y_x))=\beta_+f_1(x_1)+f_2(x_2)+\ldots+f_p(x_p)\] - -该公式与 GLM 公式类似,不同之处在于线性项\(\beta_j_x_j)被更灵活的函数\(f_j(x_j))取代。gam 的核心仍然是特征效果的总和,但是您可以选择允许某些特征和输出之间存在非线性关系。线性效应也包含在框架中,因为对于要线性处理的特征,您可以将它们的形式限制为(x_j(x_j))仅采用(x_j_β_j\)。 +为什么不“简单”地允许(广义)线性模型学习非线性关系呢?这就是GAMs背后的动机。GAM 放宽了这种限制,即关系必须是一个简单的加权和,而假定结果可以由每个特征的任意函数的和建模。在数学上,gam中的关系如下: +$$ +g(E_Y(y|x))=\beta_0+f_1(x_{1})+f_2(x_{2})+\ldots+f_p(x_{p}) +$$ +该公式与 GLM 公式类似,不同之处在于线性项 β_jx_j被更灵活的函数f_j(x_j)取代。GAM的核心仍然是特征效果的总和,但是您可以选择允许某些特征和输出之间存在非线性关系。线性效应也包含在框架中,因为对于要线性处理的特征,您可以将它们的形式限制为f_j(x_j)仅采用x_jβ_j。 -最大的问题是如何学习非线性函数。答案称为“样条函数”或“样条函数”。样条函数是可以组合起来以近似任意函数的函数。有点像堆放乐高积木来建造更复杂的东西。定义这些样条函数的方法有很多种,令人困惑。如果您有兴趣了解更多关于定义样条曲线的所有方法,我希望您在旅途中好运。我不想在这里讨论细节,我只想建立一个直觉。对于理解样条曲线,我个人最大的帮助是可视化单个样条函数,并研究如何修改数据矩阵。例如,为了用样条曲线对温度进行建模,我们从数据中删除了温度特征,并将其替换为 4 列,每列表示一个样条曲线函数。通常你会有更多的样条函数,我只是为了说明的目的减少了数量。这些新样条线特征的每个实例的值取决于实例的温度值。加上所有的线性效应,GAM 还可以估计这些样条权重。gams 还为权重引入了一个惩罚术语,以使它们接近零。这有效地降低了花键的灵活性,并减少了过拟合。然后通过交叉验证来调整通常用于控制曲线灵活性的平滑度参数。忽略惩罚项,样条曲线非线性建模是一种奇特的特征工程。 +最大的问题是如何学习非线性函数。答案称为“样条”或“样条函数”。样条函数是可以组合起来以近似任意函数的函数。有点像堆放乐高积木来建造更复杂的东西。定义这些样条函数的方法有很多种,令人困惑。如果您有兴趣了解更多关于定义样条曲线的所有方法,我希望您在旅途中好运。我不想在这里讨论细节,我只想建立一个直觉。对于理解样条曲线,我个人最大的帮助是可视化单个样条函数,并研究如何修改数据矩阵。例如,为了用样条曲线对温度进行建模,我们从数据中删除了温度特征,并将其替换为 4 列,每列表示一个样条曲线函数。通常你会有更多的样条函数,我只是为了说明的目的减少了数量。这些新样条线特征的每个实例的值取决于实例的温度值。加上所有的线性效应,GAM 还可以估计这些样条权重。GAMs 还为权重引入了一个惩罚术语,以使它们接近零。这有效地降低了花键的灵活性,并减少了过拟合。然后通过交叉验证来调整通常用于控制曲线灵活性的平滑度参数。忽略惩罚项,样条曲线非线性建模是一种奇特的特征工程。 在我们仅使用温度预测 GAM 自行车数量的示例中,模型特征矩阵如下所示: -**(截距)s(温度).1s(温度).2s(温度).3s(温度).4** - -| 1 个 | 0.93 分 | -0.14 分 | 0.21 分 | -0.83 分 | -| ---- | ------ | ------- | ------- | ------- | -| 1 个 | 0.83 分 | -0.27 分 | 0.27 分 | -0.72 分 | -| 1 个 | 1.32 条 | 0.71 分 | -0.39 分 | -1.63 条 | -| 1 个 | 1.32 条 | 0.70 分 | -0.38 分 | -1.61 条 | -| 1 个 | 1.29 条 | 0.58 分 | -0.26 分 | -1.47 条 | -| 1 个 | 1.32 条 | 0.68 分 | -0.36 分 | -1.59 条 | +| (Intercept) | s(temp).1 | s(temp).2 | s(temp).3 | s(temp).4 | +| ----------- | --------- | --------- | --------- | --------- | +| 1 | 0.93 | -0.14 | 0.21 | -0.83 | +| 1 | 0.83 | -0.27 | 0.27 | -0.72 | +| 1 | 1.32 | 0.71 | -0.39 | -1.63 | +| 1 | 1.32 | 0.70 | -0.38 | -1.61 | +| 1 | 1.29 | 0.58 | -0.26 | -1.47 | +| 1 | 1.32 | 0.68 | -0.36 | -1.59 | 每一行表示数据中的单个实例(一天)。每个样条线列包含特定温度值下样条线函数的值。下图显示了这些样条函数的外观: +![To smoothly model the temperature effect, we use 4 spline functions. Each temperature value is mapped to (here) 4 spline values. If an instance has a temperature of 30 °C, the value for the first spline feature is -1, for the second 0.7, for the third -0.8 and for the 4th 1.7.](https://christophm.github.io/interpretable-ml-book/images/splines-1.png) + 图 4.14:为了平滑地模拟温度效应,我们使用 4 个样条函数。每个温度值映射到(此处)4 个样条曲线值。如果实例的温度为 30°C,则第一个样条曲线特征的值为-1,第二个为 0.7,第三个为-0.8,第四个为 1.7。 GAM 为每个温度样条线特征指定权重: -重量(截距)4504.35 s(温度)1-989.34 s(温度)2 740.08 s(温度)3 2309.84 s(温度)4 558.27 +| | weight | +| ----------- | ------- | +| (Intercept) | 4504.35 | +| s(temp).1 | -989.34 | +| s(temp).2 | 740.08 | +| s(temp).3 | 2309.84 | +| s(temp).4 | 558.27 | 而实际曲线是由用估计权重加权的样条函数之和得到的,如下所示: -图 4.15:用于预测租用自行车数量的温度的 gam 特征效应(温度是唯一的特征)。 +![GAM feature effect of the temperature for predicting the number of rented bikes (temperature used as the only feature).](https://christophm.github.io/interpretable-ml-book/images/splines-curve-1.png) + +图 4.15:用于预测租用自行车数量的温度的 GAM 特征效应(温度是唯一的特征)。 平滑效果的解释需要对拟合曲线进行目视检查。样条曲线通常以均值预测为中心,因此曲线上的一个点与均值预测是不同的。例如,在 0 摄氏度时,预测的自行车数量比平均预测值低 3000 辆。 ### 4.3.4 优势 -线性模型的所有这些扩展本身就是一个宇宙。无论您面对的线性模型问题是什么,您可能会找到一个扩展来修复它。 +线性模型的所有这些扩展本身就是一个宇宙。无论您面对的线性模型问题是什么,**您可能会找到一个扩展来修复它**。 -大多数方法已经使用了几十年。例如,GAM 已经有将近 30 年的历史了。许多来自工业界的研究人员和实践者对线性模型非常有经验,并且这些方法在许多社区被认为是建模的现状。 +大多数方法已经使用了几十年。例如,GAM 已经有将近 30 年的历史了。许多来自工业界的研究人员和实践者对线性模型非常**有经验**,并且这些方法在许多社区**被认为是建模的现状**。 除了进行预测之外,您还可以使用模型进行推理,得出关于数据的结论——假设模型假设没有违反。你可以得到权重的置信区间,显著性检验,预测区间等等。 -统计软件通常有很好的接口来适应 GLMS、GAMS 和更特殊的线性模型。 +统计软件通常有很好的接口来适应 GLMs、GAMs和更特殊的线性模型。 -许多机器学习模型的不透明性源于 1)缺乏稀疏性,这意味着使用了许多特征;2)以非线性方式处理的特征,这意味着您需要一个以上的权重来描述效果;3)特征之间交互的建模锿。假设线性模型具有很高的可解释性,但通常是在不真实的情况下,本章所述的扩展提供了一种很好的方法,以实现平稳过渡到更灵活的模型,同时保留一些可解释性。 +许多机器学习模型的不透明性源于 1)缺乏稀疏性,这意味着使用了许多特征;2)以非线性方式处理的特征,这意味着您需要一个以上的权重来描述效果;3)特征之间交互的建模锿。假设线性模型具有很高的可解释性,但通常是在不真实的情况下,本章所述的扩展提供了一种很好的方法,以实现**平稳过渡到更灵活的模型**,同时保留一些可解释性。 ### 4.3.5 缺点 -作为优势,我说过线性模型生活在自己的宇宙中。扩展简单线性模型的方法太多了,不仅仅是初学者。事实上,有多个平行的宇宙,因为许多研究者和实践者的社区都有他们自己的名字来命名那些或多或少做相同事情的方法,这可能非常令人困惑。 +作为优势,我说过线性模型生活在自己的宇宙中。**扩展简单线性模型的方法太多了**,不仅仅是初学者。事实上,有多个平行的宇宙,因为许多研究者和实践者的社区都有他们自己的名字来命名那些或多或少做相同事情的方法,这可能非常令人困惑。 -线性模型的大多数修改都会使模型的解释性变差。非同一性函数的任何链接函数(在 GLM 中)都会使解释复杂化;交互也会使解释复杂化;非线性特征效应要么不太直观(如对数转换),要么不能再由单个数字(如样条函数)来概括。 +线性模型的大多数修改都会使模型的**解释性变差**。非同一性函数的任何链接函数(在 GLM 中)都会使解释复杂化;交互也会使解释复杂化;非线性特征效应要么不太直观(如对数转换),要么不能再由单个数字(如样条函数)来概括。 -GLMS、GAMS 等依赖于有关数据生成过程的假设。如果违反了这些规定,则对权重的解释将不再有效。 +GLMs、GAMs 等**依赖于**有关数据生成过程的**假设**。如果违反了这些规定,则对权重的解释将不再有效。 在许多情况下,随机森林或梯度树增强等基于树的集合的性能比最复杂的线性模型要好。这部分是我自己的经验,也部分是来自 kaggle.com 等平台上的获奖模型的观察结果。 ### 4.3.6 软件 -本章中的所有示例都是使用 R 语言创建的。对于 gam,使用了 gam 包,但还有许多其他包。R 有大量的包来扩展线性回归模型。R 是任何其他分析语言都无法超越的,它是线性回归模型扩展的每一个可想象的扩展的所在。您将发现在 python 中实现 gams(例如,但这些实现还不够成熟)。 +本章中的所有示例都是使用 R 语言创建的。对于 GAMs,使用了 `gam` 包,但还有许多其他包。R 有大量的包来扩展线性回归模型。R 是任何其他分析语言都无法超越的,它是线性回归模型扩展的每一个可想象的扩展的所在。您将发现在 python 中实现 gams(例如: [pyGAM](https://github.com/dswah/pyGAM)),但这些实现还不够成熟。 ### 4.3.7 进一步扩展 如前所述,这里列出了您可能遇到的线性模型问题,以及此问题的解决方案名称,您可以将其复制并粘贴到您最喜爱的搜索引擎中。 -我的数据违反了独立和相同分布(IID)的假设。 +- 我的数据违反了独立同分布(iid)的假设。 + + 例如,对同一患者重复测量。 -例如,对同一患者重复测量。 + 搜索**混合模型**或**广义估计方程**。 -搜索混合模型或广义估计方程。 +- 我的模型有异方差错误。 -我的模型有异方差错误。 + 例如,在预测房屋价值时,昂贵房屋的模型误差通常较高,这违背了线性模型的同方差性。 -例如,在预测房屋价值时,昂贵房屋的模型误差通常较高,这违背了线性模型的同方差性。寻找稳健回归。 + 寻找稳健回归。 -我有强烈影响我的模型的异常值。寻找稳健回归。 +- 我有强烈影响我的模型的异常值。 -我想预测事件发生前的时间。 + 寻找稳健回归。 -事件到事件的数据通常带有经过审查的度量,这意味着在某些情况下没有足够的时间来观察事件。例如,一家公司想预测其制冰机的故障,但只有两年的数据。一些机器两年后仍然完好无损,但可能会在以后失效。 +- 我想预测事件发生前的时间。 -搜索参数生存模型,Cox 回归,生存分析。 + 事件到事件的数据通常带有经过审查的度量,这意味着在某些情况下没有足够的时间来观察事件。例如,一家公司想预测其制冰机的故障,但只有两年的数据。一些机器两年后仍然完好无损,但可能会在以后失效。 -我要预测的结果是一个类别。 + 搜索**参数生存模型,cox 回归,生存分析**。 -如果结果有两个类别,请使用 A,它为类别建模概率。 +- 我要预测的结果是一个类别。 -如果你有更多的类别,搜索多项式回归。逻辑斯蒂回归和多项式回归都是 GLMS。 + 如果结果有两个类别,请使用逻辑斯蒂回归模型](https://christophm.github.io/interpretable-ml-book/logistic.html#logistic),它为类别建模概率。 -我想预测有序的类别。 + 如果你有更多的类别,搜索**多项式回归**。 -例如,学校成绩。 + 逻辑斯蒂回归和多项式回归都是 GLMs。 -搜索比例优势模型。 +- 我想预测有序的类别。 -我的结果是一个计数(就像一个家庭中孩子的数量)。 + 例如,学校成绩。 -寻找泊松回归。 + 搜索**比例优势模型**。 -泊松模型也是一个 GLM。您可能还遇到一个问题,即 0 的计数值非常频繁。 +- 我的结果是一个计数(就像一个家庭中孩子的数量)。 -寻找零膨胀泊松回归,跨栏模型。 + 寻找**泊松回归**。 -我不确定模型中需要包含哪些特征才能得出正确的因果结论。例如,我想知道药物对血压的影响。这种药物对某些血量有直接影响,这种血量会影响结果。我应该将血量纳入回归模型吗? + 泊松模型也是一个 GLM。您可能还遇到一个问题,即 0 的计数值非常频繁。 -寻找因果推理,调解分析。 + 寻找**零膨胀泊松回归,跨栏模型**。 -我缺少数据。 +- 我不确定模型中需要包含哪些特征才能得出正确的因果结论。例如,我想知道药物对血压的影响。这种药物对某些血量有直接影响,这种血量会影响结果。我应该将血量纳入回归模型吗? -寻找多重插补。 + 寻找**因果推理,调解分析**。 -我想把先前的知识整合到我的模型中。寻找贝叶斯推理。 +- 我缺少数据。 -我最近有点情绪低落。 + 寻找**多重插补**。 -搜索“亚马逊 Alexa Gone Wild!!!!从头到尾的完整版本”。 + 我想把先前的知识整合到我的模型中。寻找**贝叶斯推理**。 + +- 我最近有点情绪低落。 + + 搜索“**Amazon Alexa Gone Wild!!!! 从头到尾的完整版本**”。 ## 4.4 决策树 -线性回归和逻辑斯蒂回归模型在特征与结果之间的关系为非线性或特征相互作用的情况下失败。是时候照亮决策树了!基于树的模型根据特征中的某些截止值多次分割数据。通过拆分,可以创建数据集的不同子集,每个实例都属于一个子集。最后的子集称为终端或叶节点,中间的子集称为内部节点或拆分节点。为了预测每个叶节点的结果,使用该节点中训练数据的平均结果。树木可用于分类和回归。 +线性回归和逻辑斯蒂回归模型在特征与结果之间的关系为非线性或特征相互作用的情况下失败。是时候照亮决策树了!基于树的模型根据特征中的某些截止值多次分割数据。通过拆分,可以创建数据集的不同子集,每个实例都属于一个子集。最后的子集称为终端或叶F节点,中间的子集称为内部节点或拆分节点。为了预测每个叶节点的结果,使用该节点中训练数据的平均结果。树木可用于分类和回归。 -有多种算法可以生长一棵树。它们在树的可能结构(例如每个节点的拆分数量)、如何查找拆分的标准、何时停止拆分以及如何估计叶节点内的简单模型等方面存在差异。分类和回归树(cart)算法可能是最流行的树归纳算法。我们将关注 Cart,但对于大多数其他树类型来说,解释是类似的。我推荐《统计学习要素》(Friedman、Hastie 和 Tibshirani,2009 年)一书来更详细地介绍 Cart。 +有多种算法可以生长一棵树。它们在树的可能结构(例如每个节点的拆分数量)、如何查找拆分的标准、何时停止拆分以及如何估计叶节点内的简单模型等方面存在差异。分类和回归树(CART)算法可能是最流行的树归纳算法。我们将关注 Cart,但对于大多数其他树类型来说,解释是类似的。我推荐《统计学习要素》(Friedman、Hastie 和 Tibshirani,2009 年)一书来更详细地介绍CART 。 + +![Decision tree with artificial data. Instances with a value greater than 3 for feature x1 end up in node 5. All other instances are assigned to node 3 or node 4, depending on whether values of feature x2 exceed 1.](https://christophm.github.io/interpretable-ml-book/images/tree-artificial-1.png) 图 4.16:带有人工数据的决策树。特征 x1 的值大于 3 的实例将在节点 5 中结束。所有其他实例都分配给节点 3 或节点 4,这取决于特征 x2 的值是否超过 1。 下面的公式描述了结果 Y 和特征 X 之间的关系。 -\[\hat y=\hat f(x)=\sum m=1 ^mc i x\in r \] - -每个实例正好属于一个叶节点(=subset\(r_m\)。\(i x)是标识函数,如果\(x\)在子集\(r_m\)中,如果一个实例属于叶节点(r_l),则预测结果为\(\hat y=c_l\),其中\(c_l\)是叶节点(r_l\)中所有训练实例的平均值。 +$$ +\hat{y}=\hat{f}(x)=\sum_{m=1}^Mc_m{}I\{x\in{}R_m\} +$$ +每个实例正好属于一个叶节点 (=subset R_m)。I{x∈Rm}是标识函数,如果x在子集R_m 中,如果一个实例属于叶节点R_l,则预测结果为\hat{y}=c_l,其中\(c_l\)是叶节点R_l中所有训练实例的平均值。 -但是子集是从哪里来的呢?这很简单:Cart 采用一个特征,并确定回归任务的哪个临界点将 y 的方差最小化,或者分类任务的 y 类分布的基尼指数最小化。方差告诉我们节点中的 y 值围绕其平均值分布的程度。基尼指数告诉我们一个节点是如何“不纯”的,例如,如果所有的类都有相同的频率,那么这个节点就是不纯的,如果只有一个类存在,那么它就是最大的纯的。当节点中的数据点具有非常相似的 y 值时,方差和基尼指数最小化。因此,最佳截止点使两个结果子集在目标结果方面尽可能不同。对于分类特征,该算法尝试通过尝试不同类别分组来创建子集。在确定每个特征的最佳截止值后,算法选择将导致方差或基尼指数最佳分割的特征,并将此分割添加到树中。该算法继续此搜索并在两个新节点中递归拆分,直到达到停止条件。可能的条件是:拆分前必须在节点中的最小实例数,或必须在终端节点中的最小实例数。 +但是子集是从哪里来的呢?这很简单:CART采用一个特征,并确定回归任务的哪个临界点将 y 的方差最小化,或者分类任务的 y 类分布的基尼指数最小化。方差告诉我们节点中的 y 值围绕其平均值分布的程度。基尼指数告诉我们一个节点是如何“不纯”的,例如,如果所有的类都有相同的频率,那么这个节点就是不纯的,如果只有一个类存在,那么它就是最大的纯的。当节点中的数据点具有非常相似的 y 值时,方差和基尼指数最小化。因此,最佳截止点使两个结果子集在目标结果方面尽可能不同。对于分类特征,该算法尝试通过尝试不同类别分组来创建子集。在确定每个特征的最佳截止值后,算法选择将导致方差或基尼指数最佳分割的特征,并将此分割添加到树中。该算法继续此搜索并在两个新节点中递归拆分,直到达到停止条件。可能的条件是:拆分前必须在节点中的最小实例数,或必须在终端节点中的最小实例数。 ### 4.4.1 解释 @@ -871,18 +887,23 @@ GLMS、GAMS 等依赖于有关数据生成过程的假设。如果违反了这 决策树中的根节点是我们的起点。如果我们使用根节点进行预测,它将预测训练数据结果的平均值。根据路径中的下一个节点,在下一个拆分中,我们要么减去这个和,要么添加一个项。为了得到最终的预测,我们必须遵循要解释的数据实例的路径,并不断地添加到公式中。 -\[\hat f(x)=\bar y+\sum d=1 ^d\text split.contrib(d,x)=\bar y+sum j=1 ^p\text feat.contrib(j,x)\] - +$$ +\hat{f}(x)=\bar{y}+\sum_{d=1}^D\text{split.contrib(d,x)}=\bar{y}+\sum_{j=1}^p\text{feat.contrib(j,x)} +$$ 单个实例的预测是目标结果的平均值加上在根节点和实例结束的终端节点之间发生的 D 拆分的所有贡献的总和。不过,我们对分割贡献不感兴趣,而是对特征贡献感兴趣。一个特征可能用于多个拆分,或者根本不用于。我们可以为每个 P 特征添加贡献,并获得每个特征对预测贡献多少的解释。 ### 4.4.2 示例 -让我们再看看。我们想用决策树来预测某一天租用自行车的数量。所学的树如下所示: +让我们再看看[租赁自行车数据](https://christophm.github.io/interpretable-ml-book/bike-data.html#bike-data)。我们想用决策树来预测某一天租用自行车的数量。所学的树如下所示: + +![Regression tree fitted on the bike rental data. The maximum allowed depth for the tree was set to 2. The trend feature (days since 2011) and the temperature (temp) have been selected for the splits. The boxplots show the distribution of bicycle counts in the terminal node.](https://christophm.github.io/interpretable-ml-book/images/tree-example-1.png) -图 4.17:自行车租赁数据上的回归树。树的最大允许深度设置为 2。已为分割选择趋势特征(自 2011 年以来的天数)和温度(温度)。箱线图显示了终端节点中自行车数量的分布。 +图 4.17:自行车租赁数据上的回归树。树的最大允许深度设置为 2。已为分割选择趋势特征(days since 2011)和温度(temp)。箱线图显示了终端节点中自行车数量的分布。 第一个分割和第二个分割中的一个是使用趋势特征执行的,该特征统计数据收集开始后的天数,并涵盖自行车租赁服务随着时间的推移变得越来越流行的趋势。在第 105 天之前的几天,自行车的预测数量大约是 1800 辆,在第 106 天和第 430 天之间,大约是 3900 辆。对于第 430 天之后的几天,预测值为 4600(如果温度低于 12 度)或 6600(如果温度高于 12 度)。 +![Importance of the features measured by how much the node purity is improved on average.](https://christophm.github.io/interpretable-ml-book/images/tree-importance-1.png) + 特征的重要性告诉我们特征在多大程度上有助于提高所有节点的纯度。这里使用了方差,因为预测自行车租赁是一个回归任务。 可视化树表明温度和时间趋势都被用于分割,但没有量化哪个特征更重要。特征重要性测度表明时间趋势远比温度重要。 @@ -891,199 +912,195 @@ GLMS、GAMS 等依赖于有关数据生成过程的假设。如果违反了这 ### 4.4.3 优势 -树结构非常适合捕获数据中特征之间的交互。 +树结构非常适合**捕获**数据中特征之间的**交互**。 -这些数据以不同的组结束,这些组通常比多维超平面上的点更容易理解,就像线性回归一样。可以说,解释相当简单。 +这些数据以不同的组结束,这些**组**通常比多维超平面上的点更容易理解,就像线性回归一样。可以说,解释相当简单。 -树结构也有一个自然的可视化,其节点和边缘。 +树结构也有一个**自然的可视化**,其节点和边缘。 -树可以产生良好的解释,如中所定义。树结构自动邀请将单个实例的预测值视为反事实:“如果某个特征大于/小于分割点,则预测值将是 y1 而不是 y2。树的解释具有对比性,因为您总是可以将实例的预测与相关的“假设”场景(由树定义)进行比较,这些场景只是树的其他叶节点。如果这棵树很短,像一到三个深的裂口,那么所得到的解释是有选择性的。深度为三的树最多需要三个特征和拆分点来为单个实例的预测创建解释。预测的真实性取决于树的预测性能。对于短树的解释非常简单和一般,因为对于每一个拆分,实例都属于一个或另一个叶子,并且二进制决策很容易理解。 +树可以产生**良好的解释**,如中 ["Human-Friendly Explanations"](https://christophm.github.io/interpretable-ml-book/explanation.html#good-explanation)章节中所定义。树结构自动邀请将单个实例的预测值视为反事实:“如果某个特征大于/小于分割点,则预测值将是 y1 而不是 y2。树的解释具有对比性,因为您总是可以将实例的预测与相关的“假设”场景(由树定义)进行比较,这些场景只是树的其他叶节点。如果这棵树很短,像一到三个深的裂口,那么所得到的解释是有选择性的。深度为三的树最多需要三个特征和拆分点来为单个实例的预测创建解释。预测的真实性取决于树的预测性能。对于短树的解释非常简单和一般,因为对于每一个拆分,实例都属于一个或另一个叶子,并且二进制决策很容易理解。 不需要转换特征。在线性模型中,有时需要取特征的对数。决策树同样适用于特征的任何单调变换。 ### 4.4.4 缺点 -树不能处理线性关系。输入特征和结果之间的任何线性关系都必须通过分割来近似,从而创建一个阶跃函数。这是不有效的。 +**树不能处理线性关系。**输入特征和结果之间的任何线性关系都必须通过分割来近似,从而创建一个阶跃函数。这是不有效的。 -这与缺乏平滑度是紧密相连的。输入特征的微小变化会对预测结果产生很大影响,这通常是不可取的。想象一棵树预测房屋的价值,而这棵树使用房屋的大小作为分割特征之一。分裂发生在 100.5 平方米。想象一下,使用你的决策树模型的房价估计器的用户:他们测量他们的房子,得出房子有 99 平方米的结论,将其输入价格计算器,得到 20 万欧元的预测。用户注意到他们忘记了测量一个 2 平方米的小储藏室。储藏室有一道倾斜的墙,所以他们不确定是否能计算出所有的面积,或者只计算其中的一半。所以他们决定尝试 100.0 和 101.0 平方米。结果:价格计算器输出了 20 万欧元和 20.5 万欧元,这是相当不合理的,因为从 99 平方米到 100 没有变化。 +这与**缺乏平滑度**是紧密相连的。输入特征的微小变化会对预测结果产生很大影响,这通常是不可取的。想象一棵树预测房屋的价值,而这棵树使用房屋的大小作为分割特征之一。分裂发生在 100.5 平方米。想象一下,使用你的决策树模型的房价估计器的用户:他们测量他们的房子,得出房子有 99 平方米的结论,将其输入价格计算器,得到 20 万欧元的预测。用户注意到他们忘记了测量一个 2 平方米的小储藏室。储藏室有一道倾斜的墙,所以他们不确定是否能计算出所有的面积,或者只计算其中的一半。所以他们决定尝试 100.0 和 101.0 平方米。结果:价格计算器输出了 20 万欧元和 20.5 万欧元,这是相当不合理的,因为从 99 平方米到 100 没有变化。 -树木也相当不稳定。训练数据集中的一些更改可以创建完全不同的树。这是因为每个拆分都依赖于父拆分。如果选择其他特征作为第一个拆分特征,则整个树结构将发生更改。如果结构如此容易更改,它不会在模型中创建信心。 +树木也相当**不稳定**。训练数据集中的一些更改可以创建完全不同的树。这是因为每个拆分都依赖于父拆分。如果选择其他特征作为第一个拆分特征,则整个树结构将发生更改。如果结构如此容易更改,它不会在模型中创建信心。 -决策树很容易理解——只要它们很短。终端节点的数量随着深度的增加而迅速增加。终端节点越多,树越深,就越难理解树的决策规则。深度为 1 表示 2 个终端节点。深度 2 表示最多 4 个节点。深度 3 表示最多 8 个节点。树中终端节点的最大数量是深度的 2 倍。 +决策树很容易理解——只要它们很短。**终端节点的数量随着深度的增加而迅速增加**。终端节点越多,树越深,就越难理解树的决策规则。深度为 1 表示 2 个终端节点。深度 2 表示最多 4 个节点。深度 3 表示最多 8 个节点。树中终端节点的最大数量是深度的 2 倍。 ### 4.4.5 软件 -对于本章中的示例,我使用了实现 cart(分类和回归树)的 rpart r 包。Cart 是用许多编程语言实现的,包括有争议的,Cart 是一个相当古老的,有些过时的算法,还有一些有趣的新算法来拟合树。您可以在关键字“递归分区”下找到决策树的一些 R 包的概述。 +对于本章中的示例,我使用了实现 CART(分类和回归树)的` rpart`R 包。CART 是用许多编程语言实现的,包括 [Python](https://scikit-learn.org/stable/modules/tree.html)。有争议的是,CART 是一个相当古老的,有些过时的算法,还有一些有趣的新算法来拟合树。您可以在关键字“递归分区”下的 [Machine Learning and Statistical Learning CRAN Task View](https://cran.r-project.org/web/views/MachineLearning.html)找到决策树的一些 R 包的概述。 + -![img](file:///C:/Users/ADMINI~1/AppData/Local/Temp/msohtmlclip1/01/clip_image002.gif) -1。弗里德曼、杰罗姆、特雷弗·黑斯迪和罗伯特·提比西拉尼。“统计学习要素”。www.web.stanford.edu/~hassie/elemstatlearn/(2009 年)。 +1. 弗里德曼、杰罗姆、特雷弗·黑斯迪和罗伯特·提比西拉尼。“统计学习要素”。www.web.stanford.edu/~hassie/elemstatlearn/(2009 年)。 ## 4.5 决策规则 -决策规则是一个简单的 if-then 语句,由条件(也称为先行条件)和预测组成。例如:如果今天下雨,如果是四月(条件),那么明天下雨(预测)。可以使用单个决策规则或多个规则的组合进行预测。 +决策规则是一个简单的 IF-THEN 语句,由条件(也称为先行条件)和预测组成。例如:如果今天下雨,如果是四月(条件),那么明天下雨(预测)。可以使用单个决策规则或多个规则的组合进行预测。 -决策规则遵循一个一般的结构:如果条件满足,那么做一个特定的预测。决策规则可能是最容易解释的预测模型。它们的 if-then 结构在语义上类似于自然语言和我们的思维方式,前提是条件是由可理解的特征构建的,条件的长度很短(少数特征=与 and 组合的值对),并且没有太多规则。在编程中,编写 if-then 规则是很自然的。机器学习中的新特征是通过算法学习决策规则。 +决策规则遵循一个一般的结构:如果条件满足,那么做一个特定的预测。决策规则可能是最容易解释的预测模型。它们的 IF-THEN 结构在语义上类似于自然语言和我们的思维方式,前提是条件是由可理解的特征构建的,条件的长度很短(少数`feature=与 and 组合的value对`),并且没有太多规则。在编程中,编写IF-THEN规则是很自然的。机器学习中的新特征是通过算法学习决策规则。 -想象一下,使用一种算法来学习预测房屋价值的决策规则(低、中或高)。这个模型学习到的一个决策规则可能是:如果一个房子超过 100 平方米,并且有一个花园,那么它的价值就很高。更正式一点:如果尺寸大于 100 且花园=1,则值=高。 +想象一下,使用一种算法来学习预测房屋价值的决策规则(`low`, `medium`或`high`)。这个模型学习到的一个决策规则可能是:如果一个房子超过 100 平方米,并且有一个花园,那么它的价值就很高。更正式一点:如果`size>100 AND garden(花园)=1`,则`value=high`。 让我们打破决策规则: -• 尺寸>100 是 if 部分的第一个条件。 +- size>100 是 if 部分的第一个条件。 -• garden=1 是 if 部分的第二个条件。 +- garden=1 是 if 部分的第二个条件。 -• 这两个条件通过“和”连接以创建新条件。这两个规则都必须适用。 +- 这两个条件通过“AND”连接以创建新条件。这两个规则都必须适用。 -• 预测结果(然后部分)值=高。 +- 预测结果(THEN部分)`value=high`。 -决策规则在条件中至少使用一个 feature=value 语句,对于“and”可以添加的数量没有上限。一个例外是没有显式 ifpart 的默认规则,当没有其他规则应用时该规则也适用,但稍后将对此进行详细说明。 +决策规则在条件中至少使用一个`feature=value `语句,对于“AND”可以添加的数量没有上限。一个例外是没有显式 IF部分 的默认规则,当没有其他规则应用时该规则也适用,但稍后将对此进行详细说明。 决策规则的有用性通常概括为两个数字:支持和准确性。 -规则的支持或覆盖率:应用规则条件的实例的百分比 +**规则的支持或覆盖率**:应用规则条件的实例的百分比被称为支持。例如,规则大小=大,位置=好,然后值=高( `size=big AND location=good THEN value=high`),用于预测房屋价值。假设 1000 间房子中有 100 间大而位置好,那么规则的支持率是 10%。预测(然后是部分)对支护计算不重要。 -被称为支持。例如,规则大小=大,位置=好,然后值=高,用于预测房屋价值。假设 1000 间房子中有 100 间大而位置好,那么规则的支持率是 10%。预测(然后是部分)对支护计算不重要。 - -规则的准确性或可信度:规则的准确性是衡量规则在预测规则条件适用的实例的正确类时的准确性的指标。例如:假设 100 个房屋中,规则大小=大,位置=好,则值=高,85 个房屋中的值=高,14 个房屋中的值=中,1 个房屋中的值=低,则规则的准确度为 85%。 +**规则的准确性或可信度**:规则的准确性是衡量规则在预测规则条件适用的实例的正确类时的准确性的指标。例如:假设 100 个房屋中,规则大小=大,位置=好,则值=高(`size=big AND location=good THEN value=high`),85 个房屋中的值=高(`value=high`),14 个房屋中的值=中(`value=medium`),1 个房屋中的值=低( `value=low`),则规则的准确度为 85%。 通常在精度和支持之间有一个权衡:通过在条件中添加更多的特征,我们可以获得更高的精度,但会失去支持。 为了创建一个好的分类器来预测房子的价值,你可能不仅需要学习一条规则,而且可能需要学习 10 或 20 条规则。然后事情会变得更复杂,你会遇到以下问题之一: -• 规则可以重叠:如果我想预测一栋房子的价值和两个或两个以上的规则,它们会给我矛盾的预测呢? - -• 没有适用的规则:如果我想预测一所房子的价值,但没有适用的规则怎么办? +- 规则可以重叠:如果我想预测一栋房子的价值和两个或两个以上的规则,它们会给我矛盾的预测呢? +- 没有适用的规则:如果我想预测一所房子的价值,但没有适用的规则怎么办? 组合多个规则有两种主要策略:决策列表(有序)和决策集(无序)。这两种策略都暗示了对重叠规则问题的不同解决方案。 -决策列表向决策规则引入一个顺序。例如,如果第一条规则的条件为真,则使用第一条规则的预测。如果没有,我们将转到下一个规则,检查它是否适用,依此类推。决策列表通过只返回应用列表中第一个规则的预测来解决重叠规则的问题。 +**决策列表**向决策规则引入一个顺序。例如,如果第一条规则的条件为真,则使用第一条规则的预测。如果没有,我们将转到下一个规则,检查它是否适用,依此类推。决策列表通过只返回应用列表中第一个规则的预测来解决重叠规则的问题。 -决策集类似于规则的民主,只是有些规则可能具有更高的投票权。在一套规则中,这些规则要么相互排斥,要么有解决冲突的策略,例如多数投票,这些策略可以通过个别规则的准确性或其他质量措施进行加权。当一些规则适用时,解释性可能会受到影响。 +**决策集**类似于规则的民主,只是有些规则可能具有更高的投票权。在一套规则中,这些规则要么相互排斥,要么有解决冲突的策略,例如多数投票,这些策略可以通过个别规则的准确性或其他质量措施进行加权。当一些规则适用时,解释性可能会受到影响。 决策列表和决策集都可能面临没有规则适用于实例的问题。这可以通过引入默认规则来解决。默认规则是在没有其他规则适用时应用的规则。默认规则的预测通常是数据点中最频繁的一类,而其他规则不包括这些数据点。如果一组规则或一系列规则覆盖了整个特征空间,我们称之为详尽的。通过添加默认规则,集合或列表将自动变得详尽。 从数据中学习规则的方法有很多,本书远没有涵盖所有这些方法。这一章向你展示了其中三个。选择这些算法是为了涵盖广泛的学习规则的一般思想,因此这三种算法代表了非常不同的方法。 -\1. ONER 从一个特征学习规则。ONER 的特点是其简单性、可解释性和作为基准的使用。 +1. **OneR** 从一个特征学习规则。OneR 的特点是其简单性、可解释性和作为基准的使用。 -\2. 顺序覆盖是一个迭代学习规则并删除新规则所覆盖的数据点的一般过程。这个过程被许多规则学习算法使用。 +2. **顺序覆盖**是一个迭代学习规则并删除新规则所覆盖的数据点的一般过程。这个过程被许多规则学习算法使用。 -\3. 贝叶斯规则列表使用贝叶斯统计将预先挖掘的频繁模式组合成决策列表。使用预挖掘模式是许多规则学习算法常用的方法。 +3. **贝叶斯规则列表**使用贝叶斯统计将预先挖掘的频繁模式组合成决策列表。使用预挖掘模式是许多规则学习算法常用的方法。 让我们从最简单的方法开始:使用单个最佳特征来学习规则。 -4.5.1 从单个特征(ONER)学习规则 +### 4.5.1 从单个特征(OneR)学习规则 -Holte(1993)提出的 ONER 算法是最简单的规则归纳算法之一。从所有特征中,ONER 选择一个包含有关感兴趣结果的最多信息的特征,并从该特征创建决策规则。 +Holte[(1993)](https://christophm.github.io/interpretable-ml-book/rules.html#fn18)提出的 OneR 算法是最简单的规则归纳算法之一。从所有特征中,OneR选择一个包含有关感兴趣结果的最多信息的特征,并从该特征创建决策规则。 -尽管命名为 oner,代表“一条规则”,但是算法生成了不止一条规则:它实际上是所选最佳特征的每个唯一特征值的一条规则。一个更好的名字应该是一个特征。 +尽管命名为OneR,代表“一条规则”,但是算法生成了不止一条规则:它实际上是所选最佳特征的每个唯一特征值的一条规则。一个更好的名字应该是一个特征。 算法简单快速: -\1. 通过选择适当的间隔来离散连续特征。 - -\2. 对于每个特征: - -在特征值和(分类)结果之间创建交叉表。 - -对于特征的每个值,创建一个规则,预测具有此特定特征值(可以从交叉表中读取)的实例的最频繁类。计算特征规则的总错误。 - -\3. 选择总误差最小的特征。 - -ONER 始终覆盖数据集的所有实例,因为它使用所选特征的所有级别。缺失值可以作为附加特征值处理,也可以预先输入。 - -ONER 模型是一个只有一个拆分的决策树。拆分不一定像购物车中那样是二进制的,但取决于唯一特征值的数量。 - -让我们来看一个例子,ONER 是如何选择最佳特征的。下表显示了有关房屋的人工数据集,其中包含有关房屋价值、位置、大小以及是否允许养宠物的信息。我们有兴趣学习一个简单的模型来预测房子的价值。 - -| 位置大小宠物 | 价值 | -| ------------ | ------ | -| 好的小的是的 | 高的 | -| 好大不 | 高的 | -| 好大不 | 高的 | -| 不好的介质 | 中等的 | - -好的中草药好的小草药 - -| 坏的 | 中号是的 | 中等的 | -| ---- | -------- | ------ | -| 坏的 | 小是的 | 低的 | -| 坏的 | 中号是的 | 低的 | -| 坏的 | 小号不 | 低的 | +1. 通过选择适当的间隔来离散连续特征。 -ONER 在每个特征和结果之间创建交叉表: +2. 对于每个特征: -值=低值=中值=高 + - 在特征值和(分类)结果之间创建交叉表。 -位置=坏 3 2 0 位置=好 0 2 3 + - 对于特征的每个值,创建一个规则,预测具有此特定特征值(可以从交叉表中读取)的实例的最频繁类。计算特征规则的总错误。 -值=低值=中值=高 +3. 选择总误差最小的特征。 -大小=大 0 2 大小=中 1 3 0 大小=小 2 1 +OneR始终覆盖数据集的所有实例,因为它使用所选特征的所有级别。缺失值可以作为附加特征值处理,也可以预先输入。 -值=低值=中值=高 +OneR模型是一个只有一个拆分的决策树。拆分不一定像购物车中那样是二进制的,但取决于唯一特征值的数量。 -宠物=否 1 2 宠物=仅 2 类 0 宠物=是 2 1 1 +让我们来看一个例子,OneR 是如何选择最佳特征的。下表显示了有关房屋的人工数据集,其中包含有关房屋价值、位置、大小以及是否允许养宠物的信息。我们有兴趣学习一个简单的模型来预测房子的价值。 -对于每一个特征,我们一行一行地遍历表:每个特征值都是规则的 if 部分;对于具有这个特征值的实例,最常见的类是预测,然后是规则的一部分。例如,大小特征与级别小,中,大三个结果规则。对于每个特征,我们计算生成的规则的总错误率,即错误的总和。位置特征具有可能的值 bad 和 good。不良地段房屋最常见的价值是低值,当我们用低值作为预测时,我们会犯两个错误,因为两个房屋的价值是中等的。好地段的房屋预测值很高,我们又犯了两个错误,因为两个房屋的价值中等。我们使用位置特征的误差是 4/10,对于尺寸特征是 3/10,对于宠物特征是 4/10。“大小”特征生成误差最小的规则,并将用于最终的 ONER 模型: +| (地点)location | (大小)size | (宠物)pets | (价格)value | +| ---------------- | ------------ | ------------ | ------------- | +| good | small | yes | high | +| good | big | no | high | +| good | big | no | high | +| bad | medium | no | medium | +| good | medium | only cats | medium | +| good | small | only cats | medium | +| bad | medium | yes | medium | +| bad | small | yes | low | +| bad | medium | yes | low | +| bad | small | no | low | -如果大小=小,则值=小 +OneR 在每个特征和结果之间创建交叉表: -如果大小=中等,则值=中等 +| value=low | value=medium | value=high | | +| ------------- | ------------ | ---------- | ---- | +| location=bad | 3 | 2 | 0 | +| location=good | 0 | 2 | 3 | -如果大小=大,则值=高 +| | value=low | value=medium | value=high | +| ----------- | --------- | ------------ | ---------- | +| size=big | 0 | 0 | 2 | +| size=medium | 1 | 3 | 0 | +| size=small | 2 | 1 | 1 | -ONER 喜欢具有许多可能级别的特征,因为这些特征可以更容易地覆盖目标。设想一个数据集,它只包含噪声,不包含信号,这意味着所有特征都具有随机值,并且对目标没有预测值。有些特征的级别比其他特征高。具有更多级别的特征现在可以更容易地过拟合。对于数据中的每个实例,具有单独级别的特征将完美地预测整个培训数据集。一种解决方案是将数据拆分为训练集和验证集,学习训练数据的规则,并评估在验证集上选择特征时的总错误。 +| | value=low | value=medium | value=high | +| -------------- | --------- | ------------ | ---------- | +| pets=no | 1 | 1 | 2 | +| pets=only cats | 0 | 2 | 0 | +| pets=yes | 2 | 1 | 1 | -领带是另一个问题,即当两个特征导致相同的总错误时。ONER 通过使用具有最小误差的第一个特征或具有卡方检验的最小 p 值的特征来解决关系。 +对于每一个特征,我们一行一行地遍历表:每个特征值都是规则的 IF部分;对于具有这个特征值的实例,最常见的类是预测,然后是规则的THEN部分。例如,大小特征与级别`small`,`medium`,`big`三个结果规则。对于每个特征,我们计算生成的规则的总错误率,即错误的总和。位置特征具有可能的值 `bad `和` good`。不良地段房屋最常见的价格是`low`,当我们用`low`作为预测时,我们会犯两个错误,因为两个房屋的价格是`medium`的。好地段的房屋预测价格很高,我们又犯了两个错误,因为两个房屋的价值`medium`。我们使用位置特征的误差是 4/10,对于尺寸特征是 3/10,对于宠物特征是 4/10。“size”特征生成误差最小的规则,并将用于最终的 OneR 模型: -例子 +IF `size=small` THEN `value=small` +IF `size=medium` THEN `value=medium` +IF `size=big` THEN `value=high` -让我们用真实的数据来尝试一下 ONER。我们使用来测试 ONER 算法。将所有连续输入特征离散为 5 个分位数。将创建以下规则: +OneR 喜欢具有许多可能级别的特征,因为这些特征可以更容易地覆盖目标。设想一个数据集,它只包含噪声,不包含信号,这意味着所有特征都具有随机值,并且对目标没有预测值。有些特征的级别比其他特征高。具有更多级别的特征现在可以更容易地过拟合。对于数据中的每个实例,具有单独级别的特征将完美地预测整个培训数据集。一种解决方案是将数据拆分为训练集和验证集,学习训练数据的规则,并评估在验证集上选择特征时的总错误。 -年龄预测 +领带是另一个问题,即当两个特征导致相同的总错误时。OneR 通过使用具有最小误差的第一个特征或具有卡方检验的最小 p 值的特征来解决关系。 -(12.9,27.2]健康 - -(27.2,41.4]健康 - -(41.4,55.6]健康 - -(55.6,69.8]健康 +**例子** -(69.8,84.1]健康 +让我们用真实的数据来尝试一下 OneR。我们使用[宫颈癌分类任务](https://christophm.github.io/interpretable-ml-book/cervical.html#cervical)来测试 OneR 算法。将所有连续输入特征离散为 5 个分位数。将创建以下规则: -ONER 选择年龄特征作为最佳预测特征。因为癌症是罕见的,所以对于每一个统治阶级来说,预测的标签总是健康的,这是相当没有帮助的。在这种不平衡的情况下使用标签预测是没有意义的。“年龄”间隔与癌症/健康之间的交叉表以及患癌症的妇女的百分比更能提供信息: +| (年龄)Age | (预测)prediction | +| ----------- | ------------------ | +| (12.9,27.2] | Healthy | +| (27.2,41.4] | Healthy | +| (41.4,55.6] | Healthy | +| (55.6,69.8] | Healthy | +| (69.8,84.1] | Healthy | -#癌症健康型(癌症) +OneR 选择年龄特征作为最佳预测特征。因为癌症是罕见的,所以对于每一个统治阶级来说,预测的标签总是健康的,这是相当没有帮助的。在这种不平衡的情况下使用标签预测是没有意义的。“年龄”间隔与癌症/健康之间的交叉表以及患癌症的妇女的百分比更能提供信息: -| 年龄=(12.9,27.2]26 | 477 个 | 0.05 分 | -| -------------------- | ----- | -------- | -| 年龄=(27.2,41.4)25 | 290 个 | 0.08 分 | -| 年龄=(41.4,55.6)4 | 31 岁 | 0.11 分 | -| 年龄=(55.6,69.8)0 | 1 个 | 0.00 美元 | -| 年龄=(69.8,84.1]0 | 4 | 0.00 美元 | +| | # Cancer | # Healthy | P(Cancer) | +| --------------- | -------- | --------- | --------- | +| Age=(12.9,27.2] | 26 | 477 | 0.05 | +| Age=(27.2,41.4] | 25 | 290 | 0.08 | +| Age=(41.4,55.6] | 4 | 31 | 0.11 | +| Age=(55.6,69.8] | 0 | 1 | 0.00 | +| Age=(69.8,84.1] | 0 | 4 | 0.00 | 但是在您开始解释任何东西之前:因为每个特征和每个值的预测都是健康的,所以所有特征的总错误率都是相同的。默认情况下,通过使用错误率最低的特征中的第一个特征(这里,所有特征都有 55/858)来解决总错误中的关系,这恰好是年龄特征。 -ONER 不支持回归任务。但是我们可以通过将连续结果分割成区间,将回归任务转化为分类任务。我们使用这个技巧通过将自行车的数量减少到四个四分位数(0-25%、25-50%、50-75%和 75-100%)来预测 ONER 的数量。下表显示了安装 ONER 模型后所选的特征: - -MNTHPrediction 一月[223152]二月[223152]三月[223152] - -4 月(31524548) - -5 月(59568714)6 月(45485956) - -七月(59568714)八月(59568714)九月(59568714) - -OKT(59568714)11 月(31524548) +OneR 不支持回归任务。但是我们可以通过将连续结果分割成区间,将回归任务转化为分类任务。我们使用这个技巧通过将自行车的数量减少到四个四分位数(0-25%、25-50%、50-75%和 75-100%)来预测[租赁自行车](https://christophm.github.io/interpretable-ml-book/bike-data.html#bike-data)的数量。下表显示了安装 OneR 模型后所选的特征: -德兹[223152] +| 月份 | 预测 | +| ------ | ----------- | +| 一月 | [22,3152] | +| 二月 | [22,3152] | +| 三月 | [22,3152] | +| 四月 | (3152,4548] | +| 五月 | (5956,8714] | +| 六月 | (4548,5956] | +| 七月 | (5956,8714] | +| 八月 | (5956,8714] | +| SEP | (5956,8714] | +| 十月 | (5956,8714] | +| 十一月 | (3152,4548] | +| 十二月 | [22,3152] | -所选特征是月份。月特征有(惊喜!)12 个特征级别,比大多数其他特征都要高。因此存在过度安装的危险。更乐观的一点是:月份特征可以处理季节性趋势(例如冬天租的自行车更少),而且预测似乎是明智的。 +所选特征是月份。月份特征有(哇!惊喜!)12 个特征级别,比大多数其他特征都要高。因此存在过拟合的危险。更乐观的一点是:月份特征可以处理季节性趋势(例如冬天租的自行车更少),而且预测似乎是明智的。 -现在,我们从简单的 ONER 算法转移到一个更复杂的过程,使用由几个特征组成的条件更复杂的规则:顺序覆盖。 +现在,我们从简单的 OneR 算法转移到一个更复杂的过程,使用由几个特征组成的条件更复杂的规则:顺序覆盖。 ### 4.5.2 顺序覆盖 @@ -1093,19 +1110,21 @@ OKT(59568714)11 月(31524548) 假设我们已经有了一个算法,可以创建一个覆盖部分数据的规则。两个类(一个正类,一个负类)的顺序覆盖算法的工作原理如下: -• 从一个空的规则列表(rlist)开始。 +- 从一个空的规则列表(rlist)开始。 -• 学习规则 R。 +- 学习规则 R。 -• 当规则列表低于某个质量阈值(或正面示例未被覆盖)时: +- 当规则列表低于某个质量阈值(或正面示例未被覆盖)时: -将规则 R 添加到 rlist。 + - 将规则 R 添加到 rlist。 -删除规则 R 涵盖的所有数据点。 + - 删除规则 R 涵盖的所有数据点。 -学习其他有关剩余数据的规则。 + - 学习其他有关剩余数据的规则。 -• 返回决策列表。 +- 返回决策列表。 + +![The covering algorithm works by sequentially covering the feature space with single rules and removing the data points that are already covered by those rules. For visualization purposes, the features x1 and x2 are continuous, but most rule learning algorithms require categorical features.](https://christophm.github.io/interpretable-ml-book/images/covering-algo-1.png) 图 4.19:覆盖算法的工作原理是用单个规则依次覆盖特征空间,并删除那些规则已经覆盖的数据点。为了实现可视化,特征 x1 和 x2 是连续的,但是大多数规则学习算法都需要分类特征。 @@ -1113,45 +1132,40 @@ OKT(59568714)11 月(31524548) 对于多类设置,必须修改方法。首先,这些课程的顺序是随着流行率的增加。顺序覆盖算法从最小公共类开始,为其学习规则,删除所有覆盖的实例,然后转到第二个最小公共类,依此类推。当前班级始终被视为阳性班级,所有患病率较高的班级都被合并为阴性班级。最后一个类是默认规则。这在分类中也被称为一对一策略。 -我们如何学习一条规则?ONER 算法在这里是无用的,因为它总是覆盖整个特征空间。但是还有很多其他的可能性。一种可能是通过梁搜索从决策树中学习单个规则: - -• 学习决策树(使用购物车或其他树学习算法)。 +我们如何学习一条规则?OneR 算法在这里是无用的,因为它总是覆盖整个特征空间。但是还有很多其他的可能性。一种可能是通过梁搜索从决策树中学习单个规则: -• 从根节点开始,递归地选择最纯的节点(例如,具有较低的错误分类率)。 +- 学习决策树(使用购物车或其他树学习算法)。 -• 终端节点的大多数类用作规则预测;通向该节点的路径用作规则条件。 +- 从根节点开始,递归地选择最纯的节点(例如,具有较低的错误分类率)。 +- 终端节点的大多数类用作规则预测;通向该节点的路径用作规则条件。 下图说明了树中的波束搜索: -图 4.20:通过搜索决策树的路径来学习规则。发展决策树来预测感兴趣的目标。我们从根节点开始,贪婪地迭代地遵循本地生成最纯子集(例如,最高精度)的路径,并将所有拆分值添加到规则条件中。结果是:如果位置=好,大小=大,那么值=高。 - -学习单个规则是一个搜索问题,其中搜索空间是所有可能规则的空间。搜索的目标是根据某些条件找到最佳规则。有许多不同的搜索策略:爬山搜索,波束搜索,穷尽搜索,最佳优先搜索,有序搜索,随机搜索,自上而下搜索,自下而上搜索,… - -Cohen(1995)的 Ripper(重复增量修剪以减少误差)是顺序覆盖算法的一个变种。Ripper 有点复杂,它使用后处理阶段(规则修剪)来优化决策列表(或集合)。裂土器可以在有序或无序模式下运行,并生成决策列表或决策集。 - -示例 - -我们将使用 ripper 作为例子。 - -裂土器算法在的分类任务中找不到任何规则。 +![Learning a rule by searching a path through a decision tree. A decision tree is grown to predict the target of interest. We start at the root node, greedily and iteratively follow the path which locally produces the purest subset (e.g. highest accuracy) and add all the split values to the rule condition. We end up with: If `location=good` and `size=big`, then `value=high`.](https://christophm.github.io/interpretable-ml-book/images/learn-one-rule.png) -当我们在回归任务中使用 ripper 来预测一些规则时,我们发现了。由于裂土器只能用于分类,自行车计数必须转化为分类结果。我通过把自行车的数量减少到四分之一来达到这个目的。例如(45485956)是覆盖 4548 和 5956 之间预测自行车数量的时间间隔。下表显示了已学习规则的决策列表。 +图 4.20:通过搜索决策树的路径来学习规则。发展决策树来预测感兴趣的目标。我们从根节点开始,贪婪地迭代地遵循本地生成最纯子集(例如,最高精度)的路径,并将所有拆分值添加到规则条件中。结果是: If `location=good` and `size=big`, then `value=high`。 -规则 - -(自 2011 年以来的天数>=438)和(温度>=17)以及(温度<=27)和(hum<=67)=>cnt=(59568714] +学习单个规则是一个搜索问题,其中搜索空间是所有可能规则的空间。搜索的目标是根据某些条件找到最佳规则。有许多不同的搜索策略:爬山搜索,波束搜索,穷尽搜索,最佳优先搜索,有序搜索,随机搜索,自上而下搜索,自下而上搜索,… -(自 2011 年以来的天数>=443)和(温度>=12)以及(天气状况=良好)和(湿度>=59)=>cnt=(59568714] +Cohen(1995)的 RIPPER(重复增量修剪以减少误差)是顺序覆盖算法的一个变种。 RIPPER 有点复杂,它使用后处理阶段(规则修剪)来优化决策列表(或集合)。裂土器可以在有序或无序模式下运行,并生成决策列表或决策集。 -(自 2011 年以来的天数>=441)和(风速<=10)以及(温度==13)=>cnt=(59568714] +**示例** -(temp>=12)和(hum<=68)以及(自 _2011 年以来的天数>=551)=>cnt=(59568714] +我们将使用 RIPPER 作为例子。 -(自 2011 年以来的天数>=100)和(自 2011 年以来的天数<=434)以及(hum<=72)和(工作日= + RIPPER算法在[宫颈癌](https://christophm.github.io/interpretable-ml-book/cervical.html#cervical)的分类任务中找不到任何规则。 -工作日)=>CNT=(31524548] +当我们在回归任务中使用 RIPPER 来预测[自行车数量](https://christophm.github.io/interpretable-ml-book/bike-data.html#bike-data)时,我们发现了一些规则。由于裂土器只能用于分类,自行车计数必须转化为分类结果。我通过把自行车的数量减少到四分之一来达到这个目的。例如(4548, 5956)是覆盖 4548 和 5956 之间预测自行车数量的时间间隔。下表显示了已学习规则的决策列表。 -(自 2011 年以来的天数>=106)和(自 2011 年以来的天数<=323)=>cnt=(31524548]=>cnt=[223152] +| rules | +| ------------------------------------------------------------ | +| (days_since_2011 >= 438) and (temp >= 17) and (temp <= 27) and (hum <= 67) => cnt=(5956,8714] | +| (days_since_2011 >= 443) and (temp >= 12) and (weathersit = GOOD) and (hum >= 59) => cnt=(5956,8714] | +| (days_since_2011 >= 441) and (windspeed <= 10) and (temp >= 13) => cnt=(5956,8714] | +| (temp >= 12) and (hum <= 68) and (days_since_2011 >= 551) => cnt=(5956,8714] | +| (days_since_2011 >= 100) and (days_since_2011 <= 434) and (hum <= 72) and (workingday = WORKING DAY) => cnt=(3152,4548] | +| (days_since_2011 >= 106) and (days_since_2011 <= 323) => cnt=(3152,4548] | +| => cnt=[22,3152] | 解释很简单:如果条件适用,我们可以预测右侧的自行车数量间隔。最后一个规则是当其他规则都不适用于实例时应用的默认规则。要预测新实例,请从列表顶部开始,检查规则是否适用。当一个条件匹配时,规则的右侧就是这个实例的预测。默认规则确保始终存在预测。 @@ -1159,35 +1173,36 @@ Cohen(1995)的 Ripper(重复增量修剪以减少误差)是顺序覆盖 在本节中,我将向您展示学习决策列表的另一种方法,它遵循以下粗略的方法: -\1. 从数据中预挖掘频繁的模式,这些模式可用作决策规则的条件。 +1. 从数据中预挖掘频繁的模式,这些模式可用作决策规则的条件。 -\2. 从一系列预先挖掘的规则中学习决策列表。 +2. 从一系列预先挖掘的规则中学习决策列表。 -使用此配方的特定方法称为贝叶斯规则列表(Letham 等人,2015 年)或简称为 BRL。BRL 使用贝叶斯统计从频繁模式中学习决策列表,这是 FP 树算法(Borgelt 2005)的前提,但让我们从 BRL 的第一步慢慢开始。 +使用此配方的特定方法称为贝叶斯规则列表(Letham 等人,2015 年)或简称为 BRL。BRL 使用贝叶斯统计从频繁模式中学习决策列表,这是 FP 树算法(Borgelt 2005)的前提。 -频繁模式的预挖掘 +但让我们从 BRL 的第一步慢慢开始。 -频繁模式是特征值的频繁(共)出现。作为预处理步骤 +**频繁模式的预挖掘** -BRL 算法,我们使用特征(在这个步骤中我们不需要目标结果)并从中提取频繁发生的模式。模式可以是单个特征值(如大小=中等)或特征值(如大小=中等)和位置=差)的组合。 +频繁模式是特征值的频繁(共)出现。作为BRL 算法预处理步骤,我们使用特征(在这个步骤中我们不需要目标结果)并从中提取频繁发生的模式。模式可以是单个特征值(如`size=medium`)或特征值 `size=medium AND location=bad`的组合。 模式的频率是通过其在数据集中的支持来测量的: -\[支持(x j=a)=\frac 1 n \ sum i=1 ^ni(x ^(i)j=a)\] - -其中 a 是特征值,n 是数据集中的数据点数量,i 是如果实例 i 的特征(x_j)具有级别 a,则返回 1 的 indicator 函数,否则为 0。在房屋价值数据集中,如果 20%的房屋没有阳台,80%的房屋有一个或多个阳台,那么对模式阳台的支持为 20%。还可以测量特征值组合的支持,例如阳台=0 和宠物=allowed。 +$$ +Support(x_j=A)=\frac{1}n{}\sum_{i=1}^nI(x^{(i)}_{j}=A) +$$ +其中 a 是特征值,n 是数据集中的数据点数量,i 是如果实例 i 的特征x_j具有级别 a,则返回 1 的 indicator 函数,否则为 0。在房屋价值数据集中,如果 20%的房屋没有阳台,80%的房屋有一个或多个阳台,那么对模式阳台的支持为 20%。还可以测量特征值组合的支持,例如`balcony=0 AND pets=allowed`。 有许多算法可以找到这种频繁的模式,例如 Apriori 或 FP 增长。您使用的模式并不重要,只有找到模式的速度不同,但得到的模式总是相同的。 我将给你一个大致的概念,先验算法如何工作,以找到频繁的模式。实际上,Apriori 算法由两部分组成,第一部分查找频繁的模式,第二部分从中构建关联规则。对于 BRL 算法,我们只对 Apriori 第一部分中生成的频繁模式感兴趣。 -在第一步中,Apriori 算法从所有支持大于用户定义的最小支持的特征值开始。如果用户说最小支持应该是 10%,只有 5%的房子的大小=大,我们会删除这个特征值,只保留大小=中,大小=小作为模式。这并不意味着房屋从数据中删除,它只是意味着“大小=大”不会作为频繁模式返回。先验算法基于具有单个特征值的频繁模式,迭代地寻找越来越高阶的特征值组合。模式是通过将 feature=value 语句与逻辑 and(例如,size=medium 和 location=bad)相结合来构造的。将删除支持低于最小支持的生成模式。最后我们有了所有常见的模式。频繁模式的任何子集都会再次频繁出现,这称为 Apriori 属性。直观地说,它是有意义的:通过从模式中删除一个条件,简化的模式只能覆盖更多或相同数量的数据点,但不能少于。例如,如果 20%的房屋大小=中等,位置=良好,那么只有大小=中等的房屋的支撑为 20%或更大。Apriori 属性用于减少要检查的模式的数量。只有在频繁模式的情况下,我们必须检查高阶模式。 +在第一步中,Apriori 算法从所有支持大于用户定义的最小支持的特征值开始。如果用户说最小支持应该是 10%,只有 5%的房子的`size=big`,我们会删除这个特征值,只保留`size=medium`,`size=small`作为模式。这并不意味着房屋从数据中删除,它只是意味着`size=big`不会作为频繁模式返回。先验算法基于具有单个特征值的频繁模式,迭代地寻找越来越高阶的特征值组合。模式是通过将 `feature=value` 语句与逻辑 AND(例如,`size=medium AND location=bad`)相结合来构造的。将删除支持低于最小支持的生成模式。最后我们有了所有常见的模式。频繁模式的任何子集都会再次频繁出现,这称为 Apriori 属性。直观地说,它是有意义的:通过从模式中删除一个条件,简化的模式只能覆盖更多或相同数量的数据点,但不能少于。例如,如果 20%的房屋`size=medium`,`location=good`,那么只有`size=medium`的房屋的支撑为 20%或更大。Apriori 属性用于减少要检查的模式的数量。只有在频繁模式的情况下,我们必须检查高阶模式。 -现在我们已经完成了贝叶斯规则列表算法的预挖掘条件。但在我们继续进行 BRL 的第二步之前,我想提示一下基于预先挖掘的模式的规则学习的另一种方法。其他方法建议将感兴趣的结果包含到频繁的模式挖掘过程中,并执行构建 ifthen 规则的 Apriori 算法的第二部分。由于该算法是无监督的,因此该部分还包含我们不感兴趣的特征值。但是我们可以通过规则过滤,这些规则在当时的部分中只具有感兴趣的结果。这些规则已经形成了一个决策集,但也可以对规则进行排列、删减、删除或重新组合。 +现在我们已经完成了贝叶斯规则列表算法的预挖掘条件。但在我们继续进行 BRL 的第二步之前,我想提示一下基于预先挖掘的模式的规则学习的另一种方法。其他方法建议将感兴趣的结果包含到频繁的模式挖掘过程中,并执行构建IF-THEN规则的 Apriori 算法的第二部分。由于该算法是无监督的,因此THEN部分还包含我们不感兴趣的特征值。但是我们可以通过规则过滤,这些规则在当时THEN部分中只具有感兴趣的结果。这些规则已经形成了一个决策集,但也可以对规则进行排列、删减、删除或重新组合。 然而,在 BRL 方法中,我们使用频繁的模式,学习然后的部分以及如何使用贝叶斯统计将模式安排到决策列表中。 -学习贝叶斯规则列表 +**学习贝叶斯规则列表** BRL 算法的目标是通过选择预先挖掘的条件来学习一个准确的决策列表,同时对规则较少、条件较短的列表进行优先级排序。BRL 通过定义决策列表的分布来实现这一目标,其中包含条件长度(最好是较短的规则)和规则数量(最好是较短的列表)的优先分布。 @@ -1203,248 +1218,271 @@ BRL 算法的目标是通过选择预先挖掘的条件来学习一个准确的 目标是从后验分布中抽取决策列表 D: -\[\Underrace P(D X,Y,A、\alpha、\lambda、\eta)Posteriori \Propto\Underrace P(Y X,D、\alpha) - -_ 可能性\cdot\underbrace p(d a、\lambda、\eta)先验\] - -其中,d 是决策列表,x 是特征,y 是目标,a 是预先挖掘的条件集,决策列表的先前预期长度,a 是规则中先前预期的条件数,a 是正类和负类的先前伪计数,其中最好固定在(1,1)。 - -\[P(D X,Y,A、\alpha、\lambda、\eta)\] +$$ +\underbrace{p(d|x,y,A,\alpha,\lambda,\eta)}_{posteriori}\propto\underbrace{p(y|x,d,\alpha)}_{likelihood}\cdot\underbrace{p(d|A,\lambda,\eta)}_{priori} +$$ +其中,d 是决策列表,x 是特征,y 是目标,a 是预先挖掘的条件集,\lambda决策列表的先前预期长度,a 是规则中先前预期的条件数,a 是正类和负类的先前伪计数,其中最好固定在(1,1)。 +$$ +p(d|x,y,A,\alpha,\lambda,\eta) +$$ 根据观察数据和先验假设,量化决策列表的可能性。这与给定决策列表和数据的结果 Y 的可能性成正比,乘以给定先前假设和预先挖掘条件的列表概率。 - -\[P(Y_X,D,alpha)\] - -给定决策列表和数据,是观察到的 y 的可能性。brl 假设 y 由 Dirichlet 多项式分布生成。决策列表 D 解释数据越多,可能性越高。\[P(D A、\lambda、\eta)\] - -是决策列表的优先分发。它将列表中规则数的截断泊松分布(参数\(\lambda\)与规则条件中特征值数的截断泊松分布(参数\(\eta\)相乘。 +$$ +p(y|x,d,\alpha) +$$ +给定决策列表和数据,是观察到的 y 的可能性。brl 假设 y 由 Dirichlet 多项式分布生成。决策列表 D 解释数据越多,可能性越高。 +$$ +p(d|A,\lambda,\eta) +$$ +是决策列表的优先分发。它将列表中规则数的截断泊松分布\lambda与规则条件中特征值数的截断泊松分布(参数\\eta相乘。 如果一个决策列表能够很好地解释结果 Y,并且根据先前的假设,它具有很高的后验概率。 贝叶斯统计中的估计总是有点棘手,因为我们通常不能直接计算出正确的答案,但是我们必须绘制候选者,对他们进行评估,并使用马尔可夫链蒙特卡罗方法更新后验估计。对于决策列表,这更为棘手,因为我们必须从决策列表的分布中提取数据。BRL 的作者建议首先绘制一个初始决策列表,然后对其进行迭代修改,从列表的后分布(决策列表的马尔可夫链)中生成决策列表的样本。结果可能依赖于初始决策列表,因此建议重复此过程以确保列表的多样性。软件实现中的默认值是 10 次。以下配方告诉我们如何绘制初始决策列表: -• 带 FP 增长的矿前模式。 +- 带 FP 增长的矿前模式。 -• 从截断的泊松分布中采样列表长度参数 m。 +- 从截断的泊松分布中采样列表长度参数 m。 -• 对于默认规则:对目标值的 Dirichlet 多项式分布参数\(\theta_0\)进行采样(即在没有其他应用时应用的规则)。 +- 对于默认规则:对目标值的 Dirichlet 多项式分布参数\(\theta_0\)进行采样(即在没有其他应用时应用的规则)。 -• 对于决策列表规则 j=1,…,m,do: +- 对于决策列表规则 j=1,…,m,做以下处理: -对规则 J 的规则长度参数 L(条件数)进行采样。 + - 对规则 J 的规则长度参数 L(条件数)进行采样。 -从预采条件中取样长度为(L_j)的条件。 + - 从预采条件中取样长度为(L_j)的条件。 -对该部分的 Dirichlet 多项式分布参数进行抽样(即给定规则的目标结果的分布) + - 对该部分的 Dirichlet 多项式分布参数进行抽样(即给定规则的目标结果的分布) -• 对于数据集中的每个观测: +- 对于数据集中的每个观测: -从首先应用的决策列表中查找规则(从上到下)。 + - 从首先应用的决策列表中查找规则(从上到下)。 -根据适用规则建议的概率分布(二项式)得出预测结果。 + - 根据适用规则建议的概率分布(二项式)得出预测结果。 下一步是从这个初始样本开始生成许多新的列表,从决策列表的后分布中获取许多样本。 新的决策列表从初始列表开始取样,然后随机将规则移动到列表中的其他位置,或者从预先挖掘的条件向当前决策列表添加规则,或者从决策列表中删除规则。随机选择要切换、添加或删除的规则。在每个步骤中,该算法评估决策列表的后验概率(准确性和短性的混合)。大都会黑斯廷斯算法确保我们对具有高后验概率的决策列表进行抽样。这个过程为我们提供了许多来自决策列表分发的样本。BRL 算法选择后验概率最高的样本的决策列表。 -示例 - -这就是理论,现在让我们看看 BRL 方法的实际应用。示例使用了 Yang 等人(2017)提出的一种更快的 BRL 变种,称为可伸缩贝叶斯规则列表(SBRL)。我们使用 SBRL 算法来预测 i 首先必须离散化所有输入特征,以便 SBRL 算法工作。为此,我将基于分位数值频率的连续特征组合起来。我们得到以下规则: - -规则 +**示例** -如果 stds=1(规则[259]),则正概率=0.16049383 +这就是理论,现在让我们看看 BRL 方法的实际应用。示例使用了 Yang 等人[(2017)](https://christophm.github.io/interpretable-ml-book/rules.html#fn22)提出的一种更快的 BRL 变种,称为可伸缩贝叶斯规则列表(SBRL)。我们使用 SBRL 算法来预测[宫颈癌风险](https://christophm.github.io/interpretable-ml-book/cervical.html#cervical)。首先必须离散化所有输入特征,以便 SBRL 算法工作。为此,我将基于分位数值频率的连续特征组合起来。我们得到以下规则: -否则,如果荷尔蒙避孕药..年=[0,10)(规则[82]),则正概率=0.04685408,否则(默认规则),则正概率=0.2777778 +| rules | +| ------------------------------------------------------------ | +| If {STDs=1} (rule[259]) then positive probability = 0.16049383 | +| else if {Hormonal.Contraceptives..years.=[0,10)} (rule[82]) then positive probability = 0.04685408 | +| else (default rule) then positive probability = 0.27777778 | 注意,我们得到了合理的规则,因为当时的预测部分不是类结果,而是癌症的预测概率。 -这些条件是从使用 fp 增长算法预先挖掘的模式中选择的。下表显示了 SBRL 算法在构建决策列表时可以选择的条件池。在我作为用户允许的条件下,特征值的最大数目是 2。以下是十种图案的示例: - -预采条件怀孕次数=[3.67,7.33) - -Iud=0,stds=1 +这些条件是从使用FP增长算法预先挖掘的模式中选择的。下表显示了 SBRL 算法在构建决策列表时可以选择的条件池。在我作为用户允许的条件下,特征值的最大数目是 2。以下是十种图案的示例: -number.of.sexual.partners=[1,10),stds..time.since.last.diagnosis=[1,8] +| pre-mined conditions | +| ------------------------------------------------------------ | +| Num.of.pregnancies=[3.67,7.33) | +| IUD=0,STDs=1 | +| Number.of.sexual.partners=[1,10),STDs..Time.since.last.diagnosis=[1,8) | +| First.sexual.intercourse=[10,17.3),STDs=0 | +| Smokes=1,IUD..years.=[0,6.33) | +| Hormonal.Contraceptives..years.=[10,20),STDs..Number.of.diagnosis=[0,1) | +| Age=[13,36.7) | +| Hormonal.Contraceptives=1,STDs..Number.of.diagnosis=[0,1) | +| Number.of.sexual.partners=[1,10),STDs..number.=[0,1.33) | +| STDs..number.=[1.33,2.67),STDs..Time.since.first.diagnosis=[1,8) | -第一,性交=10,17.3,性病=0 - -Smokes=1,Iud..年。=[0,6.33) - -激素。避孕药。年。=[10,20),性病。数量。诊断=[0,1) - -年龄=[13,36.7) - -激素。避孕药=1,性病。数量。诊断=[0,1) - -number.of.sexual.partners=[1,10),stds..number.=[0,1.33) - -stds..number.=[1.33,2.67),stds..time.since.first.diagnosis=[1,8) - -接下来,我们将 SBRL 算法应用到。只有当预测自行车数量的回归问题转化为二元分类任务时,这才有效。我随意创建了一个分类任务,创建了一个标签,如果一天的自行车数量超过 4000 辆,则为 1,否则为 0。 +接下来,我们将 SBRL 算法应用到[租赁自行车预测任务](https://christophm.github.io/interpretable-ml-book/bike-data.html#bike-data)。只有当预测自行车数量的回归问题转化为二元分类任务时,这才有效。我随意创建了一个分类任务,创建了一个标签,如果一天的自行车数量超过 4000 辆,则为 1,否则为 0。 以下列表由 SBRL 学习: -规则 +| rules | +| ------------------------------------------------------------ | +| If {yr=2011,temp=[-5.22,7.35)} (rule[718]) then positive probability = 0.01041667 | +| else if {yr=2012,temp=[7.35,19.9)} (rule[823]) then positive probability = 0.88125000 | +| else if {yr=2012,temp=[19.9,32.5]} (rule[816]) then positive probability = 0.99253731 | +| else if {season=SPRING} (rule[351]) then positive probability = 0.06410256 | +| else if {yr=2011,temp=[7.35,19.9)} (rule[730]) then positive probability = 0.44444444 | +| else (default rule) then positive probability = 0.79746835 | -如果 yr=2011,temp=[-5.22,7.35)(规则[718]),则正概率=0.01041667,否则,如果 yr=2012,temp=[7.35,19.9)(规则[823]),则正概率=0.88125000,否则,如果 yr=2012,temp=[19.9,32.5](规则[816]),则正概率=0.99253731,否则,如果季节=春季(规则[351]),则 POSI 如果年=2011,温度=[7.35,19.9)(规则[730]),则主动概率=0.06410256;否则,则主动概率=0.79746835。 +让我们预测一下,2012 年,在 17 摄氏度的温度下,自行车的数量将超过 4000 辆。第一条规则不适用,因为它只适用于 2011 年的几天。第二条规则适用,因为这一天是在 2012 年,17 度是在时间间隔[7.35,19.9]。我们对这种可能性的预测是超过 4000 辆自行车的出租率是 88%。 -让我们预测一下,2012 年,在 17 摄氏度的温度下,自行车的数量将超过 4000 辆。第一条规则不适用,因为它只适用于 2011 年的几天。第二条规则适用,因为这一天是在 2012 年,17 度是在时间间隔[7.35,19.9]。我们对这种可能性的预测是超过 4000 辆自行车的出租率是 88%。4.5.4 优势 +### 4.5.4 优势 -本节一般讨论 if-then 规则的好处。 +本节一般讨论 IF-THEN规则的好处。 -如果-那么规则很容易解释。它们可能是可解释模型中最容易解释的。此声明仅适用于规则数量较少、规则条件较短(最多 3 个)以及规则组织在决策列表或不重叠的决策集中的情况。 +如果-那么规则很**容易解释**。它们可能是可解释模型中最容易解释的。此声明仅适用于规则数量较少、规则条件较短(最多 3 个)以及规则组织在决策列表或不重叠的决策集中的情况。 -决策规则可以像决策树那样具有表现力,同时更紧凑。决策树通常也会遭受复制的子树,也就是说,当左子节点和右子节点中的拆分具有相同的结构时。 +决策规则可以**像决策树那样具有表现力,同时更紧凑**。决策树通常也会遭受复制的子树,也就是说,当左子节点和右子节点中的拆分具有相同的结构时。 -使用 if-then 规则的预测很快,因为只需要检查几个二进制语句就可以确定哪些规则适用。 +使用 **IF-THEN 规则的预测很快**,因为只需要检查几个二进制语句就可以确定哪些规则适用。 决策规则对于输入特征的单调变换具有很强的鲁棒性,因为条件中只有阈值会发生变化。它们对于异常值也很健壮,因为它只在条件适用或不适用时才重要。 -if-then 规则通常生成稀疏模型,这意味着不包含许多特征。它们仅为模型选择相关特征。例如,默认情况下,线性模型为每个输入特征指定权重。不相关的特征可以简单地被 if-then 规则忽略。 + IF-THEN 规则通常生成稀疏模型,这意味着不包含许多特征。它们**仅为模型选择相关特征**。例如,默认情况下,线性模型为每个输入特征指定权重。不相关的特征可以简单地被 IF-THEN 规则忽略。 -像来自 ONER 这样的简单规则可以用作更复杂算法的基线。 +像来自 OneR 这样的简单规则可以**用作**更复杂算法的**基线**。 ### 4.5.5 缺点 -本节一般讨论 if-then 规则的缺点。 +本节一般讨论 IF-THEN 规则的缺点。 -关于 if-then 规则的研究和文献主要集中在分类上,几乎完全忽略了回归。虽然你可以将一个连续的目标划分为间隔,并将其转化为分类问题,但你总是会丢失信息。一般来说,如果方法可以同时用于回归和分类,则更具吸引力。 +关于 IF-THEN 规则的研究和文献主要集中在分类上,**几乎完全忽略了回归**。虽然你可以将一个连续的目标划分为间隔,并将其转化为分类问题,但你总是会丢失信息。一般来说,如果方法可以同时用于回归和分类,则更具吸引力。 -这些特征通常也必须是分类的。这意味着如果要使用数字特征,必须对它们进行分类。有很多方法可以将一个连续的特征分割成间隔,但这并不是一件微不足道的事情,并且会带来许多没有明确答案的问题。该特征应划分为多少个间隔?分割标准是什么:固定的间隔长度、分位数或其他什么?对连续特征进行分类是一个经常被忽视的问题,人们只使用下一个最佳方法(就像我在示例中所做的那样)。 +这些**特征通常也必须是分类的**。这意味着如果要使用数字特征,必须对它们进行分类。有很多方法可以将一个连续的特征分割成间隔,但这并不是一件微不足道的事情,并且会带来许多没有明确答案的问题。该特征应划分为多少个间隔?分割标准是什么:固定的间隔长度、分位数或其他什么?对连续特征进行分类是一个经常被忽视的问题,人们只使用下一个最佳方法(就像我在示例中所做的那样)。 -许多旧的规则学习算法容易过度拟合。这里给出的算法都至少有一些保护措施来防止过拟合:ONER 是有限的,因为它只能使用一个特征(只有当特征具有太多的级别或有许多特征时才有问题,这等同于多个测试问题),ripper 进行修剪和间隔 ESIA 规则列表对决策列表施加了优先分布。 +许多旧的规则学习算法容易过度拟合。这里给出的算法都至少有一些保护措施来防止过拟合:OneR 是有限的,因为它只能使用一个特征(只有当特征具有太多的级别或有许多特征时才有问题,这等同于多个测试问题),ripper 进行修剪和间隔 ESIA 规则列表对决策列表施加了优先分布。 -在描述特征和输出之间的线性关系时,决策规则是不好的。这是他们与决策树共享的问题。决策树和规则只能产生阶跃预测函数,其中预测的变化总是离散的阶跃,而不是平滑的曲线。这与输入必须是分类的问题有关。在决策树中,它们通过拆分来隐式分类。 +在描述特征和输出之间的**线性关系**时,**决策规则是不好的**。这是他们与决策树共享的问题。决策树和规则只能产生阶跃预测函数,其中预测的变化总是离散的阶跃,而不是平滑的曲线。这与输入必须是分类的问题有关。在决策树中,它们通过拆分来隐式分类。 ### 4.5.6 软件和备选方案 -在中实现了 ONER,本书中的示例使用了 ONER。OneR 也可以在 Java、R 和 Python 中实现。裂土器也在 WEKA 中实现。对于这些示例,我在 sbrl 中使用了 jrip 的 r 实现,它是可用的 as(我在示例中使用的),in 或 as。 +在 [R package OneR](https://cran.r-project.org/web/packages/OneR/)中实现了 OneR,本书中的示例使用了 OneR。OneR 也可以在 Java、R 和 Python 中的[Weka machine learning library](https://www.eecs.yorku.ca/tdb/_doc.php/userg/sw/weka/doc/weka/classifiers/rules/package-summary.html)实现。RIPPER也在 Weka中实现。对于这些示例,我在 [RWeka package](https://cran.r-project.org/web/packages/RWeka/index.html)中使用了JRIP 的R 实现,SBRL在[R package](https://cran.r-project.org/web/packages/sbrl/index.html)(我在示例中使用的), [Python](https://github.com/datascienceinc/Skater)或 [C implementation](https://github.com/Hongyuy/sbrlmod)中都是可使用的。 -我甚至不会列出学习决策规则集和列表的所有备选方案,而是指出一些总结工作。我推荐 Fuernkranz 等人(2012 年)的《规则学习的基础》一书,这是一本关于学习规则的广泛著作,适用于那些想深入研究该主题的人。它为思考学习规则提供了一个整体框架,并提出了许多规则学习算法。我还建议检查哪个工具开膛手,M5 规则,ONER,零件等等。if-then 规则可以用在线性模型中,如本书中关于 +我甚至不会列出学习决策规则集和列表的所有备选方案,而是指出一些总结工作。我推荐 Fuernkranz 等人(2012 年)的《规则学习的基础》一书,这是一本关于学习规则的广泛著作,适用于那些想深入研究该主题的人。它为思考学习规则提供了一个整体框架,并提出了许多规则学习算法。我还建议查看[Weka rule learners](http://weka.sourceforge.net/doc.dev/weka/classifiers/rules/package-summary.html),它实现了 RIPPER, M5Rules, OneR, PART等等其他更多。 IF-THEN 规则可以用在线性模型中,如本书中 关于[RuleFit algorithm](https://christophm.github.io/interpretable-ml-book/RuleFit.html#RuleFit)的内容。 +----- -\1. 《机器学习》11.1(1993):63-90。 -\2. 快速有效规则归纳〉,《机器学习程序》(1995 年)。115-123 页。 +18. Holte, Robert C. "非常简单的分类规则在大多数常用数据集上表现良好。" -\3. Letham,Benjamin 等人“使用规则和贝叶斯分析的可解释分类器:建立更好的中风预测模型。”《应用统计学年鉴》9.3(2015):1350-1371。 + Machine learning 11.1 (1993): 63-90.[↩](https://christophm.github.io/interpretable-ml-book/rules.html#fnref18) -\4. 《FP 增长算法的一种实现》,《第一届会议录》 +19. Cohen, William W.”快速有效的规则归纳。“Machine Learning Proceedings (1995). 115-123.[↩](https://christophm.github.io/interpretable-ml-book/rules.html#fnref19) -开放源代码数据挖掘国际研讨会频繁模式挖掘 +20. Letham, Benjamin, et al.”使用规则和贝叶斯分析的可解释的分类器: 创建一个更好的中风预测模型。"The Annals of Applied Statistics 9.3 (2015): 1350-1371.[↩](https://christophm.github.io/interpretable-ml-book/rules.html#fnref20) -实施-OSDM'05,1–5.(2005 年)。 +21. Borgelt, C. "一个FP增长算法的实现。"Proceedings of the 1st International Workshop on Open Source Data Mining Frequent Pattern Mining Implementations - OSDM ’05, 1–5. http://doi.org/10.1145/1133905.1133907 (2005).[↩](https://christophm.github.io/interpretable-ml-book/rules.html#fnref21) -\5. 杨、洪宇、辛西娅·鲁丁和玛戈·塞尔茨。第 34 届国际机器学习会议论文集 70。JMLR。组织,2017 年。 +22. Yang, Hongyu, Cynthia Rudin, and Margo Seltzer.“可扩展的贝叶斯规则列表。”Proceedings of the 34th International Conference on Machine Learning-Volume 70. JMLR. org, 2017.[↩](https://christophm.github.io/interpretable-ml-book/rules.html#fnref22) -\6. F_rnkranz、Johannes、Dragan Gamberger 和 Nada Lavra_。“规则学习的基础”,斯普林格科学与商业媒体(2012 年)。 +23. Fürnkranz, Johannes, Dragan Gamberger, and Nada Lavrač. “规则学习基础。”Springer Science & Business Media, (2012).[↩](https://christophm.github.io/interpretable-ml-book/rules.html#fnref23) ## 4.6 规则拟合 -Friedman 和 Popescu(2008)的 Rulefit 算法学习稀疏线性模型,其中包括以决策规则形式自动检测到的交互效应。 +Friedman 和 Popescu[(2008)](https://christophm.github.io/interpretable-ml-book/RuleFit.html#fn24)的 RuleFit 算法学习稀疏线性模型,其中包括以决策规则形式自动检测到的交互效应。 + +线性回归模型不考虑特征之间的相互作用。拥有一个像线性模型一样简单和可解释的模型,同时又集成了特征交互,这难道不方便吗?RuleFit 填补了这个空白。RuleFit 学习具有原始特征的稀疏线性模型,以及许多新的特征,这些特征是决策规则。这些新特征捕获原始特征之间的交互。RuleFit 自动从决策树生成这些特征。通过将拆分的决策组合成规则,可以将树中的每条路径转换为决策规则。节点预测将被丢弃,决策规则中仅使用拆分: -线性回归模型不考虑特征之间的相互作用。拥有一个像线性模型一样简单和可解释的模型,同时又集成了特征交互,这难道不方便吗?rulefit 填补了这个空白。rulefit 学习具有原始特征的稀疏线性模型,以及许多新的特征,这些特征是决策规则。这些新特征捕获原始特征之间的交互。RuleFit 自动从决策树生成这些特征。通过将拆分的决策组合成规则,可以将树中的每条路径转换为决策规则。节点预测将被丢弃,决策规则中仅使用拆分: +![4 rules can be generated from a tree with 3 terminal nodes.](https://christophm.github.io/interpretable-ml-book/images/RuleFit.jpg) 图 4.21:4 规则可以从具有 3 个终端节点的树中生成。 -这些决策树来自哪里?这些树被训练来预测感兴趣的结果。这样可以确保分割对预测任务有意义。任何生成大量树的算法都可以用于规则拟合,例如随机林。每棵树被分解成决策规则,作为稀疏线性回归模型(lasso)中的附加特征。 +这些决策树来自哪里?这些树被训练来预测感兴趣的结果。这样可以确保分割对预测任务有意义。任何生成大量树的算法都可以用于规则拟合,例如随机林。每棵树被分解成决策规则,作为稀疏线性回归模型(Lasso)中的附加特征。 -Rulefit 论文使用波士顿住房数据来说明这一点:目的是预测波士顿社区的房屋价值中位数。Rulefit 生成的规则之一是:如果房间数>6.64,一氧化氮浓度<0.67,则 1 或 0。 +RuleFit 论文使用波士顿住房数据来说明这一点:目的是预测波士顿社区的房屋价值中位数。RuleFit 生成的规则之一是:IF`房间数>6.64`AND`一氧化氮浓度<0.67`,THEN 1 ELSE 0。 -Rulefit 还提供了一个特征重要性度量,有助于识别对预测很重要的线性项和规则。根据回归模型的权重计算特征重要性。重要性度量可以针对原始特征进行聚合(这些特征以“原始”形式使用,并且可能在许多决策规则中使用)。 +RuleFit 还提供了一个特征重要性度量,有助于识别对预测很重要的线性项和规则。根据回归模型的权重计算特征重要性。重要性度量可以针对原始特征进行聚合(这些特征以“原始”形式使用,并且可能在许多决策规则中使用)。 -Rulefit 还引入了部分相关图,通过改变特征来显示预测的平均变化。偏相关图是一种模型不可知论方法,可用于任何模型,并在 +RuleFit 还引入了部分相关图,通过改变特征来显示预测的平均变化。偏相关图是一种模型不可知论方法,可用于任何模型,并在 ### 4.6.1 解释和示例 -由于 rulefit 最终估计了一个线性模型,所以解释与“normal”相同。唯一的区别是该模型具有从决策规则派生的新特征。决策规则是二进制特征:值 1 表示满足规则的所有条件,否则值为 0。对于规则拟合中的线性项,其解释与线性回归模型中的解释相同:如果特征增加一个单位,则预测的结果将根据相应的特征权重变化。 +由于 RuleFit 最终估计了一个线性模型,所以解释与"普通的"[线性模型](https://christophm.github.io/interpretable-ml-book/limo.html#limo)相同。唯一的区别是该模型具有从决策规则派生的新特征。决策规则是二进制特征:值 1 表示满足规则的所有条件,否则值为 0。对于规则拟合中的线性项,其解释与线性回归模型中的解释相同:如果特征增加一个单位,则预测的结果将根据相应的特征权重变化。 -在这个例子中,我们使用 rulefit 来预测给定日期的数量。该表显示了 rulefit 生成的五个规则,以及它们的套索权重和重要性。计算将在本章后面解释。 +在这个例子中,我们使用 RuleFit 来预测给定日期[租赁自行车](https://christophm.github.io/interpretable-ml-book/bike-data.html#bike-data)的数量。该表显示了 RuleFit 生成的五个规则,以及它们的套索权重和重要性。计算将在本章后面解释。 -**说明权重重要性** +| (描述)Description | (权重)Weight | (重要性)Importance | +| ------------------------------------------------------- | -------------- | -------------------- | +| days_since_2011 > 111 & weathersit in ("GOOD", "MISTY") | 793 | 303 | +| 37.25 <= hum <= 90 | -20 | 272 | +| temp > 13 & days_since_2011 > 554 | 676 | 239 | +| 4 <= windspeed <= 24 | -41 | 202 | +| days_since_2011 > 428 & temp > 5 | 366 | 179 | -| 自 2011 年起第 111 天及天气状况(良好、雾状)793 | 303 个 | -| -------------------------------------------- | ----- | -| 37.25<=hum<=90-20 | 272 个 | -| 温度>13&自 2011 年以来的天数>554 676 | 239 个 | -| 4<=风速<=24-41 | 202 | -| 自 2011 年以来的天数>428 天,温度>5 366 天 | 179 个 | - -最重要的规则是:“自 2011 年 11 月 11 日起的天数和天气状况”(“好”,“雾”),相应的重量为 793。其解释是:如果自 2011 年以来的天数大于 111 天且天气状况稳定(“良好”,“雾状”),那么当所有其他特征值保持不变时,预测的自行车数量将增加 793 辆。总共有 278 个规则是根据最初的 8 个特征创建的。相当多!但多亏了套索,278 只中只有 58 只的体重与 0 不一样。 +最重要的规则是:“自 2011 年 11 月 11 日起的天数和天气状况”(“好”,“雾”),相应的重量为 793。其解释是:如果自 2011 年以来的天数大于 111 天且天气状况稳定(“良好”,“雾状”),那么当所有其他特征值保持不变时,预测的自行车数量将增加 793 辆。总共有 278 个规则是根据最初的 8 个特征创建的。相当多!但多亏了Lasso,278 只中只有 58 只的体重与 0 不一样。 计算全局特征重要性表明,温度和时间趋势是最重要的特征: +![Feature importance measures for a RuleFit model predicting bike counts. The most important features for the predictions were temperature and time trend.](https://christophm.github.io/interpretable-ml-book/images/rulefit-importance-1.png) + 图 4.22:预测自行车数量的规则拟合模型的特征重要性度量。预测的最重要特征是温度和时间趋势。 特征重要性度量包括原始特征项的重要性和特征出现的所有决策规则。 **解释模板** -这种解释类似于线性模型:如果一个单元的特征(x)发生变化,则预测结果会发生变化,前提是所有其他特征保持不变。决策规则的权重解释是一种特殊情况:如果一个决策规则的所有条件都适用,那么预测的结果会改变(在线性模型中规则的已知权重)。 +这种解释类似于线性模型:如果一个单元的特征x_j发生变化,则预测结果 β_j会发生变化,前提是所有其他特征保持不变。决策规则的权重解释是一种特殊情况:如果一个决策规则的所有条件r_k都适用,那么预测的结果会改变(在线性模型中规则r_k的已知权重)。 -对于分类(使用逻辑斯蒂回归而不是线性回归):如果决策规则的所有条件都适用(r_k),则事件与无事件的概率会变化一个系数。 +对于分类(使用逻辑斯蒂回归而不是线性回归):如果决策规则的所有条件都适用α_k,则事件与无事件的概率会变化一个α_k系数。 -4.6.2 理论 +### 4.6.2 理论 -让我们深入研究 rulefit 算法的技术细节。Rulefit 由两个组件组成:第一个组件从决策树创建“规则”,第二个组件使用原始特征和新规则作为输入来适应线性模型(因此称为“Rulefit”)。 +让我们深入研究 RuleFit 算法的技术细节。RuleFit 由两个组件组成:第一个组件从决策树创建“规则”,第二个组件使用原始特征和新规则作为输入来适应线性模型(因此称为“RuleFit”)。 **步骤 1:规则生成** -规则是什么样子的?算法生成的规则具有简单的形式。例如:如果 x2<3 和 x5<7,则为 1,否则为 0。这些规则是通过分解决策树来构建的:到树中节点的任何路径都可以转换为决策规则。规则中使用的树被拟合来预测目标结果。因此,对分割和结果规则进行了优化,以预测您感兴趣的结果。您只需将导致某个节点的二进制决策与“and”链接起来,voil_,您就有了一个规则。人们希望能制定出许多多样而有意义的规则。梯度增强用于通过回归或分类 Y 来适应一组决策树,使用您的原始特征 X。每个结果树被转换成多个规则。不仅可以增强树,而且可以使用任何树集成算法来生成树以进行规则拟合。树系综可以用以下一般公式来描述: +规则是什么样子的?算法生成的规则具有简单的形式。例如:如果 `x2<3` 和` x5<7`,则为 1,否则为 0。这些规则是通过分解决策树来构建的:到树中节点的任何路径都可以转换为决策规则。规则中使用的树被拟合来预测目标结果。因此,对分割和结果规则进行了优化,以预测您感兴趣的结果。您只需将导致某个节点的二进制决策与“AND”链接起来,voilà,您就有了一个规则。人们希望能制定出许多多样而有意义的规则。梯度增强用于通过回归或分类 Y 来适应一组决策树,使用您的原始特征 X。每个结果树被转换成多个规则。不仅可以增强树,而且可以使用任何树集成算法来生成树以进行规则拟合。树系综可以用以下一般公式来描述: -\[f(x)=a_+\和 m=1 ^m a f m(x)\] - -m 是树的数目,而(f_m(x)是 m-树的预测函数。(α)是权重。袋装套装、随机森林、Adaboost 和 Mart 生产树套装,可用于规则拟合。 +$$ +f(x)=a_0+\sum_{m=1}^M{}a_m{}f_m(X) +$$ +m 是树的数目,而T_m是 m-树的预测函数。 α's 是权重。袋装套装、随机森林、Adaboost 和 Mart 生产树套装,可用于规则拟合。 我们从合奏的所有树中创造出规则。每个规则(r_m)的形式如下: -\[r_m(x)=\prod j \ in \ text t u m i(x_j \ in s jm)\] - -其中\(\text t m)是 m-th 树中使用的一组特征,i 是当特征\(x _j\)位于 j-th 特征的指定值子集(由树拆分指定)中时为 1 的指标函数,否则为 0。对于数字特征,是特征值范围内的间隔。间隔看起来像两种情况之一: +$$ +r_m(x)=\prod_{j\in\text{T}_m}I(x_j\in{}s_{jm}) +$$ +其中T_m是 m-th 树中使用的一组特征,I是当特征x_j位于 j-th 特征的指定值子集(由树拆分指定)中时为 1 的指标函数,否则为 0。对于数字特征,是特征值范围内的间隔。间隔看起来像两种情况之一: -\[X_S_JM,\TEXT LOWER_ +$$ +x_{s_{jm},\text{lower}}10”,另一个规则可能是“temp>15&weather='good'”。如果天气好,温度在 15 度以上,温度自动高于 10 度。在第二条规则适用的情况下,第一条规则也适用。对第二条规则的估计重量的解释是:“假设所有其他特征保持不变,当天气好,温度超过 15 度时,预测的自行车数量增加了”(β2)。但是,现在很明显,“所有其他特征都是固定的”是有问题的,因为如果规则 2 适用,规则 1 也适用,并且解释是无意义的。 +RuleFit 过程的最终产物是一个具有额外的花哨特征(决策规则)的线性模型。但由于它是一个线性模型,因此权重解释仍然是非确定性的。它和通常的线性回归模型一样带有相同的“脚注”:“……假设所有的特征都是固定的。”当你有重叠的规则时,它会变得更加复杂。例如,自行车预测的一个决策规则(特征)可能是:“temp>10”,另一个规则可能是“temp>15&weather='good'”。如果天气好,温度在 15 度以上,温度自动高于 10 度。在第二条规则适用的情况下,第一条规则也适用。对第二条规则的估计重量的解释是:“假设所有其他特征保持不变,当天气好,温度超过 15 度时,预测的自行车数量增加了”(β2)。但是,现在很明显,“所有其他特征都是固定的”是有问题的,因为如果规则 2 适用,规则 1 也适用,并且解释是无意义的。 ### 4.6.5 软件和备选方案 -Rulefit 算法由 Fokkema 和 Christoffersen(2017)在 R 中实现,您可以找到 +RuleFit 算法由 Fokkema 和 Christoffersen(2017)在 R 中实现,您可以找到[Python version on Github](https://github.com/christophM/rulefit)。 -一个非常相似的框架是一个 python 模块,它也从集合中提取规则。它在学习最终规则的方式上有所不同:首先,skope 规则根据回忆和精度阈值删除性能低下的规则。然后,根据逻辑项(变量+大/小运算符)的多样性和规则的性能(F1 分数)执行选择,删除重复的和类似的规则。最后一步并不依赖于使用 lasso,而是只考虑现成的 f1 分数和构成规则的逻辑术语。 +一个非常相似的框架是[skope-rules](https://github.com/scikit-learn-contrib/skope-rules),一个 也可以从集合中提取规则python 模块。它在学习最终规则的方式上有所不同:首先,skope 规则根据回忆和精度阈值删除性能低下的规则。然后,根据逻辑项(变量+大/小运算符)的多样性和规则的性能(F1 分数)执行选择,删除重复的和类似的规则。最后一步并不依赖于使用 Lasso,而是只考虑现成的 F1 分数和构成规则的逻辑术语。 +----- -\1. Friedman、Jerome H 和 Bogdan E Popescu。“通过规则集合进行预测性学习。”应用统计学的名称。Jstor,916–54。(2008 年)。 -\2. Fokkema、Marjolein 和 Benjamin Christoffersen。“预:预测规则集合”。(2017 年)。 +24. Friedman、Jerome H 和 Bogdan E Popescu。“通过规则集合进行预测性学习。”应用统计学的名称。JSTOR,916–54。(2008 年)。[↩](https://christophm.github.io/interpretable-ml-book/rulefit.html#fnref24) -4.7 其他可解释模型 +25. Fokkema、Marjolein 和 Benjamin Christoffersen。“预:预测规则集合”。[https://CRAN.R-project.org/package=pre](https://cran.r-project.org/package=pre)(2017 年)。[↩](https://christophm.github.io/interpretable-ml-book/rulefit.html#fnref25) -可解释模型的列表不断增长,而且规模未知。它包括简单的模型,如线性模型、决策树和朴素贝叶斯,但也包括更复杂的模型,这些模型结合或修改了不可解释的机器学习模型,使它们更易于解释。尤其是后一类模型的出版物目前正以高频率出版,很难跟上发展的步伐。这本书在这一章只取笑朴素的贝叶斯分类器和 k-最近的邻居。 +## 4.7 其他可解释模型 -### 4.7.1 朴素贝叶斯分类器 +可解释模型的列表不断增长,而且规模未知。它包括简单的模型,如线性模型、决策树和朴素贝叶斯,但也包括更复杂的模型,这些模型结合或修改了不可解释的机器学习模型,使它们更易于解释。尤其是后一类模型的出版物目前正以高频率出版,很难跟上发展的步伐。这本书在这一章只取笑朴素的贝叶斯分类器和K近邻。 -朴素贝叶斯分类器使用条件概率的贝叶斯定理。对于每个特征,它根据特征值计算类的概率。naive bayes 分类器独立地计算每个特征的类概率,这相当于特征独立性的强(naive)假设。Naive Bayes 是一个条件概率模型,它对类(c_k)的概率建模如下: +### 4.7.1 朴素贝叶斯分类器 -\[P(C_K_X)=\frac 1 Z P(C_K)\prod I=1 ^N P(X_I C_U K)\] +朴素贝叶斯分类器使用条件概率的贝叶斯定理。对于每个特征,它根据特征值计算类的概率。Naive Bayes分类器独立地计算每个特征的类概率,这相当于特征独立性的强(=naive)假设。Naive Bayes 是一个条件概率模型,它对类c_k的概率建模如下: -术语 z 是一个比例参数,它确保所有类的概率之和为 1(否则它们将不是概率)。类的条件概率是类概率乘以给定类的每个特征的概率,用 z 归一化。这个公式可以用贝叶斯定理导出。 +$$ +P(C_k|x)=\frac{1}{Z}P(C_k)\prod_{i=1}^n{}P(x_i|C_k) +$$ +术语 Z 是一个比例参数,它确保所有类的概率之和为 1(否则它们将不是概率)。类的条件概率是类概率乘以给定类的每个特征的概率,用 z 归一化。这个公式可以用贝叶斯定理导出。 由于独立性假设,朴素贝叶斯是一个可解释的模型。它可以在模块级别上解释。对于每个特征来说,它对某个类预测的贡献是非常明显的,因为我们可以解释条件概率。 -### 4.7.2 k-最近的邻居 +### 4.7.2 K近邻 -k-最近邻法可用于回归和分类,并利用数据点的最近邻进行预测。对于分类,k-最近邻方法为实例的最近邻分配最常见的类。对于回归,它取邻居结果的平均值。棘手的部分是找到正确的 k 并决定如何测量实例之间的距离,这最终定义了邻域。 + K近邻法可用于回归和分类,并利用数据点的最近邻进行预测。对于分类,k-最近邻方法为实例的最近邻分配最常见的类。对于回归,它取邻居结果的平均值。棘手的部分是找到正确的 k 并决定如何测量实例之间的距离,这最终定义了邻域。 -K-最近邻模型不同于本书提出的其他可解释模型,因为它是一种基于实例的学习算法。如何解释 k-最近邻? + K近邻模型不同于本书提出的其他可解释模型,因为它是一种基于实例的学习算法。如何解释 K近邻? 首先,没有要学习的参数,所以在模块级别上没有可解释性。 -此外,由于模型本身是局部的,没有显式学习的全局权重或结构,因此缺乏全局模型的可解释性。也许在地方一级可以解释?要解释预测,您总是可以检索用于预测的 k 个邻居。模型是否可解释完全取决于您能否“解释”数据集中的单个实例。如果一个实例包含成百上千个特征,那么它就不可解释了,我会争辩。但是,如果您没有一些特征或将实例简化为最重要的特征的方法,那么展示 K 最近的邻居可以为您提供很好的解释。 \ No newline at end of file +此外,由于模型本身是局部的,没有显式学习的全局权重或结构,因此缺乏全局模型的可解释性。也许在地方一级可以解释?要解释预测,您总是可以检索用于预测的 k 个邻居。模型是否可解释完全取决于您能否“解释”数据集中的单个实例。如果一个实例包含成百上千个特征,那么它就不可解释了,我会争辩。但是,如果您没有一些特征或将实例简化为最重要的特征的方法,那么展示 K近邻可以为您提供很好的解释。 \ No newline at end of file