Machine Learning Specialization 学习笔记(4)

news/2024/9/22 18:44:42/

文章目录

  • 前言
  • 一、模型评估
    • 训练集
      • 常规训练集
        • 线性回归
        • 逻辑回归
      • 交叉验证集
    • 偏差与方差
      • 正则化
    • 学习曲线
    • 数据集的添加(数据增强)
    • 迁移学习
    • 精确率与召回率
  • 二、决策树
    • 基本概念
      • 决策树的工作原理
      • 决策树的优点
      • 决策树的缺点
      • 决策树算法的变体
      • 决策树在Python中的实现
      • 决策树的应用
      • 注意事项
    • 学习过程
      • 1. 特征选择
      • 2. 决策点的确定
      • 3. 递归构建
      • 4. 剪枝
      • 5. 停止决策的条件
      • 6.纯度
        • 熵(Entropy)
        • 纯度(Purity)
        • 信息增益(Information Gain)
        • 决策树中的使用
    • one-hot 独热编码
      • 特点和作用
      • 应用场景
      • 示例
      • 缺点
    • 多个决策树 Tree ensemble
      • 主要的集成树方法包括:
        • 简单随机抽样(有放回)bagged decision tree
      • 集成树的优点:
      • 集成树的缺点:
      • 集成树的应用:
      • 集成树的实现:
      • 减少特征数量(随机森林)
        • 随机森林的关键特点:
        • 随机森林的构建过程:
        • 随机森林的应用:
        • 随机森林的实现:
      • XGboost
  • 三、回归树
    • 回归树的构建过程
    • 回归树的优点
    • 回归树的缺点
    • 回归树的剪枝
    • 回归树的应用
    • 回归树的实现
  • 四、决策树与神经网络
    • 决策树(Decision Tree)
    • 神经网络(Neural Network)
    • 比较


前言

博客仅记录个人学习进度和一些查缺补漏。
学习内容:BV1Bq421A74G


一、模型评估

训练集

常规训练集

在这里插入图片描述
三七分配训练集和数据集。

线性回归

在这里插入图片描述

逻辑回归

在这里插入图片描述

交叉验证集

简单交叉验证集:
在这里插入图片描述

在这里插入图片描述
其中,60%训练集用于拟合参数,20%交叉集用于确定模型,20%测试集用于检测泛化效率
在这里插入图片描述
交叉验证(Cross-validation)是一种统计分析方法,用于评估并提高模型的泛化能力。它主要在学习>机器学习和统计学中使用,目的是对模型的性能进行更准确的估计,同时防止模型过拟合。交叉验证最常见的形式是k折交叉验证(k-fold cross-validation)。

k折交叉验证的步骤如下:

  1. 数据集分割:将整个数据集随机分成k个大小相等的子集。每个子集应该尽可能地代表整个数据集。

  2. 训练与验证:在k次迭代中,每次使用k-1个子集的数据作为训练集,剩下的那个子集作为验证集。这个过程重复k次,每次选择不同的子集作为验证集。

  3. 模型评估:每次迭代结束后,使用验证集评估模型的性能。记录每次迭代的性能指标,如准确率、召回率、F1分数等。

  4. 性能汇总:计算所有k次迭代的平均性能指标,这通常被认为是模型泛化能力的估计。

交叉验证的优点:

  • 减少过拟合风险:通过在不同的数据子集上训练和验证,可以更全面地评估模型的性能。
  • 更有效的利用数据:特别是在数据量有限的情况下,交叉验证可以确保每个数据点都被用于训练和验证。
  • 评估模型稳定性:如果模型在不同的训练集和验证集上表现一致,那么可以认为模型是稳定的。

交叉验证的种类:

  • 简单交叉验证:整个数据集被分为训练集和测试集,仅进行一次训练和验证。
  • k折交叉验证:如上所述,数据集被分为k个子集,进行k次训练和验证。
  • 留一交叉验证(Leave-One-Out Cross-Validation, LOOCV):当数据集较小时使用,每次只留下一个样本作为验证集,其余作为训练集。
  • 分层交叉验证(Stratified K-Fold Cross-Validation):在分类问题中,确保每个折叠中类别的分布与整体数据集的分布相似。

偏差与方差

高偏差由于拟合不足,高方差由于过拟合,但有时候也会同时出现。
在这里插入图片描述
在这里插入图片描述

在这里插入图片描述

正则化

具体定义在前一章已经提过,此处不再赘述

当拉姆达过大或者过小时:
在这里插入图片描述
在这里插入图片描述

学习曲线

在这里插入图片描述
在这里插入图片描述
在这里插入图片描述

