目录
一、决策树
1、定义
决策树是一种经典的监督学习模型,它通过对数据集进行递归分区,最终形成一个树形结构,树上每个节点都对应一个关于特征的判断条件,而叶节点则是对应一个分类结果或者回归值。
决策树可以用于分类(C4.5、CART)和回归(CART),其中分类树解决离散变量,回归树解决连续变量。
决策树的构建过程一般包括以下几个步骤:
-
特征选择:选择最优的特征作为当前节点的分裂依据,这一步通常根据信息熵或者基尼不纯度进行计算。
-
结点分裂:根据选择的特征将样本集分为两个子集,每个子集对应一个分支节点,递归操作这一步直到达到停止条件,比如节点下的样本数达到某个阈值或者树深度达到某个限制。
-
树剪枝:在构建好的决策树基础上进行剪枝,剪枝的目的是防止过拟合,常用的剪枝方法有预剪枝和后剪枝。
决策树模型的优点包括:
-
可解释性强,易于理解和解释预测结果。
-
能够处理离散和连续变量,处理缺失值和异常值的能力较强。
-
模型可解释性好,可以通过树的结构探究特征之间的关系。
-
训练和预测速度快,适用于处理大量数据。
其缺点包括:
-
对于噪声和异常值较为敏感,容易出现过拟合问题。
-
对于特征空间较大的情况,容易产生过于复杂的树模型,表现力不足。
总体而言,决策树模型是一种非常常用的机器学习模型,特别适用于数据分析和解释。
2、举例说明
以分辨猫的过程来建立一个决策树模型。
有10个训练示例,输入X为三个特征:耳朵的形状、面部形状、是否有胡须。数据集中有5只猫和5只狗,输入特征3列,要预测的目标输出Y时最后一列,是猫则Y=1,不是则Y=0.在此示例中特征X具有分类值,即X仅具有几个离散值。
构建决策树之后得到的模型:
学习算法输出过程为树形结构,椭圆或者矩形为树中的节点,最顶层的节点称为根节点;所有椭圆形的节点,也就是除了最底层的矩形框外,都称为决策节点;最底层的矩形框称为叶子节点。
当我们有一个新示例(耳朵尖尖、脸圆圆,有胡须),从树根节点开始向下分类,首先判断耳朵形状特征,示例耳朵是尖的所以转向左子树,然后判断脸的形状特征,示例脸是圆的,所以转向左子树,这时已经到达叶子节点,也就得出结论,输出Y=1,即种类是猫。
notes:
两边子节点的划分属性不一致原因是:原样本经过Ear shape属性判断之后,样本划分为两个部分(Ear shape=Pointy; Ear shape=Floppy),这两个部分再根据熵或者基尼不纯度Gini系数计算最佳划分属性时,可能会得到不同的结果,即:可能是Face shape 也可能是 Whiskers。
二、学习过程
1、构造原则
决策树的构造原则包括以下几个方面:
-
确定分裂属性:在构造决策树时,需要选择一个合适的分裂属性。一般来说,选取分裂属性时要使得分裂后的数据集纯度更高,即同一类别的数据尽量聚在一起,不同类别的数据尽量分开。常用的分裂准则包括信息增益、增益率、基尼指数等。
-
停止条件:在构建决策树时,需要设定停止条件,以防止过度拟合。停止条件可以包括以下几个方面:一是节点中的数据属于同一类别;二是节点中的数据数量小于某个阈值;三是分裂后数据集的纯度不再提高等。
-
剪枝策略:为了避免过度拟合,需要采用剪枝操作对生成的决策树进行修剪。剪枝策略可以根据不同的方案来选择,如最小化损失函数、最大化验证集预测准确率等。
-
处理缺失值:在实际应用中,数据集中可能会出现缺失值,需要对其进行处理。常见的处理方法包括:忽略缺失值、用平均值或中位数填充缺失值、采用样本的权重来处理缺失值等。
-
处理连续型属性:在选择分裂属性时,如果有连续型属性,需要将其离散化。常用的方法包括二分法、K-Means聚类、决策树生成等。
以上是构造决策树时需要考虑的主要原则,具体实现上需要根据实际问题灵活运用。
2、学习过程
决策树是一种监督学习算法,用于分类和回归问题。其学习过程可以分为以下几个步骤:
-
数据准备:收集数据并对其进行预处理,包括数据清洗、特征选择、特征变换等。
-
特征选择:将数据集中每个属性作为分裂节点,通过计算属性对分类结果的影响来选择最优的分裂属性。
-
分裂节点:根据选择的最佳分裂属性将数据进行分裂,构建决策树。分裂后的数据会被划分到不同的节点中。
-
剪枝:在决策树生成过程中,可以通过剪枝操作来避免过拟合。可以采用预剪枝或后剪枝方法来实现。
-
测试算法:使用测试数据集来验证生成的决策树的准确性和泛化能力。
-
应用模型:将生成的决策树应用于实际问题中,对新的数据进行分类或回归预测。
以上是决策树的典型学习过程,具体实现还需要考虑算法的优化和改进等问题。
举例说明:
给定一个包含10个猫狗示例的训练集。
第一步,决定在根节点使用什么特征。假设使用耳朵形状特征作为根结点的特征,这意味着我们将决定查看我们所有的训练示例,根据耳朵形状将整个示例集拆分。
第二步,在决策节点处选择要使用的特征。
左子树使用了脸的形状特征,在将左子树示例集按照脸部特征划分为两个部分之后,会发现左边四个例子都是猫,右边一个例子不是猫,则创建相应的叶子节点。
右子树使用了是否有胡须特征,在将右子树示例集按照是否有胡子特征划分为两个部分之后,同上,设立两个相应叶子节点。
notes:
这些叶子节点每一个Cat或者Not cat中,示例都是纯净的,即不再有猫和狗的混合体。
3、构建决策树过程中的关键决定
构建决策树中,每个决策节点都做出了判断。
第一个关键决定:如何选择在每个节点上使用哪些特征进行拆分。
在根节点以及决策树的左右子树上,必须确定该节点是否有一些示例包含猫和狗的混合体。决策树将选择能将示例分类的纯度(获得尽可能接近所有猫和所有狗的子集)最大的特征。
第二个关键决定:决定何时停止拆分。
- 当该节点内示例百分百是同一类时停止拆分。
- 当一个节点被分裂后,导致决策树的深度超过了最大深度限制,深度可以人为设定。
- 当纯度得分的提升低于一个阈值时。
- 当一个节点的样本数低于一个阈值时。
notes:
在决策树中,节点的深度定义为从表示最顶部的根节点到该特定节点所需的跳数。
根节点所在的位置是depth 0,如果我们设定决策树最大深度为2.那么它在depth 2就会输出结果,将不会拆分此级别以下的任何节点,这时决策树永远也不会到达深度3。
限制决策树深度的一个原因是确保决策树不会太大太笨重,其次,通过保持树小,不太容易过度拟合。
三、节点使用特征的选择
1、纯度(purity)
在机器学习中,纯度是衡量数据集中样本类别分布的度量。纯度越高,说明数据集中样本类别越趋近于单一,即数据集中样本类别越纯。相反,纯度越低,说明数据集中样本类别越杂乱无序,即数据集中样本类别越不纯。
在决策树算法中,纯度是指一个数据集中只包含同一类别标签的程度。纯度越高,则在该数据集上进行预测的准确性也越高。常用的纯度度量方法有两种:基尼不纯度和信息增益(熵)。
2、基尼不纯度(Gini Impurity)
基尼不纯度(Gini impurity)是另一种衡量决策树节点纯度的度量方法。与熵不同,基尼不纯度主要用于处理多分类问题。
基尼不纯度的定义为:
其中,是分类数目,
是属于第
类的样本在节点中的占比。
基尼不纯度的取值范围为0到1之间,其中0表示节点中所有的样本均属于同一类别,而1表示节点中包含的样本均匀分布在各个类别中。
在决策树算法中,基尼不纯度用来评估节点的纯度,仅当节点中所有样本均属于同一类别时,基尼不纯度为0。与熵相似,基尼不纯度越小,节点中的样本类别越纯,选择该节点作为划分依据的收益就越大。
在实践中,对于分类问题,基尼不纯度是通常优选度量方法之一,因为计算速度较快,而且通常能够达到良好的分类效果。
3、熵(entropy)
在决策树中,熵是针对一个数据集中样本类别分布的度量,衡量一组数据不纯度的指标。用来表示数据集的混乱程度。熵越高,说明数据集中的样本类别越不集中,混乱程度越高。相反,熵越低,说明数据集中样本类别越趋近于单一,混乱程度越低。
熵的公式为:
其中,表示样本中属于第
个类别的概率,
表示总的类别数。
在决策树算法中,熵通常用来评估一个节点中样本的混乱程度。对于一个节点,如果它的熵越高,说明它包含的样本类别越多,需要更多的划分才能使得样本更加集中,因此选择该节点作为划分依据的收益就越大。
举例说明:
将定义为猫的示例的比例,即标签为1的示例的比例,我建立如图所示的函数来表示熵,熵函数通常表示为
,这里横轴为
值,纵轴为熵的值。
由图可知,当示例集为50:50时,这条曲线最高,此时,,熵为1,
代表示例集最不纯;相反的,如果示例集是要么全是猫、要么全不是猫,此时熵为0,
代表示例集是最纯的。
四、信息增益
1、信息增益
信息增益(Information Gain)是衡量在决策树中选择某个属性作为划分依据时,将样本数据划分为更具有一致性的子集的度量指标。它基于信息熵的概念,信息熵可以度量数据的不确定性,在决策树中,我们希望选择那些可以最大程度减少数据不确定性的属性作为划分依据。
假设我们有一个数据集,其中样本集合
中共有
个类别(即分类数目为
)。对于样本集合
中的任意一种类别
,我们定义它在
中的比例为
,则
的信息熵为:
当数据集按照属性
的值进行划分产生的子集
时,我们定义其信息增益为:
其中,是数据集
的熵,
是属性
取值的个数,
是子集
的样本数。
信息增益的意义在于,它度量了当我们使用属性进行数据集划分时,将会减少多少样本数据的不确定性。我们希望选择具有最大信息增益的属性作为划分依据,因为这将使得划分后的子集更具有一致性。
在实践中,选择基于信息增益的决策树算法(如ID3、C4.5)通常是一个不错的选择,它们可以解决多分类问题,并且在特征选择方面表现良好。
举例说明:
在决策树学习中,熵的减少称为信息增益。
将定义为等于左子树中具有正标签(猫)的示例的比例,将
定义为根结点中转到左子树的示例的比例,同样的, 将
定义为等于右子树中具有正标签(猫)的示例的比例,将
定义为根结点中转到右子树的示例的比例,还将
定义为根结点中正样本的比例。
在根节点选择特征进行拆分为例(为显示错误,指代狗)
1)、使用耳朵形状特征进行拆分
在左边,五只猫中有四只是,因此,在右侧,五分之一是猫,因此
。套用熵公式可得,左子树熵为
,右子树熵为
。
2)、使用脸的形状特征进行拆分
在左边,七只猫中有四只是,因此,在右侧,三分之一是猫,因此
。套用熵公式可得,左子树熵为
,右子树熵为
。
3)、使用是否有胡子特征进行拆分
在左边,四只猫中有三只是,因此,在右侧,六分之二是猫,因此
。套用熵公式可得,左子树熵为
,右子树熵为
。
此时需要得知的结论是,该选用哪一项特征作为根结点的特征。
一般而言,我们需要对这些熵值进行加权平均,如果一个节点中有许多示例并且具有很高的熵,那比一个节点中只有少数示例并且具有高熵更糟糕。因为熵作为杂质的度量,如果有一个非常大且不纯的数据集,那么与只有几个例子且不纯的一个子树相比,熵会更糟糕。
关键决定是,在根节点使用这三种可能的特征选择中,我们要选择哪一种。
与这些分裂中相关联的是左子树和右子树上的熵,将两个数字做加权平均值处理,因为在左右子树中,要衡量分支的熵还取决于有多少示例进入左右子树。
1)、使用耳朵形状特征进行拆分
10个例子中有5个去了左子树,所以可以将加权平均值计算为熵的
倍,然后加上有
的示例去了右子树,所以加上
乘以熵
。
2)、使用脸的形状特征进行拆分
10个例子中有7个去了左子树,所以可以将加权平均值计算为熵的
倍,然后加上有
的示例去了右子树,所以加上
乘以熵
。
3)、使用是否有胡子特征进行拆分
10个例子中有4个去了左子树,所以可以将加权平均值计算为熵的
倍,然后加上有
的示例去了右子树,所以加上
乘以熵
。
我们选择拆分的方法是计算这三个数字并选择最小的一个,提供了具有最低平均加权熵的左右子树。
但是这样并不准确,在构建决策树的方式中,我们实际上要对这些公式在决策数构建中遵循惯例,除了计算这个加权平均熵,我们需要将计算熵的减少与我们没有进行分裂的情况相比较。
计算根节点的熵,此时根节点有10个示例,其中有5只猫和5只狗,因此在根节点,则根结点的熵
。 我们实际要用来选择分裂的公式是通过根结点的熵减去左右子树的加权平均熵。
则这些计算出来的数字,被称之为信息增益,它衡量的是由于分裂而导致的树中熵的减少。
因为熵最初在根节点处为1并且通过进行拆分,最终得到较低的熵值,这两个值之间的差异是熵的减少。
notes:
决定何时不在进一步分裂的停止标准之一是熵的减少是否太小。当熵的减少程度太小时,可以适当的出结论,此时冒着因为分裂过度拟合的风险再增加树的大小是不必要的,如果熵的减少太小或低于阈值,就可以停止分裂。
2、利用信息增益构建决策树
-
收集数据集:收集包含多个特征和已知结果的数据集。
-
计算信息熵:对每个特征计算信息熵,以衡量该特征对数据集分类的不确定性,信息熵越小,说明该特征越有区分度。
-
计算信息增益:对每个特征计算信息增益,即数据集的信息熵减去该特征的信息熵,信息增益越大,说明该特征对分类起到了更重要的作用。
-
选择信息增益最大的特征作为当前节点的分裂条件,将数据集分成多个子集分别对应该特征不同的取值。
-
对每个子集,重复上述步骤直到子集中所有数据都属于同一类别或特征用尽。
-
构建决策树:将每个节点与相应的分裂条件构成决策树,直到所有数据都被分类或达到停止条件。
举例说明:
从根节点开始所有示例,根据计算所有三个特征的信息增益,确定耳朵形状是最好的分割特征, 在此基础上创建左右子分支,并将尖耳朵和松软耳朵的数据子集分别进入到左右子树。
先专注与左子树的情况,检验左子树中示例是否满足停止分裂的标准(节点中的所有东西都属于一个类),得出结论是不符合,则选择下一步需要拆分的特征,依次检查特征并且计算每一个特征的信息增益,就相当于是左子树中的根节点,在计算每个特征的信息增益后,发现此时耳朵形状特征的信息增益是0,脸型的信息增益最高,则通过脸型特征来继续拆分。
再次先专注于左子树,检查是否满足停止分裂的标准,发现实例中都属同一类(猫),满足停止条件,创建一个叶节点来预测猫。对于右子树发现只有一个示例是狗,同样也停止分裂,创建叶节点预测不是猫。
此时退回到根节点的右子树,进行同样的步骤选择相应特征划分示例。
notes:
在决定于根节点拆分示例之后,构建左子树的方法是在左子树上同样用进入左子树的示例来构建稍小些的决策树,在计算机中,这是递归算法的一个例子,也就是说,我们在根部构建决策树的方式是在左右支行上再构建其他较小的决策树。
五、独热编码One-hot
1、定义
独热编码(One-hot Encoding)是一种将离散特征进行编码的方法。在机器学习中,模型只能处理数值型数据,而大部分真实世界中的数据是非数值型的,如性别、国籍、颜色等等。这时候就需要将这些非数值型数据进行编码,独热编码就是其中一种方法。
独热编码的实现方式是将离散特征每个取值都转换为一个新的特征(称为虚拟变量),并将该特征用0/1表示,其中仅有一个取值为1,其他均为0。具体步骤如下:
-
确定离散特征的取值:根据数据集中离散特征的取值,确定需要创建几个虚拟变量。
-
创建虚拟变量:为离散特征的每个取值创建一个虚拟变量,将原始特征转换为多个虚拟变量。例如,如果某个离散特征有3个取值,就需要创建3个虚拟变量。
-
将虚拟变量赋值:将原始特征的取值对应的虚拟变量的值赋为1,其余虚拟变量的值赋为0。这样,每个样本的虚拟变量取值就形成了独热编码。
例如,有一个离散特征颜色,它有3个取值,分别是红、黄、蓝。使用独热编码的方式将颜色转换为虚拟变量:
颜色 | 颜色_红 | 颜色_黄 | 颜色_蓝 |
---|---|---|---|
红色 | 1 | 0 | 0 |
黄色 | 0 | 1 | 0 |
蓝色 | 0 | 0 | 1 |
经过独热编码后,原始的一个颜色特征被转换为三个新的特征,每个特征只有0或1两种取值。这样,机器学习模型就可以处理这些特征了。
2、举例说明
之前的例子中,对于耳朵形状特征不再是两个离散值了,而是三个可能的值,此时在决策树分裂时使用耳朵形状特征的话,就会创建三个分支。可以使用One-hot独热编码来将耳朵形状这个特征拆分为三个新的特征。
如上图这样,将原先的耳朵形状为尖的或者松软的特征,用独热编码方式变成三个新的特征:是否有尖耳朵、是否有松软耳朵、是否有椭圆耳朵。每个特征可以取得值为1或0。
注意到,在这三个新特征中,所有示例在这三个新特征中,都恰好只有一个值等于1,其余都是0,这就是这种特征构造方法称为One-hot encoding的原因,因为其中一个新特征将始终取1,即热特征。
我们现在就是构建了3个新特征,而不是1个特征取3个可能的值,每个特征都可以取两个可能的值0或1。即如果一个分类特征可以取k个可能的值,我们可以创建k个二进制特征(可以取的可能值为0或1)来实现 。
notes:
独热编码One-hot对分类特征编码的思想同样适用于训练神经网络。
如果我们将脸型和胡须的特征也用0或1 来表示,这样我们就有3个可能的耳朵形状值,1个可能的脸型值和1个可能的胡须值 这5个特征列表。这5个特征列表可以输入到新网络或者逻辑回归中,来训练猫分类器。
one-hot编码时一种不仅仅适用于决策树学习的技术,它允许我们使用0或1对分类特征进行编码,一边它可以作为输入馈送到神经网络,也可以将数字作为输入。可以用于新的网络或线性回归或逻辑回归训练。
3、连续值特征在决策树中的处理
在决策树中,处理连续值特征的常用方法是二分法。具体步骤如下:
-
根据连续值特征的取值,将其排序。
-
对于每两个相邻的取值,计算它们的平均值,作为一个候选的分割点。
-
对每个候选的分割点都进行一次二分,得到两个子集,其中一个子集中的样本的该特征值小于等于分割点,另一个子集中的样本的该特征值大于分割点。
-
对每个子集中的样本计算信息增益或其他评价指标,选取最优的分割点。
-
将数据集根据最优的分割点分为两个子集,将该特征划分为两个离散的取值,分别对应两个子集。
-
递归地对每个子集也进行上述操作,直到满足终止条件,最终形成决策树。
例如,假设一个样本的某个连续值特征的取值在[1,2,3,4,5,6]之间,选取相邻的两个取值作为候选的分割点,即1.5, 2.5, 3.5, 4.5, 5.5。对于分割点1.5,将数据集分为两个子集:特征值小于等于1.5的子集和特征值大于1.5的子集。对于每个子集,计算信息增益或其他评价指标,选取最优的分割点。递归地对每个子集也进行上述操作,直到满足终止条件,最终形成决策树。
不同的算法可能对连续值特征的处理方式有所不同,例如CART(Classification and Regression Trees)算法使用Gini指数来选取最佳的分割点,而ID3、C4.5算法则使用信息增益。
举例说明:
在数据集中,增加一个新特征,动物的重量,在猫和狗之间的平均重量里,尽管有些猫比狗中,但是大致猫比狗轻一些, 动物的体重是决定它是否是猫的有用特征。
纵轴上是猫和狗的种类, 可以将重量是否小于或等于某个阈值来拆分数据。当对重量特征进行拆分时,应该考虑阈值的多种取值,然后挑选一个表现最好的,即能带来最好信息增益的。
可以根据重量是否大于或对于某个值,比如说数字8,然后画一条直线,将例子分裂,计算两边的信息增益,选出信息增益最大的一个。
一般来说,根据该特征的取值大小将所有示例排序,然后对于每两个相邻的取值,计算它们的平均值,作为一个候选的阈值,然后计算按照每个候选阈值分割后的信息增益,选取信息增益最大的阈值将数据集划分为两个子集,递归的对两个子集继续进行上述操作,直至最终构建好决策树为止。
六、回归树
1、定义
回归树是一种决策树模型,用于建立输入特征与输出变量之间的非线性映射关系。它可以被看作是分段线性回归的一种扩展形式。
回归树的建立基于递归地二元划分输入空间,将输入空间分为一系列的非重叠的区域,每个区域对应树的一个叶子节点。在建立回归树的过程中,通过选择一些特征和对应的阈值,将数据划分为两个子集,每个子集对应树的一个分支节点。在每个分支节点,我们对数据的输出进行平均值计算,作为该节点的预测输出。
在进行预测时,输入数据会被递归地匹配到对应的叶子节点,预测输出即为该叶子节点的平均值。由于回归树采用二元划分的方式,因此可以建立非常复杂的非线性映射关系,且对异常值和噪声具有一定的鲁棒性。
回归树的建立过程类似于决策树,但是不同的是决策树建立的是离散型变量的判定规则,而回归树则建立的是连续型变量的判定规则。下面以一个简单的例子来说明回归树的建立过程。
假设我们有一组二维数据,其中输入特征为x1、x2,输出为y。我们希望建立回归树来预测y。首先,我们需要选择一个分裂变量和对应的分裂点,将所有的数据划分成两个子集,每个子集对应树上的一个分支节点。可以使用如下的算法来选择分裂变量和分裂点:
- 对每个特征f,将数据按照f值从小到大排序;
- 对于每个相邻的数据点,计算其中点,作为该特征的一个候选分裂点;
- 在所有特征的候选分裂点中,选择最优的分裂点。
我们可以使用如下的公式来计算最优的分裂点:
其中,j表示分裂的特征,s表示分裂的点,R1和R2表示分裂后的两个子集,c1和c2表示各自子集的预测输出。该公式的意思是,对于每个分裂点,计算分裂后两个子集的平方误差,然后选择最小的平方误差对应的分裂点。
在选择了最优的分裂点之后,我们将数据按照该分裂点进行划分,并在划分后的子集上递归执行上述步骤,直到满足停止条件为止。停止条件可以是树的深度达到预设值,或者划分后子集中的样本数量小于一定的阈值。
最终,我们可以得到一棵回归树,每个叶子节点对应一个树中的分裂点和一个预测输出。对于新的输入数据,可以根据其所处的叶子节点,预测对应的输出值。
总之,回归树将输入空间分为若干个不重叠的子集,并对每个子集内的数据进行平均值处理。这种分段的方式可以建立复杂的非线性映射关系,适用于各种回归问题。
2、回归树(Regression Trees)
将决策树泛化为讨论回归问题,预测一个数字。
使用之前例子中的耳朵形状、脸形状和是否有胡须特征作为输出x,将重量特征作为待预测的y标签。
首先为此回归问题建立一棵决策树,最左边的叶子节点中,有四只动物,重量分别为7.2、8.4、7.6、10.2,剩下的几个叶子节点中的动物重量情况如上图所示。
所以此时,若有一个测试示例归类到最左边的叶子节点,那么该如何预测这个尖耳朵和圆脸的动物的重量是多少。
此时,决策树将根据此处的训练示例中的重量平均值进行预测,这也被称为回归树。
3、构建回归树
首先构建根节点,按照三种特征作为分割生成子树。在构建回归树时,尝试减少每个数据子集的预测标签y的权重方差。
计算出每个左右子树的方差
再计算出左右子树的权重,即进入左右子树的示例的比例。计算拆分后的加权平均方差。选择拆分特征的好方法就是选择最低的加权方差值。与计算信息增益时类似,对加权平均方差再做计算,类似地测量方差的减少,计算拆分前的训练集中的所有示例的方差,然后减去拆分后的加权平均方差。
因此,在三个示例中,耳朵形状提供了方差减少的最大值。之后继续在划分好的子树中递归的选择特征并进行划分,直至达到不再分裂的标准。
七、使用多个决策树
1、树的集合
使用单个决策树的缺点之一就是该决策树可能对数据中的微小变化高度敏感。为了解决这个问题,我们通常构建多个决策树,称之为树集合。
在根结点处拆分的最佳特征是耳朵形状,从而产生这两个子树分支,然后在两个子树数据集中继续构建子树。
如果将10个例子中的其中一个尖耳朵、圆脸、没有胡须的猫换成耳朵松软、圆脸、有胡须的猫,此时只是更改了一个示例,拆分的最高信息增益就变成了胡须特征,而不是耳朵形状特征。
改变一个训练示例就会使得算法有所改变,显然这个算法不那么稳定。所以我们通常会训练多个决策树来解决这个问题,也就是训练一个树集合。
如果有一个新训练示例,那么可以将新示例在所有决策树上都运行一遍,得出结论后让所有的决策树投票决定新示例的最终预测。
使用树集合的原因是通过拥有大量决策树并让它们投票,可以使整体算法对任何一颗树所处理的事务不太敏感,使整体算法更加健壮。
2、有放回抽样
有放回抽样是指从样本集中抽取一个样本后,将其放回样本集中使得下一次抽样时该样本有可能被再次抽到的一种抽样方式。该方式下,每个样本在每次抽样时被抽中的概率都是相等的。相对于无放回抽样,有放回抽样的样本数量可以大于原始样本数量,因为有可能将同一样本多次抽出。有放回抽样常用于训练集的构建,特别是在使用集成学习方法时,如随机森林和Bootstrap Aggregating (Bagging)。
决策树中一般不涉及到样本的抽样,因为决策树是基于全部训练数据进行建模的。然而,有些特定的算法,如随机森林,会使用放回抽样来生成不同的决策树,从而得到更好的泛化能力。在随机森林中,每棵树的训练数据集都是通过从原始数据集中有放回地抽取样本得到的。这样做可以增加决策树的多样性,减少过拟合的风险。
有放回抽样应用于构建树的集合,构建多个随机训练集,这些训练集都与原始训练集略有不同。
以10个猫和狗为例,将10个训练示例放在一个箱子中,利用这个箱子,创建一个新的随机训练集,其中包含10个与原始数据集大小相同的示例。
在箱子中,随机选取一个训练样本,然后将其放回箱子中,然后再次随机挑选一个训练样本,依次有放回的挑选,会得到一个与原数据集大小相同的新数据集,并且其中会有重复的训练示例。
有放回抽样过程可以构建一个新的训练集,并且与原训练集相似但是并不相同。这是构建树集合的关键步骤。
3、随机森林
随机森林是一种基于决策树的集成方法,它是由多个决策树组成的集合。
随机森林的构建步骤如下:
-
从原始数据中无放回地随机抽取一部分样本,用于训练集的构建。
-
从训练集中有放回地随机抽取一部分样本,用于决策树的构建。
-
对于每棵决策树,重复以下步骤:
-
从所有特征中随机选择一部分特征,用于树的构建。
-
根据选择的特征,对数据进行划分,生成子节点。
-
递归地对子节点进行划分,直到达到停止条件(如节点中的样本数量小于某个值或树的深度达到某个阈值等)。
-
-
构建完成后,使用所有决策树对测试集中的数据进行分类/回归,最常返回每个样本被预测为每个类别的概率或预测值。
-
通过对预测结果进行多数投票(分类问题)或平均值(回归问题),最终确定测试集的预测结果。
需要注意的是,在步骤3中,特征的选择是随机的,而且在每个节点上的特征都可能不同,这样可以避免模型过拟合。同时,在步骤2中,有放回地抽样也可以使得每棵决策树的训练集不完全相同,从而增加模型的随机性。
随机森林具有以下优势:
-
随机森林对于输入数据的特征数量和类型的限制较小,适用于各种类型的数据。
-
随机森林对于噪声数据具有较高的鲁棒性,因为它是通过多棵树进行分类,在决策中具有更好的稳定性。
-
随机森林能够自动进行特征选择,即使在输入数据中存在无关特征,它也可以自动选择合适的特征。
-
随机森林支持并行处理,可以在多个CPU上同时运行,加快训练速度。
随机森林的缺点是:
-
随机森林在处理大数据集时的计算量较大。
-
随机森林模型相对于单棵决策树模型的解释性会降低。
举例说明:
如果给定一个大小为m的训练集,使用带放回抽样方法,创建一个大小为m的新训练集。然后在新的数据集上训练决策树,这样我们就会得到一个决策树。之后使用带放回抽样来生成另一个训练集M,在这个新的数据集上训练决策树,我们会得到另一个决策树。
以此类推,构建出B个决策树(建议使用64到228个),建造数量可能在100棵不同树。当尝试进行预测时,可以让这些树对正确的最终预测进行投票。
事实证明,将数量B设置的更大到超过某一个数量之后,最终不会取得更好的效果,反而会减慢计算速度,不会显著提高整体算法。
对以上算法进行修改,将该算法从反向决策树更改为随机森林算法。
关键思想是,即使使用这种带有替换过程的采样,有时还是会在根结点处使用相同的特征拆分。因此,对算法进行修改,尝试随机化每个节点处的特征选择,这可能导致树集彼此之间差异性更大。所以树集投票预测时,最终会得到一个更准确的预测。
如果有n个可以选择的特征,则创建一个含k(k<n)个特征的随机子集,算法仅从k个特征的子集中进行选择。k个特征子集中,选择具有最高信息增益的特征作为分割使用的特征。
当n非常大时,比如几十甚至几百时,k的典型取值是n的平方根。将参数范围缩小有助于避免过拟合,而且不用担心某些关键参数没选上,因为k特征子集是随机选取的,这个特征子集没选上还有下一个特征子集。
4、XGBoost算法
XGBoost(eXtreme Gradient Boosting)是一种梯度提升树算法。它通过将多个树模型相加来提高预测准确率,其中每个树模型都是基于先前树模型的残差建立的。它在机器学习竞赛和商业应用中都表现出了出色的性能。
以下是XGBoost算法的一些特点:
-
基于梯度提升树的算法,可以优化损失函数并在每一步中增强预测的准确性。
-
可以处理缺失值。
-
实现了并行处理,支持多线程和分布式计算。
-
支持多种损失函数、正则化和学习率调整。
-
具有优秀的性能,在大数据集和高维数据上表现出色。
-
可通过在树的构建中引入缺省值和最大深度等方式来防止过拟合。
在实际应用中,XGBoost算法可以用于回归、分类和排序任务。它的主要应用场景包括金融风控、推荐系统、广告点击率预测、搜索排序等。除了Python和R,XGBoost还提供了C++、Java和Scala的接口,可在多种编程语言中使用。
举例说明:
给定训练集,使用有放回抽样来创建大小为m的新训练集,然后在新训练集上训练决策树,重复B次。
第一次,通过以上步骤,创建一个训练集并训练一个决策树,然后在之后的每一次创建新的决策树时,不是从所有的m个等概率样本中选择的概率,而是更有可能的选择先前训练的树中表现不好的错误分类样本。不是查看所有训练示例,而是集中在尚未表现良好的示例子集上,并获得新的决策树。争取在下一个决策树上做得很好,这就是boosting的思路。
如图,查看刚构建的决策树,不看训练这棵树通过有放回抽样得到的m个示例的训练集,而是返回到原始的训练集中,查看原始训练集中的示例在该学习到的决策树中的预测结果。
然后,继续创建新的决策树,在使用有放回抽样方法生成新的训练子集时,都会有更高的机率从上一个决策树的错误分类样本中挑选。
XGBoost算法是一种boosting的集成学习算法,是将多个弱学习模型进行组合,从而获得更好的效果,使得组合后的模型有更强的泛化能力。
XGBoost算法代表极端梯度提升,这时一种非常快速和高效的提升树的开源实现。该算法还有一个很好的选择默认拆分的标准和何时停止拆分的标准。XGBoost的创新之一是内置了正则化防止过度拟合。
XGBoost实际上为不同的训练示例分配了不同的方法,所以实际上不需要生成很多随机选择的训练集,使得该算法比有放回抽样更有效。
左边是分类问题,右边是回归问题。
八、何时使用决策树
决策树、树集合和神经网络都是常用的机器学习算法,主要应用于分类和回归问题。以下是它们各自的优劣势和适用场景:
- 决策树
优势:易于解释,可以可视化,可处理数值和类别型数据,对于许多问题来说,精度足够高。
劣势:容易出现过拟合或欠拟合,对于复杂问题需要更复杂的模型,不适用于处理大型数据集
适用场景:决策树适用于小型和中型数据集,并且数据集中的特征和问题可以通过树的形式进行解释。
- 树集合
优势:相对于单个决策树,树集合能够处理更大,更复杂的数据集,并且通常比单个决策树更准确。
劣势:相对于决策树,难以解释和可视化,通常需要更多的计算资源。
适用场景:当决策树无法满足需要时,树集合是更好的选择。树集合适用于大型和复杂的数据集,并且易于扩展到处理新的特征和问题。例如,随机森林就是一种常用的树集合算法。
- 神经网络
优势:强大的模型学习能力,可以处理大量的特征和数据,适用于很多复杂问题。
劣势:相对于决策树和树集合,神经网络更难以解释和可视化,通常需要更多的计算资源和时间。
适用场景:神经网络适用于大型和复杂数据集,例如大型图像、声音、文本等。此外,如果数据集中存在非线性关系和难以解释的交互效应,神经网络也会比较有优势。
因此,在选择应用哪种算法时,需要考虑数据集的规模和复杂度,以及模型的可解释性要求,最终选择最适合的算法。
notes:
- 决策树和树集合通常适用于表格数据,也称为结构化数据。
- 不建议在非结构化数据上使用决策树和树集合。例如图象、视频、音频和文本。
- 决策树和树集合的一大优势是训练速度非常快。
- 小型决策树可能是人类可以解释的。
- 神经网络适用于所有类型的数据,包括结构化数据、非结构化数据和混合数据。
- 神经网络训练速度比决策树和树集合慢。
- 神经网络可以与迁移学习一起工作,对于许多应用程序,我们只有一个小的数据集,能够使用迁移学习来对更大的数据集进行预训练。
- 如果构建一个由多个机器学习模型协同工作的系统,将多个神经网络串在一起并进行训练可能比多个决策树更容易。