您好,登录后才能下订单哦!
密码登录
登录注册
点击 登录注册 即表示同意《亿速云用户服务条款》
# Python基于决策树算法的分类预测实现
决策树是机器学习中经典的分类与回归方法,因其直观易懂、可解释性强而广受欢迎。本文将详细介绍如何使用Python的scikit-learn库实现基于决策树的分类预测,涵盖数据准备、模型构建、评估优化等全流程。
## 一、决策树算法基础
### 1.1 算法原理
决策树通过递归地将数据集划分为更纯净的子集来构建树形结构,核心概念包括:
- **节点**:包含属性测试条件的分支点
- **叶节点**:最终的分类结果
- **信息增益/基尼系数**:划分标准的衡量指标
常用算法:
- ID3(使用信息增益)
- C4.5(使用信息增益率)
- CART(使用基尼系数)
### 1.2 数学基础
**信息熵**:
$$ H(D) = -\sum_{k=1}^{K}p_k\log_2p_k $$
**基尼系数**:
$$ Gini(D) = 1-\sum_{k=1}^{K}p_k^2 $$
## 二、环境准备
```python
# 基础库安装
pip install numpy pandas scikit-learn matplotlib
# 导入必要库
import numpy as np
import pandas as pd
from sklearn.tree import DecisionTreeClassifier, export_text, plot_tree
from sklearn.model_selection import train_test_split
from sklearn.metrics import accuracy_score, classification_report
import matplotlib.pyplot as plt
以经典的鸢尾花数据集为例:
from sklearn.datasets import load_iris
iris = load_iris()
X = iris.data
y = iris.target
feature_names = iris.feature_names
class_names = iris.target_names
# 转换为DataFrame方便查看
df = pd.DataFrame(X, columns=feature_names)
df['target'] = y
print(df.describe())
print("\n类别分布:\n", df['target'].value_counts())
X_train, X_test, y_train, y_test = train_test_split(
X, y, test_size=0.3, random_state=42, stratify=y)
# 创建决策树分类器
clf = DecisionTreeClassifier(
criterion='gini', # 分裂标准
max_depth=3, # 最大深度
min_samples_split=2, # 分裂所需最小样本数
random_state=42
)
# 模型训练
clf.fit(X_train, y_train)
参数 | 说明 | 典型值 |
---|---|---|
criterion | 分裂标准 | ‘gini’或’entropy’ |
max_depth | 树的最大深度 | 整数或None |
min_samples_split | 节点分裂最小样本数 | 2-10 |
min_samples_leaf | 叶节点最小样本数 | 1-5 |
max_features | 考虑的最大特征数 | ‘auto’, ‘sqrt’等 |
# 测试集预测
y_pred = clf.predict(X_test)
# 评估指标
print("准确率:", accuracy_score(y_test, y_pred))
print("\n分类报告:\n", classification_report(y_test, y_pred, target_names=class_names))
文本表示:
tree_rules = export_text(clf, feature_names=feature_names)
print("决策树规则:\n", tree_rules)
图形化展示:
plt.figure(figsize=(12,8))
plot_tree(clf,
feature_names=feature_names,
class_names=class_names,
filled=True,
rounded=True)
plt.show()
使用GridSearchCV进行网格搜索:
from sklearn.model_selection import GridSearchCV
param_grid = {
'max_depth': [3, 5, 7, None],
'min_samples_split': [2, 5, 10],
'criterion': ['gini', 'entropy']
}
grid_search = GridSearchCV(DecisionTreeClassifier(random_state=42),
param_grid,
cv=5,
scoring='accuracy')
grid_search.fit(X_train, y_train)
print("最优参数:", grid_search.best_params_)
print("最优分数:", grid_search.best_score_)
importances = clf.feature_importances_
indices = np.argsort(importances)[::-1]
plt.title('Feature Importance')
plt.bar(range(X.shape[1]), importances[indices], align='center')
plt.xticks(range(X.shape[1]), [feature_names[i] for i in indices])
plt.show()
# 数据加载与预处理
titanic = pd.read_csv('titanic.csv')
titanic = titanic[['Survived', 'Pclass', 'Sex', 'Age', 'Fare']]
titanic['Sex'] = titanic['Sex'].map({'male':0, 'female':1})
titanic = titanic.dropna()
# 特征工程与建模
X = titanic.drop('Survived', axis=1)
y = titanic['Survived']
clf = DecisionTreeClassifier(max_depth=4)
clf.fit(X, y)
# 可视化决策路径
plt.figure(figsize=(15,10))
plot_tree(clf, feature_names=X.columns, class_names=['Died','Survived'], filled=True)
plt.show()
# 使用class_weight参数
clf = DecisionTreeClassifier(class_weight='balanced')
本文完整演示了Python中使用决策树进行分类预测的流程: 1. 数据准备与探索 2. 模型构建与训练 3. 可视化与解释 4. 评估与优化
决策树作为基础算法,虽然简单但功能强大,是理解更复杂集成方法的重要基础。实际应用中需要根据数据特点调整参数,并结合业务场景进行解释。
注:本文代码基于Python 3.8和scikit-learn 1.0.2版本实现,不同版本可能需要适当调整。 “`
本文共约1750字,涵盖决策树分类的完整实现流程,采用Markdown格式编写,包含代码块、数学公式、表格等元素,可直接用于技术文档或博客发布。
免责声明:本站发布的内容(图片、视频和文字)以原创、转载和分享为主,文章观点不代表本网站立场,如果涉及侵权请联系站长邮箱:is@yisu.com进行举报,并提供相关证据,一经查实,将立刻删除涉嫌侵权内容。