数据集的添加(数据增强)

数据增强是学习>机器学习和深度学习中常用的技术,特别是在图像处理和自然语言处理领域。它通过在原始数据上应用一系列变换,生成新的数据样本,以此来扩大训练集,提高模型的泛化能力和鲁棒性。以下是一些常用的数据增强方法:

  1. 几何变换:包括图像的翻转(水平、垂直)、旋转、缩放、平移、裁剪、错切等。这些变换可以帮助模型学习到图像的不同视角和尺寸,从而提高模型对图像变化的适应能力。

  2. 颜色变换:如亮度调整、对比度调整、饱和度调整、色调调整等。这些变换有助于模型在不同的光照和颜色条件下保持性能。

  3. 噪声注入:向图像中添加噪声(如高斯噪声、椒盐噪声)可以帮助模型学会忽略不重要的干扰,提高鲁棒性。

  4. 图像混合:如Mixup和CutMix技术,通过将两张或多张图像的部分区域混合在一起,生成新的图像样本。

  5. 基于模型的增强:使用生成对抗网络(GANs)或变分自编码器(VAEs)等深度学习模型来生成新的数据样本。

  6. 自动化数据增强:如AutoAugment和RandAugment,通过搜索算法自动找到最优的数据增强策略。

  7. 特定领域的增强:例如在医学图像中,可能需要特定的增强技术来保持图像的医学特性。

  8. 自适应数据增强:如AdaAugment,根据模型的实时反馈动态调整增强幅度,以适应模型的训练状态。

数据增强的选择和应用需要根据具体的任务和数据集特性来决定。例如,在图像分类任务中,常见的增强方法包括随机裁剪、翻转和颜色变换;而在自然语言处理任务中,则可能涉及到同义词替换、句子重组等技术。通过合适的数据增强,可以有效地提高模型的性能,减少过拟合的风险,并在有限的数据条件下训练出更加健壮的模型。

在这里插入图片描述
在这里插入图片描述
在这里插入图片描述
在这里插入图片描述
在这里插入图片描述
在这里插入图片描述

迁移学习

迁移学习是一种学习>机器学习技术,它允许一个已经训练好的模型被调整或者重新用于一个新的但相关的任务。这种方法特别适用于目标领域数据稀缺或训练资源有限的情况。通过迁移学习,可以利用在源领域学习到的知识来提高目标领域的学习性能,减少对大量标注数据的依赖,加快模型训练速度,并提高模型的泛化能力。

在深度学习领域,迁移学习的应用非常广泛,尤其是在计算机视觉和自然语言处理任务中。例如,可以使用在大型数据集上预训练的模型,如ImageNet,并通过微调来适应特定的图像识别任务。在自然语言处理中,预训练的语言模型如BERT或GPT可以在特定文本分类或命名实体识别任务上进行微调。

迁移学习面临的挑战包括领域适应性问题、知识迁移问题、计算资源问题、数据不平衡问题和可解释性问题。领域适应性问题涉及到如何使源领域和目标领域的数据分布尽可能接近,而知识迁移问题则是如何有效地将源领域中的知识迁移到目标领域。计算资源问题涉及到迁移学习通常需要大量的计算资源进行预训练模型的训练和微调,数据不平衡问题需要解决源领域和目标领域中数据分布不均衡的问题,而可解释性问题则是提高迁移学习的可解释性。

迁移学习的最新进展包括预训练模型的广泛应用、多任务学习的优化和元学习的探索。预训练模型在目标领域使用较少的数据进行微调,多任务学习利用源领域中的任务信息来提高目标领域的学习性能,元学习则是利用源领域中的任务信息来提高目标领域的学习性能。

总的来说,迁移学习作为人工智能领域的一个关键技术,其最新进展和挑战值得我们深入研究和探讨。通过不断地研究和实践,我们相信迁移学习将在未来的人工智能发展中发挥更加重要的作用。

在这里插入图片描述
因为前面的基本图像特征已经被学习,对于不同的图片,基本图像特征是相同的
在这里插入图片描述

精确率与召回率

假设你做的模型有99%的准确率,然而事实上只有0.5%的患者确实患有这种病,那么一个永远只会输出没病的函数准确率甚至高于神经网络的预测。但是这明显是无效的预测。
在这里插入图片描述

在这里插入图片描述

召回率(Recall)和精确率(Precision)是评估分类模型性能的两个重要指标,尤其在二分类问题中经常被用来衡量模型的效果。它们通常用于评估模型对于正类(positive class)的预测能力。

  1. 精确率(Precision)
    精确率衡量的是模型预测为正类的样本中,实际为正类的比例。它关注的是模型预测的准确性。精确率的计算公式为:
    [ \text{Precision} = \frac{TP}{TP + FP} ]

