朴素贝叶斯与决策树分类

朴素贝叶斯分类

1贝叶斯分类理论

选择高概率对应的类别

2条件概率

事件B发生的情况下,事件A发生的概率

𝑃(𝐴|𝐵)=𝑃(𝐴∩𝐵)/𝑃(𝐵) => 𝑃(𝐴∩𝐵)=𝑃(𝐴|𝐵)𝑃(𝐵) ①

同理:

𝑃(𝐴∩𝐵)=𝑃(𝐵|𝐴)𝑃(𝐴) ②

根据①②可得:

𝑃(𝐴|𝐵)=𝑃(B|A)𝑃(𝐴)/𝑃(𝐵) 即条件概率

3 全概率公式

①𝑃(𝐵)=𝑃(𝐵∩𝐴)+𝑃(𝐵∩𝐴′)

②𝑃(𝐵∩𝐴)=𝑃(𝐵|𝐴)𝑃(𝐴)

=>𝑃(𝐵)=𝑃(𝐵|𝐴)𝑃(𝐴)+𝑃(𝐵|𝐴′)𝑃(𝐴′) (全概率公式)

A和A'构成样本空间的一个划分,那么事件B的概率,就等于A和A'的概率分别乘以B对这两个事件的条件概率之和。

4 贝叶斯推断

条件概率公式变形可得:

先验概率 ( P(A) ) 是在事件 ( B ) 发生之前,对事件 ( A ) 概率的初步判断。

后验概率 ( P(A|B)) 是在事件 ( B ) 发生之后,对事件 ( A ) 概率的更新评估。

似然函数 ( P(B|A)/P(B) ) 是一个调整因子,用于将先验概率与实际观测结果结合,使得估计的概率更接近真实值。

因此,条件概率可以理解为:

后验概率 = 先验概率 × 似然函数

这就是贝叶斯推断的核心:通过先验概率和实验结果(即似然函数),更新对事件概率的估计。

5 朴素贝叶斯推断

理解了贝叶斯推断,那么让我们继续看看朴素贝叶斯。贝叶斯和朴素贝叶斯的概念是不同的,区别就在于"朴素"二字,朴素贝叶斯对条件概率分布做了条件独立性的假设。

6 拉普拉斯平滑系数

拉普拉斯平滑(或加一平滑)是一种处理"零概率陷阱"的技术,它通过对概率进行调整,避免了在特征或事件未在训练集中出现时其概率被估计为零的问题。

公式为:

一般α取值1,m的值总特征数量

API
复制代码
sklearn.naive_bayes.MultinomialNB()
estimator.fit(x_train, y_train)
y_predict = estimator.predict(x_test)

示例:

复制代码
#贝叶斯
from sklearn.naive_bayes import MultinomialNB  # type: ignore
from sklearn.datasets import load_wine
from sklearn.model_selection import train_test_split
​
wind=load_wine()
x_train,x_test,y_train,y_test=train_test_split(wind.data,wind.target,test_size=0.3)
​
clf=MultinomialNB()
clf.fit(x_train,y_train)
​
print(clf.score(x_test,y_test))
​
pre=clf.predict(x_train)
print(pre)
​

决策树-分类

1 概念
  1. 决策节点 决策节点用于通过条件判断进行分支选择。例如,在决策树中,将样本的特征值与决策节点上的阈值进行比较,以确定样本的流向。

  2. 叶子节点 叶子节点是没有子节点的终端节点,表示最终的决策结果或分类标签。

  3. 决策树的深度 决策树的深度指的是从根节点到最远叶子节点的最长路径上的层次数。根节点的深度为0,每下层的节点深度增加1。

  4. 决策树的优点

    可视化 可解释性 计算要求低

  5. 决策树的缺点

    过拟合:决策树容易过拟合训练数据,特别是当树的深度过大时。因此,需要控制树的深度或进行剪枝,以避免过拟合

2 基于信息增益决策树的建立

信息增益决策树倾向于选择取值较多的属性,在有些情况下这类属性可能不会提供太多有价值的信息,算法只能对描述属性为离散型属性的数据集构造决策树。

(1) 信息熵

信息熵描述的是不确定性。信息熵越大,不确定性越大。信息熵的值越小,则D的纯度越高。

