# Python中的决策树算法探索

Python中的决策树算法探索

1. 决策树的基本概念

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

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

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

2. 使用决策树进行分类

2.1 数据准备

python
from sklearn.model_selection import train_test_split
from sklearn.tree import DecisionTreeClassifier
from sklearn import tree
import matplotlib.pyplot as plt

# 加载鸢尾花数据集
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 可视化决策树

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 数据准备

python
from sklearn.tree import DecisionTreeRegressor

# 加载波士顿房价数据集
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
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

# 分类示例
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()

# 回归示例
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}')


|
8小时前
|

【7月更文挑战第24天】在编程中，算法效率由时间复杂度（执行速度）与空间复杂度（内存消耗）决定。时间复杂度如O(n), O(n^2), O(log n)，反映算法随输入增长的耗时变化；空间复杂度则衡量算法所需额外内存。案例对比线性搜索(O(n))与二分搜索(O(log n))，后者利用有序列表显著提高效率。斐波那契数列计算示例中，递归(O(n))虽简洁，但迭代(O(1))更节省空间。掌握这些，让代码性能飞跃，从小白到高手不再是梦想。
7 1
|
1天前
|

【7月更文挑战第23天】在Python机器学习中,模型评估不可或缺。Matplotlib与Seaborn作为数据可视化工具,助力洞察模型性能。Matplotlib基础灵活,构建复杂图表;Seaborn在其上层,简化绘图,提升美观。从折线图追踪损失到条形图对比准确率,两者互补,促进高效决策制定。尽管Matplotlib掌控力强,但Seaborn友好快捷,适于统计图形。结合使用,可将数据转化成深刻见解。
12 6
|
1天前
|

【7月更文挑战第23天】在Python算法设计中，时间与空间复杂度是幕后操控程序效率的双雄。时间复杂度反映算法执行时间随输入规模增长的速度，空间复杂度则计量算法运行时额外内存的使用。如顺序查找的时间复杂度O(n)与固定空间O(1)，对比冒泡排序的O(n^2)时间和快速排序的O(n log n)时间优势，后者虽递归消耗空间，但在多数情况下提供更佳性能。根据需求，可权衡选择，如利用哈希表在充足内存下实现O(1)查找，或在空间受限时，偏好空间效率更高的算法，实现Python代码的高性能与优雅。
16 6
|
1天前
|

【7月更文挑战第23天】在Python算法设计中，时间与空间复杂度是关键考量，需精妙平衡以优化程序性能。时间复杂度反映算法随输入规模增长的执行时间趋势，空间复杂度关注额外存储需求。线性搜索O(n)时间，O(1)空间；二分搜索O(log n)时间，O(1)空间，提升效率；动态规划如斐波那契数列O(n)时间与空间，利用存储减小计算。实际应用需按场景需求调整，如实时数据偏重时间，资源受限环境优先考虑空间。平衡两者，理解算法本质，结合实践，创造高性能程序。
15 7
|
1天前
|

【7月更文挑战第23天】在Python编程中，掌握算法复杂度—时间与空间消耗，是提升程序效能的关键。算法如冒泡排序（$O(n^2)$时间/$O(1)$空间），或使用Python内置函数找最大值（$O(n)$时间），需精确诊断与优化。数据结构如哈希表可将查找从$O(n)$降至$O(1)$。运用timeit模块评估性能，深入理解数据结构和算法，使Python代码更高效。持续实践与学习，精通复杂度管理。
16 9
|
1天前
|

【7月更文挑战第23天】在Python算法设计中，时间复杂度与空间复杂度如影随形，反映算法效率与资源消耗。时间复杂度揭示算法随输入规模增长的计算趋势，空间复杂度关注额外存储需求。找最大值示例中，两种实现均具O(n)时间与O(1)空间复杂度，但在排序等复杂场景下，如冒泡排序与快速排序，或哈希表与二叉树查找，权衡变得关键。实时系统偏好低时间复杂度算法，存储受限环境则需关注空间效率。最佳选择依应用场景而定，掌握二者平衡，方能编写高效代码。
16 10
|
2天前
|

|
2天前
|

【7月更文挑战第22天】在Python算法设计中，时间与空间复杂度是评估算法效能的核心。时间复杂度不仅限于大O表示法，还涵盖平均与最坏情况分析。空间复杂度虽关注额外存储，但也反映内存效率。平衡二者需视场景而定，如利用原地算法减少内存消耗，或牺牲空间加速执行。算法优化技巧，如分治与动态规划，助你在资源与速度间找寻最优解，从而高效应对大数据挑战。
11 3
|
2天前
|

【7月更文挑战第22天】在大数据领域，Python算法效率至关重要。本文深入解析时间与空间复杂度，用大O表示法衡量执行时间和存储需求。通过冒泡排序(O(n^2)时间，O(1)空间)与快速排序(平均O(n log n)时间，O(log n)空间)实例，展示Python代码实现与复杂度分析。策略包括算法适配、分治法应用及空间换取时间优化。掌握这些，可提升大数据处理能力，持续学习实践是关键。
11 1
|
2天前
|

【7月更文挑战第22天】在编程中，时间复杂度和空间复杂度是评估算法效率的关键。时间复杂度衡量执行时间随数据量增加的趋势，空间复杂度关注算法所需的内存。在实际应用中，开发者需权衡两者，根据场景选择合适算法，如快速排序（平均O(n log n)，最坏O(n^2)，空间复杂度O(log n)至O(n)）适合大规模数据，而归并排序（稳定O(n log n)，空间复杂度O(n)）在内存受限或稳定性要求高时更有利。通过优化，如改进基准选择或减少复制，可平衡这两者。理解并智慧地选择算法是提升代码效率的关键。
7 1