Python中的决策树算法探索

本文涉及的产品
服务治理 MSE Sentinel/OpenSergo,Agent数量 不受限
云原生网关 MSE Higress,422元/月
注册配置 MSE Nacos/ZooKeeper,118元/月
简介: Python中的决策树算法探索

Python中的决策树算法探索

 

决策树是一种用于分类和回归的非参数监督学习方法。它的目标是创建一个模型,通过学习简单的决策规则从数据特征中推断出目标变量的值。决策树直观且易于理解,广泛应用于各种领域。本文将介绍如何在Python中使用决策树算法进行数据分类和回归,并附带示例代码。

 

1. 决策树的基本概念

 

决策树由节点和边组成:

- **根节点**:表示整个样本的初始特征。

- **内部节点**:表示一个特征的测试。

- **叶节点**:表示决策结果。

 

2. 使用决策树进行分类

 

在分类问题中,决策树将数据划分为不同的类别。以下是一个使用Scikit-learn库进行分类的示例。

 

2.1 数据准备

 

首先,导入必要的库,并加载示例数据集。这次我们使用著名的鸢尾花数据集。

 

```python
from sklearn.datasets import load_iris
from sklearn.model_selection import train_test_split
from sklearn.tree import DecisionTreeClassifier
from sklearn import tree
import matplotlib.pyplot as plt
 
# 加载鸢尾花数据集
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)
```

 

2.2 训练决策树分类器

 

接下来,创建一个决策树分类器并进行训练。

```python
# 创建决策树分类器
clf = DecisionTreeClassifier()
 
# 训练模型
clf.fit(X_train, y_train)
```

 

2.3 模型评估

 

使用测试数据评估模型性能。

 

```python
# 预测测试集
y_pred = clf.predict(X_test)
 
# 计算准确率
accuracy = sum(y_pred == y_test) / len(y_test)
print(f'Accuracy: {accuracy:.2f}')
```

 

2.4 可视化决策树

 

使用Matplotlib库和Scikit-learn内置函数对决策树进行可视化。

 

```python
plt.figure(figsize=(20,10))
tree.plot_tree(clf, filled=True, feature_names=iris.feature_names, class_names=iris.target_names)
plt.show()
```

 

3. 使用决策树进行回归

 

在回归问题中,决策树用于预测连续的目标变量。下面是一个使用决策树进行回归的示例。

 

3.1 数据准备

 

我们使用Scikit-learn自带的波士顿房价数据集。

 

```python
from sklearn.datasets import load_boston
from sklearn.tree import DecisionTreeRegressor
 
# 加载波士顿房价数据集
boston = load_boston()
X = boston.data
y = boston.target
 
# 分割数据集为训练集和测试集
X_train, X_test, y_train, y_test = train_test_split(X, y, test_size=0.3, random_state=42)
```

 

3.2 训练决策树回归器

 

创建一个决策树回归器并进行训练。

```python
# 创建决策树回归器
reg = DecisionTreeRegressor()
 
# 训练模型
reg.fit(X_train, y_train)
```

 

3.3 模型评估

 

使用测试数据评估模型性能。

 

```python
# 预测测试集
y_pred = reg.predict(X_test)
 
# 计算均方误差
from sklearn.metrics import mean_squared_error
mse = mean_squared_error(y_test, y_pred)
print(f'Mean Squared Error: {mse:.2f}')
```

 

4. 代码总结

 

综上所述,我们介绍了如何在Python中使用Scikit-learn库实现决策树分类器和回归器。通过简单的步骤,我们可以训练和评估模型,并对决策树进行可视化。以下是完整代码的汇总:

```python
from sklearn.datasets import load_iris, load_boston
from sklearn.model_selection import train_test_split
from sklearn.tree import DecisionTreeClassifier, DecisionTreeRegressor
from sklearn import tree
import matplotlib.pyplot as plt
from sklearn.metrics import mean_squared_error
 
# 分类示例
iris = load_iris()
X_class, y_class = iris.data, iris.target
X_train_class, X_test_class, y_train_class, y_test_class = train_test_split(X_class, y_class, test_size=0.3, random_state=42)
 
clf = DecisionTreeClassifier()
clf.fit(X_train_class, y_train_class)
y_pred_class = clf.predict(X_test_class)
accuracy = sum(y_pred_class == y_test_class) / len(y_test_class)
print(f'Classification Accuracy: {accuracy:.2f}')
 
plt.figure(figsize=(20,10))
tree.plot_tree(clf, filled=True, feature_names=iris.feature_names, class_names=iris.target_names)
plt.show()
 
# 回归示例
boston = load_boston()
X_reg, y_reg = boston.data, boston.target
X_train_reg, X_test_reg, y_train_reg, y_test_reg = train_test_split(X_reg, y_reg, test_size=0.3, random_state=42)
 
reg = DecisionTreeRegressor()
reg.fit(X_train_reg, y_train_reg)
y_pred_reg = reg.predict(X_test_reg)
mse = mean_squared_error(y_test_reg, y_pred_reg)
print(f'Regression Mean Squared Error: {mse:.2f}')
```

 

通过上述代码和示例,读者可以深入了解决策树算法的应用及其在分类和回归任务中的实现方法。