其中,TP(True Positives)是真正例的数量,即模型正确预测为正类的样本数;FP(False Positives)是假正例的数量,即模型错误预测为正类的样本数。

  1. 召回率(Recall)
    召回率衡量的是所有实际为正类的样本中,模型正确预测为正类的比例。它关注的是模型捕捉正类的能力。召回率的计算公式为:
    [ \text{Recall} = \frac{TP}{TP + FN} ]

其中,FN(False Negatives)是假负例的数量,即模型错误预测为负类的正类样本数。

在实际应用中,精确率和召回率之间往往存在权衡关系。提高精确率可能会降低召回率,反之亦然。这种权衡通常通过绘制精确率-召回率曲线(Precision-Recall Curve)来表示,曲线下面积(Area Under Curve, AUC)可以用来衡量模型的整体性能。
在这里插入图片描述

在某些情况下,我们可能会更关注精确率或召回率中的一个,这取决于应用场景。例如,在医疗诊断中,我们可能更倾向于提高召回率,以确保尽可能多的疾病病例被检测出来,即使这会导致一些健康的人被误诊。而在垃圾邮件检测中,我们可能更关注精确率,以减少将正常邮件误判为垃圾邮件的情况。

另一个相关的指标是F1分数(F1 Score),它是精确率和召回率的调和平均数,用于综合考虑两者的平衡:
[ F1 = 2 \times \frac{\text{Precision} \times \text{Recall}}{\text{Precision} + \text{Recall}} ]

F1分数越高,表明模型的精确率和召回率都越高。
在这里插入图片描述
强调更小值的平均值

二、决策树

基本概念

决策树是一种常用的学习>机器学习算法,属于监督学习范畴,用于分类和回归任务。它通过学习简单的决策规则从数据特征中推断出目标值。决策树模型的表示形式类似于树状图,其中每个内部节点代表一个特征上的判断,每个分支代表判断的结果,每个叶节点代表一个类别或值。
在这里插入图片描述
在这里插入图片描述

决策树的工作原理

  1. 特征选择:决策树在每个节点选择一个特征和阈值来分割数据集,通常选择能够最大程度提高信息增益(或其他标准,如基尼不纯度或均方误差)的特征。
  2. 树的构建:从根节点开始,递归地应用特征选择和数据分割,直到满足停止条件(如达到最大树深度、节点中的数据量小于阈值或无法进一步减少不纯度)。
  3. 剪枝:为了提高泛化能力,可以对树进行剪枝,即移除树的某些部分,以防止过拟合。

决策树的优点

  • 易于理解和解释:决策树的决策过程透明,容易解释和理解。
  • 模型鲁棒性:对数据中小的波动不敏感,不会像线性模型那样对异常值敏感。
  • 特征处理:可以处理数值型和类别型数据。

决策树的缺点

  • 容易过拟合:特别是在决策树很深时,容易对训练数据过度拟合。
  • 可能不稳定:不同的数据分割可能导致生成不同的树结构。

决策树算法的变体

  • ID3:使用信息增益作为选择标准。
  • C4.5:改进了ID3,使用信息增益比来选择特征,可以处理连续和缺失值。
  • CART(Classification and Regression Trees):既可以用于分类也可以用于回归,使用基尼不纯度或均方误差作为分割标准。

决策树在Python中的实现

在Python中,可以使用scikit-learn库中的DecisionTreeClassifierDecisionTreeRegressor来实现决策树。

from sklearn.tree import DecisionTreeClassifier# 创建决策树分类器实例
clf = DecisionTreeClassifier()# 训练模型
clf.fit(X_train, y_train)# 预测
y_pred = clf.predict(X_test)

决策树的应用

决策树广泛应用于各种领域,如金融风险评估、医疗诊断、客户细分、故障检测等。

注意事项

  • 在实际应用中,通常需要对决策树进行调参,如设置最大深度、最小样本分割等,以获得最佳性能。
  • 可以使用集成方法(如随机森林、梯度提升树)来提高决策树的稳定性和准确性。

学习过程

在这里插入图片描述
在这里插入图片描述

决策树的学习过程是通过构建一个模型来模仿决策树的决策路径,以便对数据进行分类或回归。这个过程可以分为几个关键步骤:

1. 特征选择

