NLP:决策树

目录

什么是决策树?

决策树的起源      

决策树早期应用场景

商业策略规划

金融投资决策

决策树算法 

CART算法

ID3算法    

 C4.5算法

随机森林

树模型的工作原理解析: 

30个树模型应用场景例子:


什么是决策树?

        决策树是一种常见的机器学习模型,用于预测或分类。它是一种树状模型,其中每个内部节点表示一个特征或属性,每个分支代表一个决策规则,而每个叶节点代表一个预测结果或类别标签。决策树通过对输入数据集的特征进行递归分割,最终生成一棵树来进行预测。

        在决策树中,每个节点的分裂通过某个属性的取值来划分数据集,以便让划分后的子集更加纯净。纯净度的度量通常使用熵、信息增益、基尼指数等指标。决策树的构建过程是一个递归的过程,通过选择最佳的划分属性,不断地将数据集划分为更小的子集,直到满足停止条件为止。

        决策树具有易于理解和解释、能够处理非线性关系、对缺失值不敏感等特点,因此在实际应用中得到了广泛的应用。

        决策树可以用于分类问题和回归问题,包括但不限于以下几种主要的决策树算法:ID3、C4.5、CART(Classification and Regression Trees)、以及随机森林(Random Forest)等。

决策树的起源      

        决策树的起源可以追溯到20世纪50年代和60年代的研究工作。这一时期,决策树的早期形式被应用于决策分析运筹学中。

       

决策树在早期主要以一种图形化决策支持工具的形式被应用于决策分析和运筹学。它们帮助决策者在面对不确定性和复杂性时,清晰地理解各种可能的选择路径及其潜在结果。早期的决策树没有现代算法那么复杂,更多地依赖于专家知识和逻辑推理来构建。

### 决策树在决策分析中的应用:

1. **定义决策问题**:明确决策的目标和需要考虑的选项。
2. **构建决策树**:从决策节点开始,每个节点代表一个决策点,分支代表可选的行动方案。
3. **添加机会节点**:每个决策后可能会遇到的随机事件,如市场反应、竞争对手行动等。
4. **评估概率与结果**:为机会节点的每个分支赋予概率和预期结果。
5. **回溯分析**:从树的末端开始,计算期望值,根据期望值选择最佳路径。

### 图示:


决策节点 (□)
机会节点 (○)

                □ 决策点:开发新产品
               /                         \
         选择A                     选择B
        /     \                           /     \
      ○       ○                      ○       ○
    / | \      / | \                   / | \    / | \
 成功 中立 失败 成功 中立 失败 成功 中立 失败
(高收益)(中等)(亏损)(高收益)(中等)(亏损)(高收益)(中等)(亏损)
------------------------------------------------------------------------------------------------------------------------

早期决策树在运筹学中的应用主要关注于决策过程的结构化分析,尤其是在面对不确定性和风险时。在运筹学中,决策树被用于多个领域,包括但不限于项目管理、生产调度、库存控制和风险评估。

### 应用场景:项目管理中的风险评估

假设一个建筑项目管理团队需要决定是否采用一种新的建筑材料,这种材料可能会缩短建设时间,但也可能因为供应链问题导致延误。项目团队可以使用决策树来评估决策的潜在风险和收益。

#### 决策树图示:

```
                    □ 采用新材料?
                   /             \
                 是               否
                /                    \
              ○ 供应情况       △ 正常建设周期
             /     |    \       
           稳定  延迟  失败        
          /       |       \     
         △      △        △    
     缩短建设  建设延期   项目失败
      时间
```

#### 步骤:

1. **定义决策节点**(□):选择是否采用新的建筑材料。
2. **考虑随机事件**(○):新材料的供应可能是稳定的、有延迟、或者完全失败。
3. **评估结果**(△):每种供应情况都有一个预期的项目结果,比如缩短建设时间、建设延期或项目失败。
4. **概率和收益估算**:为每种供应情况分配概率和预期影响(可能是时间节省或延迟)。
5. **计算期望值**:使用概率和影响(如时间节省的经济价值或延迟造成的损失)计算每个决策的期望值。

#### 公式:

期望值的计算可以用以下公式表示:


EV(Decision) = Σ (Probability_i * Outcome_i)
 

其中 `EV(Decision)` 是决策的期望值,`Probability_i` 是第 `i` 种结果发生的概率,`Outcome_i` 是该结果的经济影响(正值表示收益,负值表示损失)。

6. **选择最佳策略**:比较不同决策的期望值,选择期望值最高的策略。

通过这个决策树,项目团队能够更加明晰地看到每个选择的潜在后果及其概率,从而做出更为信息化的决策。这种方法使得风险可量化,并能够帮助团队选择风险和收益平衡最优的方案。

=====================================================================

决策分析和运筹学都是管理科学的分支,它们都致力于通过定量方法来优化决策过程。尽管它们有很多相似之处,包括使用数学模型和统计分析来支持决策制定,但它们在重点和应用方法上有所不同。

### 决策分析:--------------------------------------------------------------------------------------------------

1. **焦点**:决策分析关注于帮助个人组织在存在不确定性多重目标时,通过结构化的方法做出最佳决策。它强调决策过程的每个阶段,包括定义问题、识别选择、评估风险和收益、考虑不确定性和偏好,以及最终做出选择。

2. **方法**:决策分析通常使用决策树、风险分析和效用理论。它会考虑各种可能的未来情景以及与这些情景相关的概率。

3. **应用**:决策分析通常应用于更高层次的战略决策,如企业投资、新产品开发、市场进入策略等。

### 运筹学:------------------------------------------------------------------------------------------------------

1. **焦点**:运筹学集中于研究和解决实际问题中的决策优化。它着重于开发和应用数学模型算法来改善系统的效率和效果。运筹学强调找到最优或近似最优的解决方案。

2. **方法**:运筹学使用一系列的数学工具,包括线性规划、整数规划、网络流、队列理论、仿真等。

3. **应用**:运筹学通常应用于操作和战术层面的问题,如生产调度、库存控制、物流优化、资源分配等。

### 相同点

- 两者都依赖于数据和定量分析来指导决策过程。
- 它们都使用模型来表示复杂系统和决策问题。
- 两者都能够考虑多种不同的决策方案和未来的不确定性。
- 它们都旨在提高决策质量,减少风险,并提高组织的效率和效益。

### 不同点

- 决策分析更多关注于决策本身的过程和方法,而运筹学更多关注于系统的操作和效率。
- 决策分析强调全面了解和分析各种可能的决策结果,而运筹学则侧重于找到和实施最优解。
- 运筹学的方法通常更为数学化,而决策分析会更多地考虑到决策者的主观判断和偏好。

尽管决策分析和运筹学有着不同的侧重点,但它们在实际应用中常常是互补的。例如,在供应链管理中,决策分析可以用来选择供应链设计,而运筹学可以用来优化供应链运作。

        具体来说,决策树最早被应用于决策分析和管理科学领域。在运筹学和管理科学中,研究人员开始使用树形结构来表示决策问题,并发展出一系列决策树算法和方法。这些早期的决策树模型和算法为后来机器学习中的决策树算法奠定了基础。

        在运筹学和管理科学中,研究人员通常使用树形结构来表示决策问题,这种树形结构通常被称为决策树或决策树模型。决策树模型可以用于表示决策问题中的不同决策路径和结果,有助于决策者理解不同决策选择的潜在结果,并进行决策分析。

        以下是一个具体的例子,展示了研究人员如何使用树形结构来表示决策问题的步骤:

假设一个零售商需要决定是否在新市场开设一家新店铺。为了进行决策分析,研究人员可以使用决策树来表示不同的决策路径和结果。

        1. 确定决策树的根节点:根节点表示决策问题的起始点。在这个例子中,根节点可以表示是否开设新店铺。

        2. 确定分支节点:分支节点代表决策树中的选择或决策路径。在这个例子中,分支节点可以表示不同的市场状况(如市场需求、竞争情况、经济环境等)以及对这些状况的预测。

        3. 确定叶节点:叶节点代表决策树中的结果或结论。在这个例子中,叶节点可以表示不同决策选择下的结果,如新店铺的成功、部分成功、失败等。

        4. 构建决策树模型:根据实际数据和专业知识,研究人员可以使用决策树算法构建一个模拟不同决策路径和结果的决策树模型。

        5. 决策分析:基于构建的决策树模型,研究人员可以模拟不同的决策路径,了解每种决策选择的风险和回报,并根据模拟结果为决策者提供决策建议。

        通过这些步骤,研究人员可以使用树形结构来表示决策问题,并帮助决策者理解不同决策选择的潜在结果,从而做出更明智和理性的决策。

        在计算机科学和机器学习领域,决策树的发展可以追溯到20世纪60年代晚期和70年代初期。在这个时期,研究人员开始将决策树引入到计算机科学领域,并发展出了一系列经典的决策树算法,如ID3(Iterative Dichotomiser 3)算法。

        此后,随着机器学习和数据挖掘领域的发展,决策树算法得到了进一步的研究和发展,涌现出许多改进和变种,如C4.5、CART、随机森林等。这些算法和方法使决策树模型在实践中得到了广泛的应用,并成为机器学习中的重要技术之一。

决策树早期应用场景
商业策略规划

早期决策树的使用可以帮助企业在商业策略规划中系统地评估各种不同的选择和可能的结果。以下是具体的步骤、图示和公式:

### 步骤1:定义问题
确切地定义企业面临的商业决策问题。例如,公司可能在考虑是否进入一个新市场。

### 步骤2:识别决策点
在决策树的起点,标明主要的决策点。例如,“是否进入新市场?”是第一个决策节点。

### 步骤3:列出可能的选择
为每个决策节点识别所有可能的选择。例如,“进入”和“不进入”。

### 步骤4:识别可能的结果
对于每个选择,确定可能的结果或次级决策点。例如,如果选择“进入”,可能的结果包括“高市场接受度”和“低市场接受度”。

### 步骤5:评估每个结果的概率和价值
为每个结果分配概率和预期的价值或成本。例如,“高市场接受度”可能有40%的概率,预期收益为500万元。

### 步骤6:构建决策树
从起始决策点开始,绘制出每个选择和随后可能的结果,形成一个完整的决策树结构。

### 步骤7:计算期望值
对于每个决策分支,计算每个选择的期望值(期望收益或成本)。期望值是每个可能结果的概率与其价值的乘积之和。

### 步骤8:选择最佳路径
根据计算出的期望值,选择具有最高期望值的决策路径。

### 步骤9:进行敏感性分析
对关键的概率或价值进行敏感性分析,了解它们的变化如何影响最终的决策。

### 步骤10:制定决策
基于决策树分析的结果,结合企业的战略目标和风险偏好,最终制定商业策略。

### 图示示例:


                        进入新市场?
                      /                  \
                   进入               不进入
                   /       \                       \
  高市场接受度  低市场接受度  无额外收益
             /      \                /       \
  高收益    中收益   低收益   亏损
 

### 公式:

计算决策分支的期望值(EV)使用以下公式:


EV(选择) = Σ(概率_i * 结果_i)
 

在这里,`EV(选择)` 表示某个决策选择的期望值,`概率_i` 是第 `i` 个结果发生的概率,`结果_i` 是该结果对应的价值。

例如,对于“进入”这个决策,如果“高市场接受度”有40%的概率且预期收益为500万元,而“低市场接受度”有60%的概率且预期收益为100万元,则期望值计算如下:


EV(进入) = (0.4 * 500万) + (0.6 * 100万) = 200万 + 60万 = 260万
 

决策树分析帮助企业可视化和量化每个决策的潜在经济后果,从而做出更加数据驱动的商业策略规划。

金融投资决策

在金融投资决策中,决策树可以帮助分析各种投资选择及其潜在的经济后果。以下是使用决策树进行金融投资决策的具体步骤、图示和公式:

### 步骤1:定义投资问题
确定你要解决的投资问题。例如,考虑是否投资于一项新的技术创业项目。

### 步骤2:识别决策点
在决策树的起点,标明主要的决策点。例如,“是否对新技术项目进行投资?”是第一个决策节点。

### 步骤3:列出可能的选择
为决策点识别所有可能的选择。例如,“投资”和“不投资”。

### 步骤4:识别可能的结果
对于每个选择,确定可能的结果。例如,如果选择“投资”,可能的结果包括“项目成功”和“项目失败”。

