快速入门Python机器学习(18)

简介: 快速入门Python机器学习(18)

9 决策树(Decision Tree)


9. 1 决策树原理

image.png


9.2 信息增益与基尼不纯度

信息熵(约翰·香农 1948《通信的数学原理》,一个问题不确定性越大,需要获取的信息就越多,信息熵就越大;一个问题不确定性越小,需要获取的信息就越少,信息熵就越小)


集合D中第k类样本的比率为pk,(k=1,2,…|y|)

image.png


信息增益(Information Gain):划分数据前后数据信息熵的差值。信息增益纯度越高,纯度提升越大;信息增益纯度越低,纯度提升越小。


基尼不纯度

image.png


基尼不纯度反映从集合D中随机取两个样本后,其类别不一致性的概率。


方法

算法

信息增益

ID3(改进C4.5)

基尼不纯度

CART


9.3 决策树分类(Decision Tree Classifier

9.3.1类、属性和方法


class sklearn.tree.DecisionTreeClassifier(*, criterion='gini', splitter='best', max_depth=None, min_samples_split=2, min_samples_leaf=1, min_weight_fraction_leaf=0.0, max_features=None, random_state=None, max_leaf_nodes=None, min_impurity_decrease=0.0, min_impurity_split=None, class_weight=None, ccp_alpha=0.0)


参数

属性

类型

解释

max_depth

int, default=None

树的最大深度。如果没有,则节点将展开,直到所有叶都是纯的,或者直到所有叶都包含少于min_samples_split samples的值。

criterion

{'gini''entropy'}, default='gini'

测量分割质量的函数。支持的标准是基尼杂质的'基尼'和信息增益的''


属性

属性

解释

classes_

ndarray of shape (n_classes,) or list of ndarray类标签(单输出问题)或类标签数组列表(多输出问题)。

feature_importances_

ndarray of shape (n_features,)返回功能重要性。

max_features_

intmax_features的推断值。

n_classes_

int or list of int类的数量(对于单个输出问题),或包含每个输出的类的数量的列表(对于多输出问题)。

n_features_

int执行拟合时的特征数。

n_outputs_

int执行拟合时的输出数。

tree_

Tree instance树实例基础树对象。请参阅帮助(sklearn.tree._tree.Tree)对于树对象的属性,了解决策树结构对于这些属性的基本用法。


方法

apply(X[, check_input])

返回每个样本预测为的叶的索引。

cost_complexity_pruning_path(X, y[, …])

在最小代价复杂度修剪过程中计算修剪路径。

decision_path(X[, check_input])

返回树中的决策路径。

fit(X, y[, sample_weight, check_input, …])

从训练集(Xy)构建决策树分类器。

get_depth()

返回决策树的深度。

get_n_leaves()

返回决策树的叶数。

get_params([deep])

获取此估计器的参数。

predict(X[, check_input])

预测X的类或回归值。

predict_log_proba(X)

预测输入样本X的类对数概率。

predict_proba(X[, check_input])

预测输入样本X的类概率。

score(X, y[, sample_weight])

返回给定测试数据和标签的平均精度。

set_params(**params)

设置此估计器的参数。


9.3.2用散点图来分析鸢尾花数据

def iris_of_decision_tree():
       myutil = util()
       iris = datasets.load_iris()
       # 仅选前两个特征
       X = iris.data[:,:2]
       y = iris.target
       X_train,X_test,y_train,y_test = train_test_split(X, y)
       for max_depth in [1,3,5,7]:
              clf = DecisionTreeClassifier(max_depth=max_depth)
              clf.fit(X_train,y_train)
              title=u"鸢尾花数据测试集(max_depth="+str(max_depth)+")"
              myutil.print_scores(clf,X_train,y_train,X_test,y_test,title)
              myutil.draw_scatter(X,y,clf,title)
              myutil.plot_learning_curve(DecisionTreeClassifier(max_depth=max_depth),X,y,title)
              myutil.show_pic(title)


输出

鸢尾花数据测试集(max_depth=1):
64.29%
鸢尾花数据测试集(max_depth=1):
57.89%
鸢尾花数据测试集(max_depth=3):
83.93%
鸢尾花数据测试集(max_depth=3):
71.05%
鸢尾花数据测试集(max_depth=5):
85.71%
鸢尾花数据测试集(max_depth=5):
73.68%
鸢尾花数据测试集(max_depth=7):
88.39%
鸢尾花数据测试集(max_depth=7):
65.79%


max_depth=5的时候效果最好

image.png

image.png

image.png

image.png

image.png

image.png

image.pngimage.png


9.3.3用散点图分析红酒数据

def wine_of_decision_tree():
       myutil = util()
       wine = datasets.load_wine()
       # 仅选前两个特征
       X = wine.data[:,:2]
       y = wine.target
       X_train,X_test,y_train,y_test = train_test_split(X, y)
       for max_depth in [1,3,5]:
              clf = DecisionTreeClassifier(max_depth=max_depth)
              clf.fit(X_train,y_train)
              title=u"红酒数据测试集(max_depth="+str(max_depth)+")"
              myutil.print_scores(clf,X_train,y_train,X_test,y_test,title)
              myutil.draw_scatter(X,y,clf,title)


输出

红酒数据测试集(max_depth=1):
69.17%
红酒数据测试集(max_depth=1):
64.44%
红酒数据测试集(max_depth=3):
87.97%
红酒数据测试集(max_depth=3):
80.00%
红酒数据测试集(max_depth=5):
90.98%
红酒数据测试集(max_depth=5):
80.00%
红酒数据测试集(max_depth=7):
96.99%
红酒数据测试集(max_depth=7):
73.33%


max_depth=5的时候效果最好;max_depth=7

image.png

image.png

image.png

image.png

image.png

image.png

image.png

image.png


9.3.4用散点图分析乳腺癌数据

def wine_of_decision_tree():
       myutil = util()
       wine = datasets.load_wine()
       # 仅选前两个特征
       X = wine.data[:,:2]
       y = wine.target
       X_train,X_test,y_train,y_test = train_test_split(X, y)
       for max_depth in [1,3,5]:
              clf = DecisionTreeClassifier(max_depth=max_depth)
              clf.fit(X_train,y_train)
              title=u"乳腺癌数据测试集(max_depth="+str(max_depth)+")"
              myutil.print_scores(clf,X_train,y_train,X_test,y_test,title)
              myutil.draw_scatter(X,y,clf,title)


输出

乳腺癌数据测试集(max_depth=1):
90.38%
乳腺癌数据测试集(max_depth=1):
85.31%
乳腺癌数据测试集(max_depth=3):
91.08%
乳腺癌数据测试集(max_depth=3):
86.01%
乳腺癌数据测试集(max_depth=5):
93.43%
乳腺癌数据测试集(max_depth=5):
86.71%
乳腺癌数据测试集(max_depth=7):
96.95%
乳腺癌数据测试集(max_depth=7):
86.01%


max_depth=5的时候效果最好

image.png

image.png

image.png

image.png

image.png

image.png

image.pngimage.png


目录
相关文章
|
8月前
|
机器学习/深度学习 算法 Python
机器学习特征筛选:向后淘汰法原理与Python实现
向后淘汰法(Backward Elimination)是机器学习中一种重要的特征选择技术,通过系统性地移除对模型贡献较小的特征,以提高模型性能和可解释性。该方法从完整特征集出发,逐步剔除不重要的特征,最终保留最具影响力的变量子集。其优势包括提升模型简洁性和性能,减少过拟合,降低计算复杂度。然而,该方法在高维特征空间中计算成本较高,且可能陷入局部最优解。适用于线性回归、逻辑回归等统计学习模型。
335 7
|
6月前
|
机器学习/深度学习 人工智能 算法
Scikit-learn:Python机器学习的瑞士军刀
想要快速入门机器学习但被复杂算法吓退?本文详解Scikit-learn如何让您无需深厚数学背景也能构建强大AI模型。从数据预处理到模型评估,从垃圾邮件过滤到信用风险评估,通过实用案例和直观图表,带您掌握这把Python机器学习的'瑞士军刀'。无论您是AI新手还是经验丰富的数据科学家,都能从中获取将理论转化为实际应用的关键技巧。了解Scikit-learn与大语言模型的最新集成方式,抢先掌握机器学习的未来发展方向!
987 12
Scikit-learn:Python机器学习的瑞士军刀
|
5月前
|
Linux 数据库 数据安全/隐私保护
Python web Django快速入门手册全栈版,共2590字,短小精悍
本教程涵盖Django从安装到数据库模型创建的全流程。第一章介绍Windows、Linux及macOS下虚拟环境搭建与Django安装验证;第二章讲解项目创建、迁移与运行;第三章演示应用APP创建及项目汉化;第四章说明超级用户创建与后台登录;第五章深入数据库模型设计,包括类与表的对应关系及模型创建步骤。内容精炼实用,适合快速入门Django全栈开发。
236 1
|
9月前
|
机器学习/深度学习 数据可视化 算法
Python与机器学习:使用Scikit-learn进行数据建模
本文介绍如何使用Python和Scikit-learn进行机器学习数据建模。首先,通过鸢尾花数据集演示数据准备、可视化和预处理步骤。接着,构建并评估K近邻(KNN)模型,展示超参数调优方法。最后,比较KNN、随机森林和支持向量机(SVM)等模型的性能,帮助读者掌握基础的机器学习建模技巧,并展望未来结合深度学习框架的发展方向。
Python与机器学习:使用Scikit-learn进行数据建模
|
8月前
|
机器学习/深度学习 数据可视化 TensorFlow
Python 高级编程与实战:深入理解数据科学与机器学习
本文深入探讨了Python在数据科学与机器学习中的应用,介绍了pandas、numpy、matplotlib等数据科学工具,以及scikit-learn、tensorflow、keras等机器学习库。通过实战项目,如数据可视化和鸢尾花数据集分类,帮助读者掌握这些技术。最后提供了进一步学习资源,助力提升Python编程技能。
|
8月前
|
机器学习/深度学习 数据可视化 算法
Python 高级编程与实战:深入理解数据科学与机器学习
在前几篇文章中,我们探讨了 Python 的基础语法、面向对象编程、函数式编程、元编程、性能优化和调试技巧。本文将深入探讨 Python 在数据科学和机器学习中的应用,并通过实战项目帮助你掌握这些技术。
|
1月前
|
机器学习/深度学习 数据采集 人工智能
【机器学习算法篇】K-近邻算法
K近邻(KNN)是一种基于“物以类聚”思想的监督学习算法,通过计算样本间距离,选取最近K个邻居投票决定类别。支持多种距离度量,如欧式、曼哈顿、余弦相似度等,适用于分类与回归任务。结合Scikit-learn可高效实现,需合理选择K值并进行数据预处理,常用于鸢尾花分类等经典案例。(238字)
|
机器学习/深度学习 算法 数据挖掘
K-means聚类算法是机器学习中常用的一种聚类方法,通过将数据集划分为K个簇来简化数据结构
K-means聚类算法是机器学习中常用的一种聚类方法,通过将数据集划分为K个簇来简化数据结构。本文介绍了K-means算法的基本原理,包括初始化、数据点分配与簇中心更新等步骤,以及如何在Python中实现该算法,最后讨论了其优缺点及应用场景。
1152 6
|
6月前
|
机器学习/深度学习 数据采集 人工智能
20分钟掌握机器学习算法指南
在短短20分钟内,从零开始理解主流机器学习算法的工作原理,掌握算法选择策略,并建立对神经网络的直观认识。本文用通俗易懂的语言和生动的比喻,帮助你告别算法选择的困惑,轻松踏入AI的大门。
|
7月前
|
机器学习/深度学习 存储 Kubernetes
【重磅发布】AllData数据中台核心功能:机器学习算法平台
杭州奥零数据科技有限公司成立于2023年,专注于数据中台业务,维护开源项目AllData并提供商业版解决方案。AllData提供数据集成、存储、开发、治理及BI展示等一站式服务,支持AI大模型应用,助力企业高效利用数据价值。

热门文章

最新文章

推荐镜像

更多