在决策树的每个节点,算法需要选择一个特征来分割数据。特征选择的目的是找到一个特征,使得按照该特征分割后的数据集的纯度(purity)最高。纯度可以理解为数据集中样本类别的一致性。特征选择的标准通常有以下几种:

  • 信息增益:基于熵的概念,选择能够最大程度减少熵(即减少不确定性)的特征。信息增益高的意味着使用该特征分割后,数据集的混乱程度降低得最多。

  • 信息增益比:是信息增益和特征熵的比值,用于选择那些信息增益高且不会导致太多分支的特征。

  • 基尼不纯度:用于衡量一个节点内样本的不纯度,基尼系数越小,表示样本的纯度越高。

2. 决策点的确定

一旦选择了一个特征,就需要确定该特征的一个阈值来分割数据。这个阈值通常是使得数据集按照该特征的某个值分裂后,子集的纯度最高。

3. 递归构建

决策树通过递归地选择特征和分割数据来构建。对于每个分割出的子集,算法都会重复特征选择和分割的过程,直到满足以下条件之一:

  • 达到最大深度:为了防止过拟合,可以设置树的最大深度。

  • 节点中的样本数量小于预定阈值:如果一个节点中的样本数量太少,可能无法有效地进行进一步的分割。

  • 无法进一步减少不纯度:如果按照任何特征分割数据都无法显著提高纯度,那么可以停止分割。

4. 剪枝

决策树容易过拟合,特别是当树很深时。剪枝是减少过拟合的一种方法,它通过移除树的某些部分来简化树的结构。剪枝可以在构建树的同时进行(预剪枝),也可以在构建完成后进行(后剪枝)。

5. 停止决策的条件

决策树的构建过程会在以下情况下停止:

  • 所有样本都属于同一类别:如果一个节点中的所有样本都是同一类别,那么这个节点就成为了一个叶节点。

  • 没有更多特征可以用来进一步分割数据:如果已经用完了所有特征,而数据集仍然不纯,那么当前节点也会成为叶节点。

  • 满足预设的停止条件:如最大深度、最小样本数量等。

通过这些步骤,决策树模型能够学习如何从特征中推断出目标变量,从而对新的数据样本进行预测。
在这里插入图片描述
在这里插入图片描述

6.纯度

在这里插入图片描述
在这里插入图片描述
在决策树的构建过程中,熵(Entropy)和纯度(Purity)是两个核心概念,用于评估数据集的无序程度和分类的清晰度。

熵(Entropy)

熵是一个来自信息论的概念,用于衡量数据集的不确定性或混乱程度。在决策树中,熵用来表示一个数据集中各类别样本分布的均匀程度。熵的值越高,数据集的不确定性越大,纯度越低。熵的计算公式如下:
[ H(S) = -\sum_{i=1}^{n} p_i \log_2 p_i ]
其中,H(S) 表示数据集 S 的熵, n 是数据集中不同类别的数目, p_i 是第 i 个类别在数据集中的比例。如果某个类别的比例为0,则认为该项为0,因为 0 log_2 0 被定义为0。

纯度(Purity)

纯度是衡量数据集分类清晰度的指标,通常与熵相对应。一个数据集的纯度可以认为是1减去该数据集的熵,即:
[ \text{Purity}(S) = 1 - H(S) ]
纯度的值越高,表示数据集中样本的类别越一致,不确定性越低。

信息增益(Information Gain)

信息增益是特征选择过程中的一个关键指标,它衡量了通过分割数据集获得的信息量。信息增益是基于熵的减少来计算的。如果我们用特征 A 来分割数据集 S ,那么信息增益 IG(S, A) 可以这样计算:

[ IG(S, A) = H(S) - \sum_{v \in \text{values}(A)} \frac{|S_v|}{|S|} H(S_v) ]

其中,values(A)是特征 A 可能取的值,S_v 是特征 A 取值为 v 时分割出的子集, |S| 和 |S_v| 分别是数据集 S 和子集 S_v 的样本数量,H(S)是当前的根节点的熵。

在这里插入图片描述
在这里插入图片描述

决策树中的使用

在决策树的构建过程中,我们通常选择那些能够最大化信息增益的特征作为决策点,因为这样的特征能够有效地减少数据集的不确定性,提高分类的清晰度。通过不断地选择最优特征和分割数据集,决策树逐渐生长,直到满足停止条件。

one-hot 独热编码

One-hot 编码(One-hot Encoding)是一种处理分类变量(Categorical Variables)的方法,广泛应用于学习>机器学习和自然语言处理等领域。在这种编码方式中,每个类别值都被表示为一个二进制向量,这个向量中只有一个元素是1,其余元素都是0,其中1的位置表示该类别的存在。

