机器学习---贝叶斯分类与决策树
自动化参数调优利器,注意控制搜索空间避免计算爆炸朴素贝叶斯:适合文本分类等高维数据,注意特征独立性假设的局限性决策树信息增益偏向多值属性,基尼指数计算效率更高通过max_depth控制模型复杂度防止过拟合可视化帮助理解模型决策过程通过合理使用这些工具,可以快速构建可解释性强的分类模型,适用于各种结构化数据的分类任务。实际应用中建议:优先使用基尼指数构建决策树对文本数据优先尝试朴素贝叶斯重要模型务必
一、参数网格搜索(GridSearchCV)
1.1 核心作用
-
自动寻找最优超参数:遍历给定的参数组合,通过交叉验证选择最佳参数
-
API关键参数:
GridSearchCV(estimator, param_grid, cv=5) # estimator:基础模型 # param_grid:参数字典(如{"n_neighbors":[3,5,7]}) # cv:交叉验证折数
1.2 最佳参数获取
grid.best_params_ # 最佳参数组合
grid.best_score_ # 最高准确率
grid.best_estimator_ # 最优模型实例
1.3 使用示例
from sklearn.model_selection import GridSearchCV
from sklearn.neighbors import KNeighborsClassifier
param_grid = {"n_neighbors": [3,5,7]}
grid = GridSearchCV(KNeighborsClassifier(), param_grid, cv=10)
grid.fit(X_train, y_train)
print("最佳k值:", grid.best_params_)
二、朴素贝叶斯分类
2.1 核心公式
-
贝叶斯定理:
P(类别|特征) = P(特征|类别) * P(类别) / P(特征)
-
朴素假设:特征条件独立
P(特征|类别) = P(特征1|类别) * P(特征2|类别) * ... * P(特征n|类别)
2.2 拉普拉斯平滑
-
解决零概率问题:
P(特征i|类别) = (N_ic + α) / (N_c + α*n) # α=1(默认),n为特征取值数
2.3 Scikit-learn实现
from sklearn.naive_bayes import MultinomialNB
nb = MultinomialNB(alpha=1.0) # 拉普拉斯平滑系数
nb.fit(X_train, y_train)
acc = nb.score(X_test, y_test)
三、决策树
3.1 划分标准
| 标准 | 公式 | 特点 |
|---|---|---|
| 信息增益(ID3) | Gain = Ent(D) - Σ(|Dv|/|D|)*Ent(Dv) |
偏向多值属性,需离散化 |
| 基尼指数(CART) | Gini = 1 - Σ(pk^2) |
计算效率高,默认标准,适合连续和离散特征 |
3.2 关键参数
DecisionTreeClassifier(
criterion="gini", # 划分标准("gini"或"entropy")
max_depth=None, # 树的最大深度(防止过拟合)
min_samples_split=2 # 节点分裂最小样本数
)
3.3 决策树可视化
from sklearn.tree import export_graphviz
export_graphviz(
estimator,
out_file="tree.dot",
feature_names=feature_names,
class_names=target_names,
filled=True # 颜色填充
)
# 生成图形:安装Graphviz后运行 dot -Tpng tree.dot -o tree.png
四、综合应用示例
4.1 鸢尾花分类(决策树+网格搜索)
from sklearn.datasets import load_iris
from sklearn.model_selection import GridSearchCV
from sklearn.tree import DecisionTreeClassifier
# 加载数据
iris = load_iris()
X, y = iris.data, iris.target
# 参数网格
param_grid = {
"max_depth": [3,5,7],
"criterion": ["gini", "entropy"]
}
# 网格搜索
grid = GridSearchCV(DecisionTreeClassifier(), param_grid, cv=5)
grid.fit(X, y)
print("最佳参数:", grid.best_params_)
print("测试准确率:", grid.best_score_)
4.2 结果分析
最佳参数: {'criterion': 'gini', 'max_depth': 3}
测试准确率: 0.9667
五、关键知识点总结
-
GridSearchCV:自动化参数调优利器,注意控制搜索空间避免计算爆炸
-
朴素贝叶斯:适合文本分类等高维数据,注意特征独立性假设的局限性
-
决策树:
-
信息增益偏向多值属性,基尼指数计算效率更高
-
通过max_depth控制模型复杂度防止过拟合
-
可视化帮助理解模型决策过程
-
通过合理使用这些工具,可以快速构建可解释性强的分类模型,适用于各种结构化数据的分类任务。实际应用中建议:
-
优先使用基尼指数构建决策树
-
对文本数据优先尝试朴素贝叶斯
-
重要模型务必进行参数调优
六、分类算法详解
1. 决策树(Decision Tree)
-
含义 决策树是一种树形结构的分类模型,通过一系列规则对数据进行分割。每个内部节点表示一个特征测试,分支代表测试结果,叶节点代表最终的类别标签。其优点包括可解释性强、可处理数值和类别数据,但可能过拟合。
-
构建过程
-
特征选择:选择最优划分特征,常用指标:
-
信息增益(ID3算法):选择使信息增益最大的特征(信息熵下降最多)。
-
信息增益率(C4.5算法):解决信息增益对多值特征的偏好。
-
基尼指数(CART算法):衡量数据不纯度,值越小纯度越高。
-
-
树的生成:递归分割数据,生成子节点,直到满足停止条件(如节点样本数过少或纯度达标)。
-
剪枝:防止过拟合,分为预剪枝(提前终止生长)和后剪枝(生成完整树后修剪)。
-
-
原理 通过最大化每次划分的“纯度”,逐步将数据集划分为更小的子集,最终形成树结构。例如,CART二叉树每次选择使基尼指数最小的特征分割。

-
类型
-
高斯朴素贝叶斯:假设连续特征服从正态分布。
-
多项式朴素贝叶斯:处理离散计数数据(如文本分类)。
-
伯努利朴素贝叶斯:适用于二值特征。
-
-
优化
-
拉普拉斯平滑:避免零概率问题,对未出现的特征值赋予小概率。
-
3. K近邻(K-Nearest Neighbors, KNN)
-
定义 一种基于实例的“懒惰学习”算法,无需显式训练,直接通过距离度量找最近邻进行投票。

对比总结
| 算法 | 核心思想 | 关键步骤/假设 | 优缺点 |
|---|---|---|---|
| 决策树 | 树形规则划分数据 | 特征选择、递归分割、剪枝 | 可解释性强,可能过拟合 |
| 朴素贝叶斯 | 贝叶斯定理 + 特征独立 | 计算后验概率,拉普拉斯平滑 | 高效,高维友好,独立性假设可能不成立 |
| KNN | 基于邻居的多数投票 | 距离计算、k值选择、标准化 | 无需训练,计算开销大,适合小数据 |
更多推荐



所有评论(0)