首页 > 其他分享 >河南大学-机器学习-朴素贝叶斯分类

河南大学-机器学习-朴素贝叶斯分类

时间:2024-04-05 11:05:05浏览次数:17  
标签:河南大学 self 贝叶斯 train test import data prob 朴素

实验目的

  1. 掌握决策树算法原理;

     2.编程实现朴素贝叶斯算法算法,并实现分类任务

实验内容

1.使用sklearn的朴素贝叶斯算法对鸢尾花数据集进行分类,要求:

(1)划分训练集和测试集(测试集占20%)

(2)对测试集的预测类别标签和真实标签进行对比

(3)输出分类的准确率

2.动手编写朴素贝叶斯分类算法对手写字体数据集进行分类,要求:

(1)划分训练集和测试集(测试集占20%)

(2)对手写字体进行二值化处理

(3)输出分类的准确率

实验代码

 1.

#coding=UTF-8
import numpy as np
import pandas as pd
import matplotlib.pyplot as plt
from sklearn.datasets import load_iris
from sklearn.naive_bayes import GaussianNB
from sklearn.model_selection import train_test_split
from sklearn.metrics import accuracy_score

# 加载鸢尾花数据集
data = load_iris()
X = data.data
y = data.target

# 划分训练集和测试集
train_X, test_X, train_y, test_y = train_test_split(X, y, test_size=0.2, random_state=42)

# 使用朴素贝叶斯算法进行分类
model = GaussianNB()
model.fit(train_X, train_y)

# 对测试集进行预测
pred_y = model.predict(test_X)

# 计算准确率
accuracy = accuracy_score(test_y, pred_y)
print(f"分类的准确率为: {accuracy}")

# 对比预测结果和真实标签
comparison_df = pd.DataFrame({'真实标签': test_y, '预测标签': pred_y})
print(comparison_df)

2.

import gzip
import pickle
import numpy as np
from sklearn.model_selection import train_test_split
from sklearn.metrics import accuracy_score

def load_data(filename):
    with gzip.open(filename, 'rb') as f:
        data = pickle.load(f, encoding='latin1')
    return data

def binarize_data(data, threshold=127):
    return (data > threshold).astype(int)

class NaiveBayes:
    def __init__(self):
        self.class_prior = None
        self.conditional_prob = None

    def fit(self, X, y):
        n_samples, n_features = X.shape
        self.classes = np.unique(y)
        n_classes = len(self.classes)

        self.class_prior = np.zeros(n_classes)
        self.conditional_prob = np.zeros((n_classes, n_features, 2))

        for i, c in enumerate(self.classes):
            X_c = X[y == c]
            self.class_prior[i] = X_c.shape[0] / n_samples
            self.conditional_prob[i,:,0] = (np.sum(X_c == 0, axis=0) + 1) / (X_c.shape[0] + 2) # Laplace smoothing
            self.conditional_prob[i,:,1] = (np.sum(X_c == 1, axis=0) + 1) / (X_c.shape[0] + 2) # Laplace smoothing

    def predict(self, X):
        preds = []
        for x in X:
            prob = []
            for i, c in enumerate(self.classes):
                likelihood = 1.0
                for j in range(len(x)):
                    if x[j] == 1:
                        likelihood *= self.conditional_prob[i, j, 1]
                    else:
                        likelihood *= self.conditional_prob[i, j, 0]
                prob.append(likelihood * self.class_prior[i])
            preds.append(np.argmax(prob))
        return np.array(preds)

# 加载数据
data = load_data('F:/File/大三下/机器学习/朴素贝叶斯分类实验/实验/mnist.pkl.gz')
X = data[0][0]
y = data[0][1]

# 划分训练集和测试集(测试集占20%)
X_train, X_test, y_train, y_test = train_test_split(X, y, test_size=0.2, random_state=42)

# 对手写字体进行二值化处理
X_train_binary = binarize_data(X_train)
X_test_binary = binarize_data(X_test)

# 创建朴素贝叶斯分类器
clf = NaiveBayes()

# 训练模型
clf.fit(X_train_binary, y_train)

# 对测试集进行预测
y_pred = clf.predict(X_test_binary)

# 输出分类的准确率
accuracy = accuracy_score(y_test, y_pred)
print("分类准确率:", accuracy)

标签:河南大学,self,贝叶斯,train,test,import,data,prob,朴素
From: https://blog.csdn.net/m0_68231248/article/details/137395889