特点和作用

  1. 二进制表示:One-hot 编码通过将每个类别转换为一个独特的二进制向量,使得原本的分类变量可以被模型以数值的形式处理。

  2. 互斥性:One-hot 编码的向量表示形式保证了类别之间的互斥性,因为任何一个时刻只有一个类别是激活状态(1),其余都是非激活状态(0)。

  3. 无序性:One-hot 编码不包含类别之间的任何顺序或等级信息,它仅仅表示类别的存在与否。

应用场景

  1. 学习>机器学习模型输入:大多数学习>机器学习算法,如线性回归、逻辑回归、支持向量机等,都要求输入数据为数值型。One-hot 编码可以将类别型特征转换为数值型,使其可以被这些算法处理。

  2. 自然语言处理:在处理文本数据时,One-hot 编码可以用来表示单词、字符或其他语言单位的存在与否。

  3. 处理稀疏数据:在很多情况下,类别型特征的类别数可能非常多,但实际出现的类别数却相对较少,One-hot 编码可以有效地表示这种稀疏性。

示例

假设有一个颜色特征,包含红、绿、蓝三种颜色,One-hot 编码可以表示为:

  • 红色:[1, 0, 0]
  • 绿色:[0, 1, 0]
  • 蓝色:[0, 0, 1]

缺点

  1. 维度爆炸:当类别数非常多时,One-hot 编码会导致数据维度急剧增加,从而增加模型的计算负担和内存消耗。

  2. 忽略类别间关系:One-hot 编码不包含类别之间的任何顺序或等级信息,这可能会忽略一些有用的信息,比如有序的类别关系。

  3. 稀疏性:在处理大量类别的数据时,One-hot 编码会产生大量的稀疏向量,这可能会影响某些算法的性能。

尽管存在这些缺点,One-hot 编码仍然是处理分类变量的一种非常常见和有用的方法。在实际应用中,可以通过一些技术,如降维或嵌入(Embedding),来缓解One-hot 编码带来的问题。

多个决策树 Tree ensemble

单个决策树可能会对数据中的某个特征的微小变化产生高度敏感。
在这里插入图片描述
Tree ensemble(集成树)是一种集成学习方法,它结合多个决策树的力量来解决预测问题,通常用于分类和回归任务。集成树通过合并多个树的预测结果来提高模型的准确性和鲁棒性。这种方法的基本思想是“集思广益”,即多个弱预测模型的组合可以形成一个强预测模型。

主要的集成树方法包括:

  1. Bagging(Bootstrap Aggregating)
    • 随机森林(Random Forest)是Bagging方法的一个例子,它通过在原始数据集上进行多次重采样(有放回抽样)来构建多个决策树,每棵树都在不同的数据子集上训练。最终的预测结果是通过平均所有树的预测结果(回归问题)或多数投票(分类问题)得到的。
简单随机抽样(有放回)bagged decision tree

在这里插入图片描述
即使数据集中有重复数据,没关系,使用他们来训练一个决策树
在这里插入图片描述
其中B为总树数量,大概100左右

  1. Boosting

    • Boosting方法通过顺序地构建决策树,每棵树都尝试修正前一棵树的错误。例如,AdaBoost、Gradient Boosting和XGBoost都是基于Boosting的算法。这些方法通常更关注错误预测的样本,并给予它们更高的权重。
  2. Stacking

    • Stacking(堆叠泛化)涉及到训练多个不同的模型(不仅仅是树),然后使用一个新的模型(通常是线性模型)来结合这些模型的预测。每棵树或模型的输出成为新模型的输入。
  3. Extra Trees(极端随机树)

    • 这种方法与随机森林类似,但在构建树时引入更多的随机性。在选择分割点时,不仅考虑最佳分割,还会随机选择其他分割点,这有助于提高模型的多样性。

集成树的优点:

  • 提高准确性:通过组合多个树的预测,集成树通常比单棵决策树更准确。
  • 减少过拟合:集成树通过平均或投票减少单个树可能的过拟合问题。
  • 鲁棒性:集成树对异常值和噪声数据更具鲁棒性。

集成树的缺点:

  • 计算成本:训练多个树可能会增加计算时间和资源消耗。
  • 模型解释性:虽然单个决策树易于解释,但整个集成树模型的解释性较差。

集成树的应用:

集成树在许多领域都有应用,包括金融风险评估、医疗诊断、图像识别、自然语言处理等。

集成树的实现:

在Python中,可以使用scikit-learn库中的RandomForestClassifierRandomForestRegressorGradientBoostingClassifierGradientBoostingRegressor等来实现集成树。

