九大决策树模型
给大家介绍一下机器学习中常用的学习算法决策树🔥🔥🔥
决策树是一种强大的机器学习算法,它以树形结构的方式进行决策和预测。它是一个直观且易于理解的模型,被广泛应用于分类和回归问题的领域。决策树的优势在于它能够处理多种数据类型,包括分类特征和连续值特征,同时还能够捕捉特征之间的非线性关系。
文章目录
简介
一、ID3(Iterative Dichotomiser 3)
1.原理和特点
2.适用场景
3.算法流程
二、C4.5
1.原理和特点
2.适用场景
3.算法流程
三、CART(Classification and Regression Trees)
1.原理和特点
2.适用场景
3.算法流程
四、CHAID(Chi-squared Automatic Interaction Detection)
1.原理和特点
2.适用场景
3.算法流程
五、MARS(Multivariate Adaptive Regression Splines)
1.原理和特点
2.适用场景
3.算法流程
六、Random Forest(随机森林)
1.原理和特点
2.适用场景
3.算法流程
七、Gradient Boosting(梯度提升)
1.原理和特点
2.适用场景
3.算法流程
八、XGBoost(eXtreme Gradient Boosting)
1.原理和特点
2.适用场景
3.算法流程
九、LightGBM
1.原理和特点
2.适用场景
3.算法流程
本文相关链接
结束🌟
简介
决策树的构建基于一系列的判断条件和决策规则。它通过根据特征的值将数据集划分为不同的子集,然后在每个子集上递归地重复这个过程,直到达到停止条件。每个判断条件都对应于决策树的一个节点,而每个叶节点表示一个分类或回归结果。
分类问题:在分类问题中,决策树通过学习训练数据中的特征与类别之间的关联关系来进行预测。它通过选择最具区分性的特征来构建树形结构,并将数据集划分为不同的类别。决策树的每个内部节点表示一个特征及其取值,而每个叶节点表示一个类别。
回归问题:在回归问题中,决策树用于预测连续值的输出。它通过学习训练数据中的特征与目标变量之间的关系来进行预测。决策树的每个内部节点表示一个特征及其取值,而每个叶节点表示一个预测的连续值。
决策树分为九种:
ID3(Iterative Dichotomiser 3)
C4.5
CART(Classification and Regression Trees)
CHAID(Chi-squared Automatic Interaction Detection)
MARS(Multivariate Adaptive Regression Splines)
Random Forest(随机森林)
Gradient Boosting(梯度提升)
XGBoost(eXtreme Gradient Boosting)
LightGBM
一、ID3(Iterative Dichotomiser 3)
ID3(Iterative Dichotomiser 3)是一种经典的决策树算法,用于解决分类问题。它是基于信息增益准则的一种自顶向下的贪婪算法。
1.原理和特点
原理: ID3算法采用自顶向下的贪婪策略,通过选择具有最大信息增益的特征来构建决策树。
核心公式:
熵: Entropy ( S ) = − ∑ i = 1 c p i log 2 ( p i ) \operatorname{Entropy}(S)=-\sum_{i=1}^{c}p_{i}\log_{2}(p_{i}) Entropy(S)=−i=1∑cpilog2(pi)
pi是集合中第i类的样本比例,c是类别的数量
信息增益: I n f o r m a t i o n G a i n ( A ) = E n t r o p y ( P a r e n t ) − ∑ i = 1 k N i N ⋅ E n t r o p y ( C h i l d t ) Information\mathbf{\,Gain}(A)=\mathbf{Entropy}(\mathbf{Parent})-\sum_{i=1}^{k}{\frac{N_{i}}{N}}\cdot\mathbf{Entropy}(\mathbf{Child}_{t}) InformationGain(A)=Entropy(Parent)−i=1∑kNNi⋅Entropy(Childt)
A是候选特征,k是A的取值个数,Entropy(Parent)是父节点的熵,Entropy(Childt)是子节点的熵熵
特点:
简单易懂:ID3算法的原理和操作相对简单,易于理解和实现。
计算效率高:ID3算法的计算复杂度相对较低,适用于处理中小规模的数据集。
对缺失值不敏感:ID3算法可以处理缺失值的样本,不需要对缺失值进行特殊处理。
2.适用场景
数据集具有离散型特征和离散型输出。
数据集中包含缺失值。
数据集规模较小,特征维度适中。
3.算法流程
输入:训练集D,特征集A,停止条件。
如果D中所有实例属于同一类别C,或者特征集A为空,则返回单节点树,并将类别C作为该节点的类别标记。
根据特征选择准则(如信息增益)从特征集A中选择最优特征Ag。
以Ag作为当前节点的判断条件,将训练集D划分为不同的子集,每个子集对应于Ag的一个取值。
对于每个子集,递归地调用步骤2-4,构建子节点。
返回决策树。
python实例:决策树根据天气条件进行分类,以预测是否打球
import numpy as np
from collections import Counter
def entropy(labels):
"""计算熵"""
counter = Counter(labels)
probs = [counter[c] / len(labels) for c in set(labels)]
return -np.sum(probs * np.log2(probs))
def information_gain(data, feature_index, target_index):
"""计算信息增益"""
total_entropy = entropy(data[:, target_index])
feature_values = set(data[:, feature_index])
weighted_entropy = 0
for value in feature_values:
subset = data[data[:, feature_index] == value]
subset_entropy = entropy(subset[:, target_index])
weighted_entropy += len(subset) / len(data) * subset_entropy
return total_entropy - weighted_entropy
def id3(data, target_index, features):
"""ID3算法"""
labels = data[:, target_index]
if len(set(labels)) == 1:
return labels[0]
if len(features) == 0:
return Counter(labels).most_common(1)[0][0]
best_feature_index = max(features, key=lambda index: information_gain(data, index, target_index))
best_feature = data[0, best_feature_index]
tree = {
best_feature: {
}}
feature_values = set(data[:, best_feature_index])
remaining_features = [f for f in features if f != best_feature_index] # 更新特征列表
for value in feature_values:
subset = data[data[:, best_feature_index] == value]
if len(subset) == 0:
tree[best_feature][value] = Counter(labels).most_common(1)[0][0]
else:
tree[best_feature][value] = id3(subset, target_index, remaining_features)
return tree
# 示例用法
data = np.array([
[1, 'Sunny', 'Hot', 'High', 'Weak', 'No'],
[2, 'Sunny', 'Hot', 'High', 'Strong', 'No'],
[3, 'Overcast', 'Hot', 'High', 'Weak', 'Yes'],
[4, 'Rain', 'Mild', 'High', 'Weak', 'Yes'],
[5