一文速学数模-分类模型(二)决策树(Decision Tree)算法详解及python实现

本文详细介绍了决策树的工作原理、特点、构造方法、信息增益概念以及Python实现步骤,帮助读者理解并掌握决策树在数据挖掘中的应用。

摘要生成于 C知道 ,由 DeepSeek-R1 满血版支持, 前往体验 >

目录

一、决策树概述

二、工作原理及特点

三、决策树的构造

四、信息增益

五、决策树实现

1.构造数据集

2.计算熵值

3.按特征划分数据

4.选择最优划分算法

5.构造决策树

总结


 

一、决策树概述

决策树(Decision Tree)是在已知各种情况发生概率的基础上,通过构成决策树来求取净现值的期望值大于等于零的概率,评价项目风险,判断其可行性的决策分析方法,是直观运用概率分析的一种图解法。由于这种决策分支画成图形很像一棵树的枝干,故称决策树。在机器学习中,决策树是一个预测模型,他代表的是对象属性与对象值之间的一种映射关系。

分类树(决策树)是一种十分常用的分类方法。他是一种监督学习,所谓监督学习就是给定一堆样本,每个样本都有一组属性和一个类别,这些类别是事先确定的,那么通过学习得到一个分类器,这个分类器能够对新出现的对象给出正确的分类。这样的机器学习就被称之为监督学习。

机器学习中,决策树

### 关于八种异常检测算法的详细解释 #### 1. 监督异常检测 (Supervised Anomaly Detection) 监督异常检测依赖于已标注的数据集来区分正常和异常情况。通过这些标签,可以构建分类模型以预测新数据点的状态。常用的算法有逻辑回归、支持向量机和支持向量机变体如C-SVM、ν-SVM等,还有决策树及其集成版本随机森林。 ```python from sklearn.svm import SVC clf = SVC() clf.fit(X_train, y_train) predictions = clf.predict(X_test) ``` 这种类型的检测适用于拥有充足标记样本的情况[^2]。 #### 2. 无监督异常检测 (Unsupervised Anomaly Detection) 当缺乏足够的带标签数据时,则可采用无监督的方法来进行异常探测。这类方法利用了数据内在结构特性而不需额外的信息指导。典型代表包括k-means聚类、DBSCAN密度基空间聚类以及孤立森林(Isolation Forests),后者特别适合处理高维稀疏数据。 ```python from sklearn.ensemble import IsolationForest iso_forest = IsolationForest(contamination=0.1) y_pred = iso_forest.fit_predict(X) ``` 此方式能够有效应对未知类别或难以获取标签的情形。 #### 3. 半监督异常检测 (Semi-Supervised Anomaly Detection) 介于两者之间的是半监督模式,在这里仅有部分实例被赋予真值指示其状态;其余大部分保持未定。此类场景下常见的策略涉及自编码器(autoencoders)与生成对抗网络(GANs)相结合的形式——即所谓的“深度置信网”。 ```python import tensorflow as tf autoencoder = tf.keras.models.Sequential([ ... ]) history = autoencoder.fit(x_train_noisy, x_train, epochs=epochs, batch_size=batch_size, shuffle=True, validation_data=(x_val_noisy, x_val)) ``` 这种方法充分利用有限数量的手动标注资源提升整体效果。 #### 4. 在线异常检测 (Online Anomaly Detection) 在线环境下的挑战在于必须即时响应不断流入的新观测值,并及时调整内部参数适应变化趋势。为此设计了一系列增量更新机制,比如Hoeffding Trees(霍夫丁树)、Adaptive Resonance Theory Networks(ART神经网络),它们能够在不影响现有知识的前提下逐步纳入最新信息源。 ```python from skmultiflow.trees.hoeffding_tree import HoeffdingTreeClassifier ht = HoeffdingTreeClassifier() for i in range(n_samples): ht.partial_fit([X[i]], [y[i]]) ``` 该方案非常适合动态背景下连续监控任务的需求。 #### 5. 基于距离/相似度测量的距离型异常检测(Distance-based Anomaly Detection) 基于欧几里得或其他形式的距离测度计算个体间差异程度作为判断依据之一。LOF局部离群因子(Local Outlier Factor)便是其中一员,它衡量目标对象相对于周围邻居位置偏离平均状况的程度。 ```python from pyod.models.lof import LOF detector = LOF() detector.fit(X) scores_pred = detector.decision_function(X_test) ``` 这种方式直观易懂且易于实现,但在维度灾难面前可能遭遇瓶颈[^1]。 #### 6. 统计基础的概率型异常检测(Statistical-based Anomaly Detection) 运用经典统计理论框架内建立假设检验流程,例如格鲁布斯准则(Grubbs' test)用于单变量集合中寻找极端偏差成员。对于多元情形则存在马氏距离(Mahalanobis Distance)这样的工具可供选用。 ```python from scipy.stats import chi2 def mahalanobis(x=None, data=None, cov=None): """Compute the Mahalanobis distance.""" x_minus_mu = x - np.mean(data) inv_covmat = sp.linalg.inv(np.cov(data.T)) left_term = np.dot(x_minus_mu, inv_covmat) mahal_dist = np.dot(left_term, x_minus_mu.T) return math.sqrt(mahal_dist) ``` 上述过程严格遵循数理推导路径确保结论可靠性。 #### 7. 时间序列特定的时间序列异常检测(Time Series-specific Anomaly Detection) 考虑到顺序排列特点而专门定制化的解决方案,像ARIMA差分整合移动平均自回归模型(Autoregressive Integrated Moving Average Model)就专攻于此领域。近年来兴起的一些研究还探索了如何借助LSTM长短记忆单元(Long Short-Term Memory Units)捕捉长期依赖关系从而改善预报精度。 ```python model = Sequential() model.add(LSTM(units=50, return_sequences=True, input_shape=(X_train.shape[1],1))) model.compile(optimizer='adam', loss='mean_squared_error') model.fit(X_train, y_train, epochs=1, batch_size=1, verbose=2) ``` 这有助于更精准地把握随时间演变规律并提前预警潜在风险事件的发生可能性[^4]。 #### 8. 对抗性训练增强的异常检测(Adversarial Training-enhanced Anomaly Detection) 引入GAN架构理念创造一对相互对立又彼此促进的习实体:一个是负责生成看似真实的伪造品的生成器(generator),另一个则是试图分辨真假混杂输入流判别器(discriminator). USAD就是这样一种创新性的尝试,旨在克服传统单一视角局限性的同时提高泛化能力。 ```python class Generator(tf.keras.Model): def __init__(self): super().__init__() ... class Discriminator(tf.keras.Model): def __init__(self): super().__init__() ... generator_optimizer = tf.keras.optimizers.Adam(1e-4) discriminator_optimizer = tf.keras.optimizers.Adam(1e-4) checkpoint_prefix = os.path.join(checkpoint_dir, "ckpt") checkpoint = tf.train.Checkpoint(generator_optimizer=generator_optimizer, discriminator_optimizer=discriminator_optimizer, generator=generator, discriminator=discriminator) ``` 如此这般既强化了系统的稳健性和灵活性,也为后续改进留下了广阔的空间。
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包

打赏作者

fanstuck

你的鼓励将是我创作的最大动力

¥1 ¥2 ¥4 ¥6 ¥10 ¥20
扫码支付:¥1
获取中
扫码支付

您的余额不足,请更换扫码支付或充值

打赏作者

实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

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

余额充值