from sklearn.ensemble import RandomForestRegressor# 假设 X 是特征数据,y 是目标变量
X = ...  # 特征矩阵
y = ...  # 目标变量# 创建随机森林回归模型
regressor = RandomForestRegressor(n_estimators=100, max_depth=3)  # n_estimators是树的数量# 训练模型
regressor.fit(X, y)# 进行预测
y_pred = regressor.predict(X_test)

集成树是学习>机器学习中非常强大的一类模型,它们在许多数据挖掘竞赛和实际应用中都取得了优异的成绩。

减少特征数量(随机森林)

在这里插入图片描述
K一般取到N的平方根个,随机森林的前身。

随机森林(Random Forest)是一种集成学习方法,用于分类、回归和其他任务,它通过构建多棵决策树并将它们的结果结合起来以提高预测准确性和控制过拟合。随机森林是Bagging(Bootstrap Aggregating)的一个实例,它通过在原始数据集上进行多次重采样来构建每棵树,并在构建每棵树时引入额外的随机性。

随机森林的关键特点:
  1. 自助采样(Bootstrap Sampling)

    • 每棵树都是在原始数据集的一个随机子集上训练的,这个子集是通过有放回抽样得到的,这意味着同一个样本可能被多次选中,而某些样本可能一次也不被选中。
  2. 特征随机选择

    • 在寻找最佳分割点时,随机森林不是考虑所有可能的特征,而是随机选择一部分特征,然后从中选择最佳分割点。这进一步增加了树之间的多样性。
  3. 多棵树的集成

    • 随机森林由多棵树组成,每棵树的构建都是独立的。在分类任务中,最终的预测结果是通过多数投票机制得出的;在回归任务中,通常是通过平均所有树的预测结果得出的。
  4. 减少过拟合

    • 由于树之间的随机性和独立性,随机森林通常具有很好的泛化能力,能够减少单棵决策树可能出现的过拟合问题。
  5. 适用性广

    • 随机森林可以处理数值型和类别型数据,不需要过多的数据预处理,如特征缩放,并且对于缺失数据也有一定的鲁棒性。
随机森林的构建过程:
  1. 选择样本

    • 从原始数据集中使用自助采样方法选择样本,对于每棵树,这个过程是独立的。
  2. 选择特征

    • 在每次分割时,随机选择一部分特征,然后从这些特征中选择最佳分割点。
  3. 构建树

    • 每棵树都尽可能地生长,直到达到最大深度或节点中的样本数量小于预定阈值。
  4. 集成预测

    • 对于分类问题,所有树的预测结果通过多数投票决定最终类别;对于回归问题,通过平均所有树的预测值得到最终预测。
随机森林的应用:

随机森林在许多领域都有应用,包括但不限于:

  • 金融风险评估
  • 客户细分
  • 医学诊断
  • 价格预测
  • 图像识别
随机森林的实现:

在Python中,可以使用scikit-learn库中的RandomForestClassifierRandomForestRegressor类来实现随机森林:

from sklearn.ensemble import RandomForestClassifier# 假设 X 是特征数据,y 是目标变量
X = ...  # 特征矩阵
y = ...  # 目标变量# 创建随机森林分类器
clf = RandomForestClassifier(n_estimators=100, max_depth=3, random_state=1)# 训练模型
clf.fit(X, y)# 进行预测
y_pred = clf.predict(X_test)

随机森林是一种非常强大且易于使用的学习>机器学习算法,它在许多数据集上都能提供出色的预测性能。

XGboost

刻意练习,将上一个决策树预测结果错了的部分,有更高的概率被选择进入下一个决策树的训练集。
在这里插入图片描述
XGBoost(eXtreme Gradient Boosting)是一种高效的梯度提升框架,它使用树的叠加技术来构建模型。XGBoost 是梯度提升算法的一种优化实现,**它通过逐步添加决策树来改进模型性能,每个树都尝试修正前一个树的预测误差。**这种方法通常可以提高模型的准确性,同时减少过拟合的风险。

XGBoost 的主要特点包括:

  1. 支持并行和分布式计算,可以在多个 CPU 或 GPU 核心上运行,提高训练速度。
  2. 具有高效的内存使用策略,可以在有限的内存情况下处理大规模数据。
  3. 提供了许多超参数来优化模型性能,如学习率、最大深度、最小样本数等。
  4. 支持 L1 和 L2 正则化,可以防止过拟合和减少模型复杂度。

XGBoost 的算法原理是基于梯度提升的,它通过迭代地构建决策树来逐步优化模型。在每一步中,XGBoost 会添加一个新的树,这棵树是基于之前所有树的预测残差构建的。XGBoost 还引入了正则化项,包括 L1 和 L2 正则化,以控制模型的复杂度并防止过拟合。

