乐趣区

关于机器学习:机器学习决策树

前言

  • 决策树是一种罕用的机器学习算法,用于分类和回归问题。其次要思维是依据已知数据构建一棵树,通过看待分类或回归的样本进行逐渐的特色判断,最终将其分类或回归至叶子节点

要害概念

  1. 节点:决策树由许多节点组成,其中分为两种类型:外部节点和叶子节点。外部节点示意某个特色,而叶子节点示意某个类别或回归值。
  2. 分支:每个外部节点连贯着一些分支,每个分支代表着某个特色取值,示意样本在该特色上的取值。
  3. 根节点:决策树的根节点是整棵树的终点,即第一个判断特色的节点。
  4. 决策规定:决策树的每个节点示意一条决策规定,即对某个特色的判断,其决策规定是由已知数据集计算而得的。
  5. 剪枝:决策树为了防止适度拟合(Overfitting),通常会在构建好树之后进行剪枝操作,即去掉一些决策规定,以防止模型过于简单。

实现流程

  1. 数据预处理:将原始数据转换成决策树可解决的数据格式。对于分类问题,须要将类别变量编码为数字;对于连续变量,须要进行离散化解决。
  2. 特征选择:从所有可用的特色中抉择一个最佳的特色,用于划分数据集。罕用的特征选择算法有信息增益、信息增益比和基尼指数等。
  3. 决策树的构建:将数据集递归地划分成越来越小的子集,直到数据集不能再被划分,或者达到预约的进行条件。在每个节点上抉择最佳的特色,将数据集划分成两个子集,并在子集上递归地执行此过程,直到子集不能再被划分。
  4. 剪枝:为了防止过拟合,能够在构建完整棵树之后,对决策树进行剪枝。剪枝分为预剪枝和后剪枝两种办法。预剪枝是在决策树构建过程中,通过限度树的深度、节点数或其余条件,防止过拟合。后剪枝是在决策树构建实现之后,通过对子树进行剪枝,来缩小决策树的复杂度。
  5. 决策树的评估:通过测试集或穿插验证等办法,对决策树的性能进行评估。评估指标包含准确率、准确率、召回率、F1 分数等。
  6. 预测:将待预测的样本顺次从根节点开始进行判断,依照决策规定向下挪动,直到达到某个叶子节点,将样本归类于该叶子节点所代表的类别。

决策树优缺点

长处:

  1. 可解释性强:决策树模型的生成过程相似人类决策的过程,易于了解和解释,可帮忙决策者理解数据特色、属性间的关系和决策规定,有助于对数据的深入分析和开掘。
  2. 适用性广:决策树算法不须要对数据做过多的前置解决,如特色缩放、归一化等,能够间接解决离散或连续型的数据,且不受数据分布的影响,实用于各种类型的数据和问题。
  3. 可解决缺失值和异样值:决策树算法能够解决缺失值和异样值,因为在决裂节点时只需思考以后样本的特征值,而不须要思考其余样本的特征值。
  4. 速度快:决策树的训练和预测速度都很快,因为它的断定过程非常简单,只需对每个特色进行一次比拟,所以工夫复杂度为 O(n),其中 n 示意样本数量。

毛病:

  1. 容易过拟合:决策树的划分过程是基于训练数据的,因而容易呈现过拟合景象,导致模型泛化能力差。能够通过剪枝、限度树的深度、减少样本数等办法来解决过拟合问题。
  2. 不稳定性高:因为数据的渺小变动可能导致树结构的大幅变动,所以决策树的稳定性较差,须要采纳集成学习等办法来进步稳定性。
  3. 对间断值解决不好:决策树算法对连续型变量的解决不如对离散型变量的解决好,须要对连续型变量进行离散化解决。
  4. 高度依赖数据品质:决策树算法须要有足够的样本数据和较好的数据品质,否则容易呈现欠拟合和过拟合等问题,影响模型的性能。

典型的决策树算法

  1. ID3 算法:ID3(Iterative Dichotomiser 3)算法是决策树算法中最早的一种,应用信息增益来抉择最优特色。ID3 算法基于贪婪思维,始终抉择以后最优的特色进行宰割,直到数据集宰割实现或没有特色可宰割为止。
  2. C4.5 算法:C4.5 算法是 ID3 算法的改进版,应用信息增益比来抉择最优特色。C4.5 算法对 ID3 算法中存在的问题进行了优化,包含解决缺失值、解决间断值等。
  3. CART 算法:CART(Classification and Regression Trees)算法是一种基于基尼不纯度的二叉树构造分类算法,用于解决二分类和回归问题。CART 算法能够解决间断值和离散值的特色,可能生成二叉树构造,具备较好的可解释性。
  4. CHAID 算法:CHAID(Chi-square Automatic Interaction Detection)算法是一种基于卡方测验的决策树算法,用于解决分类问题。CHAID 算法可能解决多分类问题,不须要事后对特色进行解决。
  5. MARS 算法:MARS(Multivariate Adaptive Regression Splines)算法是一种基于样条插值的决策树算法,用于回归问题。MARS 算法可能解决间断值和离散值的特色,可能生成非二叉树构造,具备较好的拟合能力。

代码

基于 Python 的简略决策树实现,以 Iris 数据集为例:

from sklearn.datasets import load_iris
from sklearn.tree import DecisionTreeClassifier
from sklearn.model_selection import train_test_split
from sklearn.metrics import accuracy_score

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

# 划分数据集
X_train, X_test, y_train, y_test = train_test_split(X, y, test_size=0.3, random_state=42)

# 构建决策树
clf = DecisionTreeClassifier()
clf.fit(X_train, y_train)

# 预测
y_pred = clf.predict(X_test)

# 评估性能
accuracy = accuracy_score(y_test, y_pred)
print("Accuracy:", accuracy)
退出移动版