假设样本集合D共有N类,第k类样本所占比例为Pk,则D的信息熵为

(2) 信息增益

信息增益是一个统计量,用来描述一个属性区分数据样本的能力。信息增益越大,那么决策树就会越简洁。这里信息增益的程度用信息熵的变化程度来衡量, 信息增益公式:

(3) 信息增益决策树建立步骤

第一步,计算根节点的信息熵

第二步,计算属性的信息增益

第三步, 划分属性

3 基于基尼指数决策树的建立(了解)
定义基尼指数

基尼指数定义为:

其中:

  • D是当前数据集。

  • K是类别的总数。

  • pk是属于第 k类的样本占数据集 D 的比例。

基尼指数越低数据集的纯度越高。

计算基尼增益

对于每个特征,我们计算分裂前后的基尼指数的变化,称为基尼增益。选择使基尼增益最大的特征作为分裂特征。基尼增益的计算公式为:

其中:

  • A是候选特征。

  • Values(A)是特征 A 的所有可能取值。

  • Dv是特征 A 取值为 v 的子集。

∣Dv∣和 ∣D∣∣ 分别是子集 Dv 和整个数据集 D 的样本数。
示例
复制代码
# 可视化决策树
function sklearn.tree.export_graphviz(estimator, out_file="iris_tree.dot", feature_names=iris.feature_names)
参数:
    estimator决策树预估器
    out_file生成的文档
    feature_names节点特征属性名

用决策树对葡萄酒进行分类

复制代码
from sklearn.datasets import load_wine
from sklearn.model_selection import StratifiedKFold
from sklearn.preprocessing import StandardScaler
from sklearn.tree import DecisionTreeClassifier, export_graphviz
import numpy as np
​
# 加载数据
wine = load_wine()
X, y = wine.data, wine.target  # 确保 X 和 y 被正确地定义
​
# 划分数据集
s_k_fold = StratifiedKFold(n_splits=5, shuffle=True, random_state=17)
for train_index, test_index in s_k_fold.split(X, y):
    X_train, X_test = X[train_index], X[test_index]
    y_train, y_test = y[train_index], y[test_index]
​
    # 数据预处理
    transfer = StandardScaler()
    X_train = transfer.fit_transform(X_train)
    X_test = transfer.transform(X_test)
​
    # 模型训练
    model = DecisionTreeClassifier(criterion='entropy')
    model.fit(X_train, y_train)
​
    # 模型评估
    score = model.score(X_test, y_test)
    print("Fold Accuracy:\n", score)
​
    # 预测
    pre = model.predict(X_test)
    print("真实值:\n", y_test)
    print("预测值:\n", pre)
    print("预测值对应的类别名:\n", wine.target_names[pre])
​
# 保存模型
export_graphviz(model, out_file='./src/wine.dot', feature_names=wine.feature_names)
相关推荐
杰说新技术几秒前
Meta AI最新推出的长视频语言理解多模态模型LongVU分享
人工智能·aigc
说私域3 分钟前
基于开源 AI 智能名片、S2B2C 商城小程序的用户获取成本优化分析
人工智能·小程序
东胜物联23 分钟前
探寻5G工业网关市场,5G工业网关品牌解析
人工智能·嵌入式硬件·5g
皓74134 分钟前
服饰电商行业知识管理的创新实践与知识中台的重要性
大数据·人工智能·科技·数据分析·零售
Researcher-Du1 小时前
随机采样之接受拒绝采样
概率论
985小水博一枚呀1 小时前
【深度学习滑坡制图|论文解读3】基于融合CNN-Transformer网络和深度迁移学习的遥感影像滑坡制图方法
人工智能·深度学习·神经网络·cnn·transformer
AltmanChan1 小时前
大语言模型安全威胁
人工智能·安全·语言模型
985小水博一枚呀1 小时前
【深度学习滑坡制图|论文解读2】基于融合CNN-Transformer网络和深度迁移学习的遥感影像滑坡制图方法
人工智能·深度学习·神经网络·cnn·transformer·迁移学习
数据与后端架构提升之路1 小时前
从神经元到神经网络:深度学习的进化之旅
人工智能·神经网络·学习
爱技术的小伙子2 小时前
【ChatGPT】如何通过逐步提示提高ChatGPT的细节描写
人工智能·chatgpt