在实际应用中,XGBoost 可以处理各种类型的数据,包括连续值、分类值和稀疏特征等。它也可以处理缺失值,通过在构建决策树时为缺失值创建特殊的分裂点。此外,XGBoost 还可以处理类别变量、高基数特征、连续特征和高维数据。

XGBoost 与其他梯度提升算法的主要区别在于它的优化策略和实现细节。例如,与 LightGBM 和 CatBoost 相比,XGBoost 提供了更多的超参数调整选项,并且支持更多的正则化技术。尽管 XGBoost 在许多方面表现出色,但它的超参数调优过程可能需要大量的计算资源和时间。

总的来说,XGBoost 是一个非常强大的学习>机器学习工具,它在各种学习>机器学习任务中都表现出色,如分类、回归和排名等。通过不断的实践和优化,XGBoost 可以在实际项目中发挥更大的作用。

在这里插入图片描述

三、回归树

如图,理论上是选择能最大减少方差的一个特征。
在这里插入图片描述回归树(Regression Tree)是决策树的一种,用于解决回归问题,即预测连续的数值输出。它通过将特征空间(input space)划分成一系列的区域,并为每个区域分配一个简单的模型(通常是常数值),来对目标变量进行建模。回归树的核心思想是将整个特征空间划分为更小的、更均匀的区域,使得每个区域内的目标变量尽可能地一致。

回归树的构建过程

  1. 选择最佳分割点

    • 回归树通过选择最佳的特征和分割点来构建树的每个节点。分割点的选择基于减少总体误差(如均方误差)的原则。
  2. 递归分割

    • 从根节点开始,递归地将数据集分割成更小的子集,直到满足停止条件(如最大树深、节点中的数据量小于预定阈值或无法进一步显著减少误差)。
  3. 停止条件

    • 当一个节点的数据量小于预定阈值、无法进一步减少误差或达到最大树深度时,停止分割。
  4. 叶节点的值

    • 每个叶节点通常被赋予该节点内所有样本目标变量的平均值。

回归树的优点

  • 易于理解和解释:回归树的结构清晰,容易解释和理解。
  • 不需要参数设定:与线性回归不同,回归树不需要预先设定模型参数。
  • 非参数化:回归树是一种非参数化方法,可以捕捉数据中的复杂关系。

回归树的缺点

  • 容易过拟合:回归树可能会生成过于复杂的模型,导致过拟合。
  • 结果的稳定性:对于不同的数据集,即使是微小的变化,也可能导致完全不同的树结构。

回归树的剪枝

为了防止过拟合,通常会对回归树进行剪枝。剪枝有两种主要方法:

  1. 预剪枝(Pre-pruning):

    • 在构建树的过程中提前停止树的生长。
  2. 后剪枝(Post-pruning):

    • 先让树完全生长,然后从底部开始剪除那些对总体误差没有显著贡献的分支。

回归树的应用

回归树广泛应用于各种领域,如金融市场分析、气象预测、房价预测等。

回归树的实现

在Python中,可以使用scikit-learn库中的DecisionTreeRegressor来实现回归树:

from sklearn.tree import DecisionTreeRegressor# 假设 X 是特征数据,y 是目标变量
X = ...  # 特征矩阵
y = ...  # 目标变量# 创建回归树模型
regressor = DecisionTreeRegressor(max_depth=3)  # 可以设置最大深度来控制过拟合# 训练模型
regressor.fit(X, y)# 进行预测
y_pred = regressor.predict(X_test)

通过调整DecisionTreeRegressor的参数,如max_depthmin_samples_splitmin_samples_leaf,可以控制树的复杂度和过拟合的风险。

四、决策树与神经网络

在这里插入图片描述
决策树和神经网络是两种不同的学习>机器学习模型,它们在结构、工作原理、优势和应用场景上有所区别:

决策树(Decision Tree)

  • 结构:由节点(决策条件)和分支(可能的结果)组成,类似于树状图。每个内部节点代表一个特征上的判断,每个分支代表判断的结果,每个叶节点代表一个类别或值。
  • 工作原理:从根节点开始,根据特征的阈值进行测试,根据测试结果将数据分配到子节点,直到达到叶节点,即得到最终的预测结果。
  • 优势
    • 易于理解和解释,模型的决策过程透明。
    • 不需要大量的数据预处理,如特征缩放。
    • 对缺失数据具有一定的鲁棒性。
    • 可以处理数值型和类别型数据。
  • 应用场景:适用于分类和回归问题,如金融风险评估、医疗诊断、客户细分等。

