机器学习概论 朴素贝叶斯分类实现(实验二)

一、实验目的
1、熟悉朴素贝叶斯的求解公式;
2、掌握朴素贝叶斯的代码实现;
3、比较朴素贝叶斯算法的优劣;
4、熟悉numpy的使用。
二、实验设备
计算机:CPU四核i7 6700处理器;内存8G; SATA硬盘2TB硬盘; Intel芯片主板;集成声卡、千兆网卡、显卡; 20寸液晶显示器。
编译环境:python解释器、Pycharm编辑器
三、实验内容
1、新建项目和文件,并导入numpy和matplotlib
(1)打开Pycharm,新建项目,并在该项目下新建文件naive_bayes_classifier.py。
(2)在该项目下存放实验所需要的图片文件夹。
(3)导入一些编程中需要的包。

import numpy as np
import os
from PIL import Image
import time

2、构造一个函数data_transformer
(1)定义函数头data_transformer,该函数有一个参数,path_images,表示图片的存放路径。
(2)将图片读取为103000785的训练数据和102000785的测试数据。

def data_transformer(path_images):
    list_image = os.listdir(path_images)
    data = []
    for nums in list_image:
        path_num = path_images + "\\" + nums
        list_num = os.listdir(path_num)
        data_num = []
        for idx in range(0, 5000):
            img = Image.open(path_num + '\\' + list_num[idx])
            data_vector = list(np.array(img).flatten())
            data_vector.append(int(nums))
            data_num.append(data_vector)
        data.append(data_num)

    data = np.array(data)
    data_train = data[:, 0:3000, :]
    data_test = data[:
### 朴素贝叶斯算法的基本原理 朴素贝叶斯是一种基于概率理论的监督学习方法,它利用了条件概率的核心思想来解决分类问题。该算法通过计算给定特征条件下各个类别的后验概率来进行预测,并选择具有最大后验概率的类别作为最终结果。 #### 贝叶斯定理 贝叶斯定理描述了如何更新先验信念以获得更精确的结果。具体而言,它是用来估计某个事件发生的可能性,在已知其他相关证据的情况下。公式如下: \[ P(C|X) = \frac{P(X|C) P(C)}{P(X)} \] 其中 \( C \) 表示类别标签,\( X \) 是输入数据向量。这里的关键在于计算条件概率 \( P(X|C) \),即在特定类别下观察到某组属性的概率[^1]。 #### 朴素假设 为了简化复杂度,“朴素”一词意味着我们假定所有特征之间相互独立。即使这种假设通常并不完全成立于现实世界的数据集中,但在许多实际场景中仍然能够提供良好的性能表现。这一特性使得模型训练变得高效而易于管理[^2]。 ### 工作流概述 以下是朴素贝叶斯工作的一般过: - **准备阶段**: 收集并预处理用于建模的历史样本; - **参数估算**: 使用训练集合中的频率统计得出各类别及其对应特征值出现的可能性分布; - **测试阶段**: 对新实例运用上述学到的知识去推断所属群体归属情况; ### 类型划分 根据不同的应用场景以及连续变量处理方式的不同,存在几种常见的变体形式,比如多项式朴素贝叶斯、伯努利朴素贝叶斯还有针对数值型资料设计出来的高斯朴素贝叶斯等等。 ### 实现举例 (Python) 下面展示了一个简单的例子,演示如何使用 `scikit-learn` 库里的 GaussianNB 来完成鸢尾花种类识别的任务: ```python from sklearn.datasets import load_iris from sklearn.model_selection import train_test_split from sklearn.naive_bayes import GaussianNB from sklearn.metrics import accuracy_score # 加载数据集 data = load_iris() X_train, X_test, y_train, y_test = train_test_split(data.data, data.target, test_size=0.5, random_state=0) # 初始化并拟合模型 gnb = GaussianNB() y_pred = gnb.fit(X_train, y_train).predict(X_test) print(f"Accuracy: {accuracy_score(y_test, y_pred):.2f}") ``` 此脚本首先分割出了训练子集与验证子集之后建立起了一个标准版的高斯分布版本的 Naïve Bayes Classifier 并评估它的准确性得分。 ### 优势与局限性分析 ##### 优点: - 计算成本低,特别适合在线学习环境下的实时需求响应。 - 当面对小型规模或者稀疏矩阵类型的数据库时表现出色。 ##### 缺点: - 如果某些组合从未出现在训练样例里,则直接判定为零概率可能会引发错误结论。 - 前述提到过的强加性的“特征间无关联”的前提设定往往难以满足真实状况的要求。
评论 3
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值