相关实践学习
基于MSE实现微服务的全链路灰度
通过本场景的实验操作,您将了解并实现在线业务的微服务全链路灰度能力。
相关文章
|
8小时前
|
算法 Python
算法小白秒变高手?一文读懂Python时间复杂度与空间复杂度,效率翻倍不是梦!
【7月更文挑战第24天】在编程中,算法效率由时间复杂度(执行速度)与空间复杂度(内存消耗)决定。时间复杂度如O(n), O(n^2), O(log n),反映算法随输入增长的耗时变化;空间复杂度则衡量算法所需额外内存。案例对比线性搜索(O(n))与二分搜索(O(log n)),后者利用有序列表显著提高效率。斐波那契数列计算示例中,递归(O(n))虽简洁,但迭代(O(1))更节省空间。掌握这些,让代码性能飞跃,从小白到高手不再是梦想。
7 1
|
1天前
|
机器学习/深度学习 数据可视化 开发者
视觉的力量!Python 机器学习模型评估,Matplotlib 与 Seaborn 如何助力决策更明智?
【7月更文挑战第23天】在Python机器学习中,模型评估不可或缺。Matplotlib与Seaborn作为数据可视化工具,助力洞察模型性能。Matplotlib基础灵活,构建复杂图表;Seaborn在其上层,简化绘图,提升美观。从折线图追踪损失到条形图对比准确率,两者互补,促进高效决策制定。尽管Matplotlib掌控力强,但Seaborn友好快捷,适于统计图形。结合使用,可将数据转化成深刻见解。
|
1天前
|
算法 Python
震惊!Python 算法设计背后,时间复杂度与空间复杂度的惊天秘密大起底!
【7月更文挑战第23天】在Python算法设计中,时间与空间复杂度是幕后操控程序效率的双雄。时间复杂度反映算法执行时间随输入规模增长的速度,空间复杂度则计量算法运行时额外内存的使用。如顺序查找的时间复杂度O(n)与固定空间O(1),对比冒泡排序的O(n^2)时间和快速排序的O(n log n)时间优势,后者虽递归消耗空间,但在多数情况下提供更佳性能。根据需求,可权衡选择,如利用哈希表在充足内存下实现O(1)查找,或在空间受限时,偏好空间效率更高的算法,实现Python代码的高性能与优雅。
16 6
|
1天前
|
存储 缓存 算法
时间&空间复杂度,Python 算法的双重考验!如何优雅地平衡两者,打造极致性能?
【7月更文挑战第23天】在Python算法设计中,时间与空间复杂度是关键考量,需精妙平衡以优化程序性能。时间复杂度反映算法随输入规模增长的执行时间趋势,空间复杂度关注额外存储需求。线性搜索O(n)时间,O(1)空间;二分搜索O(log n)时间,O(1)空间,提升效率;动态规划如斐波那契数列O(n)时间与空间,利用存储减小计算。实际应用需按场景需求调整,如实时数据偏重时间,资源受限环境优先考虑空间。平衡两者,理解算法本质,结合实践,创造高性能程序。
15 7
|
1天前
|
算法 搜索推荐 开发者
别再让复杂度拖你后腿!Python 算法设计与分析实战,教你如何精准评估与优化!
【7月更文挑战第23天】在Python编程中,掌握算法复杂度—时间与空间消耗,是提升程序效能的关键。算法如冒泡排序($O(n^2)$时间/$O(1)$空间),或使用Python内置函数找最大值($O(n)$时间),需精确诊断与优化。数据结构如哈希表可将查找从$O(n)$降至$O(1)$。运用`timeit`模块评估性能,深入理解数据结构和算法,使Python代码更高效。持续实践与学习,精通复杂度管理。
16 9
|
1天前
|
存储 算法 搜索推荐
深度剖析 Python 算法:时间复杂度与空间复杂度的爱恨情仇,你站哪边?
【7月更文挑战第23天】在Python算法设计中,时间复杂度与空间复杂度如影随形,反映算法效率与资源消耗。时间复杂度揭示算法随输入规模增长的计算趋势,空间复杂度关注额外存储需求。找最大值示例中,两种实现均具O(n)时间与O(1)空间复杂度,但在排序等复杂场景下,如冒泡排序与快速排序,或哈希表与二叉树查找,权衡变得关键。实时系统偏好低时间复杂度算法,存储受限环境则需关注空间效率。最佳选择依应用场景而定,掌握二者平衡,方能编写高效代码。
|
2天前
|
机器学习/深度学习 存储 算法
颠覆认知!Python算法设计中的时间复杂度与空间复杂度,你真的理解对了吗?
【7月更文挑战第22天】在Python算法设计中,时间与空间复杂度是评估算法效能的核心。时间复杂度不仅限于大O表示法,还涵盖平均与最坏情况分析。空间复杂度虽关注额外存储,但也反映内存效率。平衡二者需视场景而定,如利用原地算法减少内存消耗,或牺牲空间加速执行。算法优化技巧,如分治与动态规划,助你在资源与速度间找寻最优解,从而高效应对大数据挑战。
11 3
|
2天前
|
机器学习/深度学习 算法 搜索推荐
从理论到实践,Python算法复杂度分析一站式教程,助你轻松驾驭大数据挑战!
【7月更文挑战第22天】在大数据领域,Python算法效率至关重要。本文深入解析时间与空间复杂度,用大O表示法衡量执行时间和存储需求。通过冒泡排序(O(n^2)时间,O(1)空间)与快速排序(平均O(n log n)时间,O(log n)空间)实例,展示Python代码实现与复杂度分析。策略包括算法适配、分治法应用及空间换取时间优化。掌握这些,可提升大数据处理能力,持续学习实践是关键。
11 1
|
2天前
|
存储 算法 搜索推荐
告别低效编程!Python算法设计与分析中,时间复杂度与空间复杂度的智慧抉择!
【7月更文挑战第22天】在编程中,时间复杂度和空间复杂度是评估算法效率的关键。时间复杂度衡量执行时间随数据量增加的趋势,空间复杂度关注算法所需的内存。在实际应用中,开发者需权衡两者,根据场景选择合适算法,如快速排序(平均O(n log n),最坏O(n^2),空间复杂度O(log n)至O(n))适合大规模数据,而归并排序(稳定O(n log n),空间复杂度O(n))在内存受限或稳定性要求高时更有利。通过优化,如改进基准选择或减少复制,可平衡这两者。理解并智慧地选择算法是提升代码效率的关键。