### 步骤5:评估每个结果的概率和价值
为每个可能的结果分配一个概率和预期的回报或损失。例如,“项目成功”可能有50%的概率,预期回报为高收益;“项目失败”可能有50%的概率,预期为亏损。

### 步骤6:构建决策树
从起始决策点开始,绘制每个选择和随后可能的结果,形成一个完整的决策树结构。

### 步骤7:计算期望值
对于每个决策分支,计算每个选择的期望值。期望值是每个可能结果的概率乘以其价值的总和。

### 步骤8:选择最佳路径
根据计算出的期望值,选择具有最高期望值的决策路径。

### 步骤9:进行敏感性分析
对关键的概率或回报进行敏感性分析,了解其变化如何影响最终的投资决策。

### 步骤10:做出投资决策
基于决策树分析的结果,结合投资者的风险偏好和投资目标,最终做出投资决策。

### 图示示例:


                        投资新技术项目?
                             /              \
                        投资          不投资
                       /         \                \
                项目成功  项目失败    无投资回报
               /             \         /       \
           高收益   低收益  微亏  大亏
 

### 公式:

计算期望值(Expected Value, EV)使用以下公式:


EV(选择) = Σ(概率_i * 价值_i)
 

这里,`EV(选择)` 表示某个选择的期望值,`概率_i` 是第 `i` 个结果发生的概率,`价值_i` 是该结果对应的价值(可以是负值,即亏损)。

例如,如果“项目成功”有50%的概率,预期回报为200万,而“项目失败”有50%的概率,预期亏损为50万,则投资选择的期望值计算如下:


EV(投资) = (0.5 * 200万) + (0.5 * -50万) = 100万 - 25万 = 75万
 

决策树为投资者提供了一个清晰的框架来评估投资项目的潜在风险和回报,并帮助做出基于数据的投资决策。敏感性分析进一步提供了对不确定性因素的洞察,增加了决策过程的稳健性。

决策树算法 

        决策树算法的基本思想是通过对特征空间的划分来构建树形结构,以实现对目标变量的预测或分类。决策树算法的基本公式涉及树的构建和分裂准则,这取决于所使用的具体算法。

CART算法

        CART(Classification and Regression Trees)算法的基本思想和公式

CART算法使用基尼系数(Gini index)作为分裂准则来构建决策树。基尼系数衡量了从数据集中随机抽取两个样本,其类别标签不一致的概率。CART算法的基本公式如下:

  1. 计算基尼系数(Gini index):

    [ Gini(t) = 1 - \sum_{i=1}^{J} p(i|t)^2 ]

    其中,t 表示当前节点,J 表示类别的数量,p(i|t) 表示在节点 t 中属于类别 i 的样本比例。

  2. 选择最佳的特征和分割点来最小化基尼系数:

    [ Gini_{split} = \frac{m}{n} Gini(t_{left}) + \frac{n-m}{n} Gini(t_{right}) ]

    其中,n 表示样本总数,m 表示样本在当前节点中的数量,t_left 和 t_right 表示由特征和分割点划分得到的左右子节点。

        通过选择最小化基尼系数的特征和分割点来进行树的构建,从而建立决策树模型。这个过程可以通过递归地进行节点的分裂来实现。

        这是CART算法的基本公式,它描述了基于基尼系数的决策树构建过程。实际上,还有其他决策树算法,如ID3、C4.5等,它们使用的分裂准则和构建过程略有不同。

ID3算法    

        ID3(Iterative Dichotomiser 3)是一种经典的决策树算法,用于进行分类任务。其基本思想是通过选择能够最大程度减少数据集混乱度(熵)或增益(信息增益)的特征作为节点进行划分,从而构建决策树模型。

1. 熵(Entropy)的计算:

   熵用来衡量数据集的纯度,可以用以下公式来计算:

    [ Entropy(S) = -\sum_{i=1}^{c} p_i \log_2(p_i) ]

   其中,S表示当前数据集,c表示类别的数量,pi表示数据集中类别i的样本占比。