神经网络(Neural Network)

  • 结构:由多个层组成,包括输入层、隐藏层和输出层。每个层由多个神经元组成,神经元之间通过权重连接。
  • 工作原理:数据通过输入层进入网络,经过每层神经元的加权求和和激活函数处理,最终在输出层得到预测结果。通过反向传播算法调整权重,以最小化损失函数。
  • 优势
    • 能够捕捉复杂的非线性关系。
    • 通过大量数据训练,可以处理高维数据和大规模问题。
    • 适用于复杂的模式识别和学习>机器学习任务,如图像识别、自然语言处理等。
  • 应用场景:广泛应用于深度学习领域,包括语音识别、图像识别、自动驾驶、推荐系统等。

比较

  • 模型复杂度:神经网络通常比决策树更复杂,需要更多的参数和计算资源。
  • 训练时间:神经网络的训练时间通常比决策树长,尤其是在大型数据集上。
  • 泛化能力:神经网络由于其强大的非线性拟合能力,可能在复杂任务上具有更好的泛化能力,但也更容易过拟合。决策树相对简单,过拟合的风险较小,但可能无法捕捉数据中的复杂模式。
  • 解释性:决策树的决策过程容易解释,而神经网络通常被视为“黑箱”模型,解释性较差。
  • 数据需求:神经网络通常需要大量的数据来训练,而决策树对数据量的要求较低。

在实际应用中,选择哪种模型取决于具体问题的需求、数据的特性以及对模型解释性的需求。有时,也会将决策树和神经网络结合起来,形成混合模型,以利用两者的优点。例如,在集成学习中,可以同时使用决策树和神经网络作为基学习器。


http://www.ppmy.cn/news/1528962.html

相关文章

单例模式(饿汉式-懒汉式)

我给面试官讲解了单例模式后,他对我竖起了大拇指!https://blog.csdn.net/weixin_41949328/article/details/107296517?ops_request_misc%257B%2522request%255Fid%2522%253A%2522FAEE9ABD-432D-416C-98C6-9DD939138DEB%2522%252C%2522scm%2522%253A%252…

使用源代码编译R包的过程

R包的安装方式可以归纳为 源代码安装 和 二进制文件安装 两类: 源代码安装 是指从包的源代码进行编译安装。包括:① 通过CRAN安装源代码版本的包(如果没有二进制版本,或者指定了安装源代码)。② 从GitHub、Bioconducto…

Spark-ShuffleWriter-UnsafeShuffleWriter-钨丝内存分配

一、上下文 《Spark-ShuffleWriter-UnsafeShuffleWriter》中提到在进行Page内存分配时,调用了一行代码 MemoryBlock page memoryManager.tungstenMemoryAllocator().allocate(acquired); 这里就会走MemoryManager的钨丝内存分配,下面我们来详细看下 …

龙蜥8.9系统hadoop3.3.6上spark3.5.2安装(伪分布)

继续接着上篇的环境安装。 1、去清华的镜像源下载相关文件 https://mirrors.tuna.tsinghua.edu.cn/apache/spark/spark-3.5.2/ 2、解压缩 tar zxvf spark-3.5.2-bin-hadoop3.tgz3、移动到适当位置 mv spark-3.5.2-bin-hadoop3 /app/spark-34、下载scala https://www.scala-la…

golang学习笔记2-语法要求,注释与代码风格

注:本人已有C,C,Python基础,只写本人认为的重点。 一、语法要求 1.每个go文件必须有package声明且只能有一个 2.定义过的变量(全局变量除外)或使用import导入的包在之后必须使用 3.和C/C一样,一个项目只能有…

【django】局域网访问django启动的项目

目录 一、现象 二、django的settings.py配置 三、启动django项目 四、获取本机IP 五、局域网机器访问 前言:本机使用pycharm启动的项目,局域网其他机器访问 一、现象 django开发了接口,想给其他同志访问接口测试,无法通过I…

引入第三方字体图标icon

引入第三方字体图标icon 1.登录阿里巴巴icon库 2.点开ui提供的字体图标并下载 3.解压download 将font_4008950_i6fkbudh8ld文件放置项目中例如:放在assets文件夹下 4.然后再main.js中引入 import ‘/assets/font_4008950_i6fkbudh8ld/iconfont.css’; 5.项目中应…

三种springboot启动时加载方式

三种springboot启动时加载方式一个注解,两个接口,常用于数据预热:PostConstructimplements CommandLineRunnerimplements ApplicationRunnerSlf4j EnableAsync SpringBootApplication public class ApiApplication extends SpringBootServlet…