相关文章

  • 1.6 - 朴素贝叶斯及概率图模型
    1.模型理念利用条件概率&全概率公式,由果推因,从已知的某个现象特征求得目标属性的方法。所谓朴素:概率求解的过程中,假设数据特征之间是互相独立的,联合概率可以直接概率密度相乘。2.模型构建及特性2.1模型推理以及训练参数由条件概率公式可以得知,在已知数据的各项......
  • #私藏项目实操分享# Java实现基于朴素贝叶斯的情感词分析
    另外,在贝叶斯公式的基础上进行变形,可以得到下面的公式:$$P(B_i|A)=\frac{P(B_i)P(A|B i)}{\sum {j=1}^nP(B_j)P(A|B_j)}$$其中 B1,B2,…,Bj 是一个完备事件组,上面的公式可以表示在事件A已经发生的条件下,寻找导致A发生的各种“原因”的 Bi 的概率。朴素贝叶斯......
  • R语言贝叶斯INLA空间自相关、混合效应、季节空间模型、SPDE、时空分析野生动物数据可
    全文链接:https://tecdat.cn/?p=35518原文出处:拓端数据部落公众号在统计建模过程中,经常会遇到空间自相关性的问题。空间自相关性是指相近位置的观测值往往比远离位置的观测值更相似。在尝试估计参数或进行预测时,空间自相关性可能会导致结果产生偏差。INLA(IntegratedNestedLapla......
  • 【机器学习】贝叶斯上篇(详解)
    深入理解贝叶斯学习:核心原理及应用全解析在机器学习的领域内,贝叶斯学习作为一种强大的框架,使我们能够在不确定性条件下进行预测和决策。贝叶斯学习源于托马斯·贝叶斯的工作,提供了一种概率论的学习方法,与传统的频率统计学提供了不同的视角。本文将深入探讨贝叶斯学习的核心原......
  • 100天精通风控建模(原理+Python实现)——第23天:风控建模中的贝叶斯优化是什么?怎么实现
    在当今风险多变的环境下,风控建模已经成为金融机构、企业等组织的核心工作之一。在各大银行和公司都实际运用于业务,用于营销和风险控制等。本文以视频的形式阐述风控建模中的召回率是什么,怎么实现。并提供风控建模原理和Python实现文章清单。  之前已经阐述了100天精通风......
  • 【机器学习-08】参数调优宝典:网格搜索与贝叶斯搜索等攻略
    超参数是估计器的参数中不能通过学习得到的参数。在scikit-learn中,他们作为参数传递给估计器不同类的构造函数。典型的例子有支持向量分类器的参数C,kernel和gamma,Lasso的参数alpha等。​在超参数集中搜索以获得最佳crossvalidation交叉验证分数的方法是可实现并且推荐的......
  • DBO优化朴素贝叶斯分类预测(matlab代码)
    DBO-朴素贝叶斯分类预测matlab代码蜣螂优化算法(DungBeetleOptimizer,DBO)是一种新型的群智能优化算法,在2022年底提出,主要是受蜣螂的的滚球、跳舞、觅食、偷窃和繁殖行为的启发。数据为Excel分类数据集数据。数据集划分为训练集、验证集、测试集,比例为8:1:1模块化结构:代......
  • 多项式朴素贝叶斯分类器
    在这篇文章中,我们介绍多项式朴素贝叶斯分类器是如何工作的,然后使用scikit-learn作为实际工作的示例来介绍如何使用。与假设高斯分布的高斯朴素贝叶斯分类器相反,多项式朴素贝叶斯分类器依赖于多项分布。通过学习/估计每个类的多项概率来“拟合”多项式分类器-使用平滑技巧来处理......
  • Python贷款违约预测:Logistic、Xgboost、Lightgbm、贝叶斯调参/GridSearchCV调参
    原文链接:https://tecdat.cn/?p=35392原文出处:拓端数据部落公众号分析师:LinsengBo银行贷款业务是银行的主要盈利方式,对于具体的贷款申请人,是否可以同意贷款申请是一件十分重要的步骤,如果贷款人在贷款后出现违约行为,这将对银行的资金流稳定性造成不利的影响。因此针对贷款人的“......
  • 贝叶斯估计在机器学习中的用法
    通常我们需要去估计某符号出现的条件概率:\(P(Y|X)=\frac{P(X|Y)P(Y)}{P(Y)}\)例如,在一个评分预测中,我想得到对某个序列的评分的概率。如图如果我想知道item4各个标签出现的概率,那么需要先计算item4条件下其他符号出现的概率P(X|item4)以及item4出现的概率。......