2. 信息增益(Information Gain)的计算:

   信息增益表示使用特征A对数据集S进行划分所获得的纯度提升程度,可以用以下公式来计算:

   [ Gain(S, A) = Entropy(S) - \sum_{v \in Values(A)} \frac{|S_v|}{|S|} Entropy(S_v) ]

   其中,S表示当前数据集,A表示候选特征,Values(A)表示特征A的取值,Sv表示特征A取值为v时对应的数据子集。

3. 选择最佳特征进行划分:

   ID3算法通过计算信息增益来选择能够最大程度降低数据集混乱度的特征进行划分,从而构建决策树模型。

基于以上公式和思想,ID3算法通过递归地选择最佳特征进行节点划分,从而构建决策树模型。值得注意的是,ID3算法对于连续型特征的处理相对较为复杂,并且对于缺失值的处理有一定局限性。

 C4.5算法

        C4.5算法是一种经典的决策树算法,用于进行分类和回归任务。其基本思想是通过选择能够最大程度提升数据集纯度的特征进行节点划分,在此基础上使用信息增益比(Gain Ratio)来选择最佳划分特征,以构建决策树模型。

C4.5算法的基本思想可以总结如下:

1.   选择能够最大程度提升数据集纯度的特征进行划分。C4.5算法使用信息增益来衡量特征对数据集划分的贡献度,以选择最佳划分特征。

        信息增益表示使用特征A对数据集S进行划分所获得的纯度提升程度,可以用以下公式来计算:

      [ Gain(S, A) = Entropy(S) - \sum_{v \in Values(A)} \frac{|S_v|}{|S|} Entropy(S_v) ]

        其中,S表示当前数据集,A表示候选特征,Values(A)表示特征A的取值,Sv表示特征A取值为v时对应的数据子集。Entropy(S)表示数据集S的熵,Entropy(Sv)表示特征A取值为v时对应的数据子集的熵。

2.   使用信息增益比(Gain Ratio)来选择最佳划分特征。信息增益比是信息增益和特征熵之比,用来避免对取值较多特征的偏好。

        信息增益比表示信息增益和特征熵之比,用来选择能够最大程度降低数据集混乱度的特征进行划分,可以用以下公式来计算:

        [ GainRatio(S, A) = \frac{Gain(S, A)}{SplitInfo(S, A)} ]

       [ SplitInfo(S, A) = -\sum_{v \in Values(A)} \frac{|S_v|}{|S|} \log_2 \frac{|S_v|}{|S|} ]

        在这里,Gain(S, A)表示信息增益,SplitInfo(S, A)表示对于数据集S使用特征A进行划分的信息增益。Values(A)表示特征A的取值,Sv表示特征A取值为v时对应的数据子集。

3.   通过递归选择最佳特征进行节点划分,从而构建决策树模型。

C4.5算法的基本公式涉及信息增益和信息增益比的计算。具体而言,信息增益计算使用熵(Entropy)的概念,而信息增益比的计算则涉及信息增益和特征熵之比的计算。

由于公式较为复杂,这里无法提供具体的公式。但是,上文提到的信息增益比的计算公式是C4.5算法中的关键公式之一。

随机森林

随机森林是由多棵决策树组成的集成学习模型。它通过整合多个决策树的预测结果来进行分类或回归任务。以下是随机森林整合多棵决策树的一般步骤和示例代码:

        步骤:
1.  随机抽样:从原始训练集中进行有放回的随机抽样,生成多个不同的训练子集。这些子集将用于构建每棵决策树。
2.  随机特征选择: 在构建每棵决策树的过程中,对特征进行随机选择,以确保每棵树都是基于不同的特征子集进行构建的。这有助于提高模型的多样性,降低过拟合风险。
3.  决策树构建: 对于每个子集,使用基于CART(Classification and Regression Trees)算法构建一棵决策树。
4.  集成决策:对多棵决策树的预测结果进行整合,通常采用投票的方式(对于分类问题)或平均值的方式(对于回归问题)。

         在下面的示例中,我们使用了scikit-learn库中的RandomForestClassifier来构建一个随机森林分类器,并对鸢尾花数据集进行分类。我们将数据集划分为训练集和测试集,然后使用随机森林模型进行训练和预测。最后,我们评估了模型的准确性。

from sklearn.ensemble import RandomForestClassifier
from sklearn.datasets import load_iris
from sklearn.model_selection import train_test_split
from sklearn.metrics import accuracy_score

# 加载鸢尾花数据集
iris = load_iris()
X, y = iris.data, iris.target

# 划分训练集和测试集
X_train, X_test, y_train, y_test = train_test_split(X, y, test_size=0.3, random_state=42)

# 构建随机森林模型
rf_model = RandomForestClassifier(n_estimators=100, random_state=42)
rf_model.fit(X_train, y_train)

# 进行预测
y_pred = rf_model.predict(X_test)

# 评估模型准确性
accuracy = accuracy_score(y_test, y_pred)
print("随机森林模型的准确性:", accuracy)

树模型的工作原理解析: 

树模型是一种广泛应用于数据分析和机器学习的模型,通常用于分类和回归任务。它通过递归地将数据集分割成多个分支,建立出一个树状结构来进行决策。

         树模型的工作原理解析:

1. **选择最佳分割属性**:根据某种标准(如信息增益、基尼不纯度)从数据的特征中选择一个最佳的特征进行节点的分割。
2. **分割数据**:根据该特征的不同取值将数据集分割成若干个子集。
3. **建立节点**:为每个子集创建一个新的树分支。如果子集已经纯净(分类任务中子集中的所有数据属于同一类别,回归任务中方差很小),则该分支成为叶子节点。
4. **递归分割**:对每个子集重复步骤1-3,直至满足停止条件(如达到最大深度、节点中数据量小于阈值等)。

         图示示例:

假设我们有一个简单的二元分类问题,数据特征包括年龄和收入,目标是预测一个人是否会购买豪车。
                [数据集]
                /             \
          年龄<30?    年龄>=30?
          /   \                  /             \
       [否]  [是]   收入>100K?  收入<=100K?
                              /        \       /    \
                          [是]       [否]  [否]  [是]
 

         步骤:

1.   数据准备 :收集数据并准备特征变量和目标变量。
2.   特征选择 :根据算法选择最佳分割特征。
3.   模型构建 :从根节点开始,递归分割数据构建决策树。
4.   模型修剪 :通过剪枝避免过拟合。
5.   模型评估 :使用测试集评估树模型的性能。
6.   模型使用 :将树模型应用于实际问题中进行预测。

30个树模型应用场景例子:

1. 银行信用评分系统
2. 医疗诊断辅助系统
3. 股票市场行为预测
4. 零售客户细分
5. 电子邮件垃圾分类
6. 航空公司延误预测
7. 社交媒体内容推荐系统
8. 欺诈交易检测
9. 客户流失预测
10. 个性化营销活动
11. 设备故障预测
12. 天气预测模型
13. 供应链需求预测
14. 交通流量预测
15. 网络入侵检测系统
16. 能源消耗预测
17. 地震后果预测
18. 图像识别与分类
19. 文本情感分析
20. 保险风险评估
21. 地质勘探数据分析
22. 生态环境变化监测
23. 农作物病害预测
24. 水质监测系统
25. 声音识别
26. 基因表达数据分析
27. 智能家居控制系统
28. 房价预测模型
29. 药物反应预测
30. 在线教育学习行为分析

在这些场景中,树模型可以帮助我们从一系列特征中提取重要的决策规则,从而对目标变量进行预测或分类。树模型的直观性和解释性使其在多个领域都得到了成功的应用。

# 递归
def build_decision_tree(data):
    # 检查是否满足停止条件,如果满足则返回叶节点
    if 满足停止条件:
        return 创建叶节点
    # 选择最佳特征
    best_feature = 选择最佳特征(data)
    # 创建分支节点
    decision_tree = {'feature': best_feature, 'branches': {}}
    # 根据最佳特征的取值进行节点划分
    for value in best_feature.values:
        data_subset = 根据value划分data
        # 递归构建子节点
        decision_tree['branches'][value] = build_decision_tree(data_subset)
    return decision_tree

  • 23
    点赞
  • 27
    收藏
    觉得还不错? 一键收藏
  • 0
    评论

“相关推荐”对你有帮助么?

  • 非常没帮助
  • 没帮助
  • 一般
  • 有帮助
  • 非常有帮助
提交
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值