朴素贝叶斯分类器基于iris及Python手写实现

news/2024/11/13 15:54:24/

数据来源为sklean.datasets中的load_iris,代码如下:

python"># -*- coding:utf-8 -*-
import numpy as np
import pandas as pd
from sklearn.datasets import load_iris
from sklearn.model_selection import train_test_split
from sklearn.metrics import accuracy_score# 参考:https://blog.csdn.net/weixin_66845445/article/details/138135601
class bayes_iris():def __init__(self):passdef loadData(self):iris = load_iris()dataSet = iris.datatarget = iris.targetX_train,X_test,y_train,y_test = train_test_split(dataSet, target, test_size=0.3,random_state=37)labels = np.array(sorted(list(set(y_train))))return X_train,X_test,y_train,y_test,labels'''分类值有三个,分别计算每个属性在三个分类值下的条件概率'''def cal(self,test,col_index,labels,X,y):result = np.zeros((labels.shape[0],),dtype=np.float64)for index ,label in zip(range(len(labels)), labels):arr = np.array(list(zip(*X[y == label])))[col_index,:]mean = np.mean(arr)std = np.std(arr)result[index] = (1 / (np.sqrt(2 * np.pi)* std)) * np.exp(-1* (((test - mean)**2) / (2 * (std**2))))return resultdef pred(self,X_train,X_test,y_train,labels):countAll = y_train.shape[0]P0 = len(y_train[y_train == 0]) / countAllP1 = len(y_train[y_train == 1]) / countAllP2 = len(y_train[y_train == 2]) / countAllP = np.array([P0,P1,P2]).reshape(3,1)y_pred = np.zeros(X_test.shape[0], dtype=np.int8)for i in range(X_test.shape[0]):# result.shape = (3,4)result = np.zeros((labels.shape[0],X_test.shape[1]), dtype=np.float64)for j in range(X_test.shape[1]):result[:,j] = self.cal(X_test[i,j],j,labels=labels, X=X_train,y=y_train)result = np.concatenate((P,result), axis=1)y_pred[i] = labels[np.argmax(np.prod(result, axis=1))]return y_predif __name__ == '__main__':iris = bayes_iris()X_train,X_test,y_train,y_test,labels = iris.loadData()y_pred = iris.pred(X_train,X_test,y_train,labels)print(accuracy_score(y_test, y_pred=y_pred))

输出结果如下:

1.0

参考:https://blog.csdn.net/weixin_66845445/article/details/138135601


http://www.ppmy.cn/news/1545885.html

相关文章

Yocto 项目下通过网络更新内核、设备树及模块

Yocto 项目下通过网络更新内核、设备树及模块 前言 在 Yocto 项目的开发过程中,特别是在进行 BSP(Board Support Package)开发时,经常需要调整特定软件包的版本,修改内核、设备树以及内核模块。然而,每次…

江苏博才众创科技产业园集团拟投资10亿元在泰兴打造汽车零部件产业园

2024年11月7日,泰兴市高新技术产业开发区与江苏博才众创科技产业园集团举行新能源汽车零部件智能制造产业园项目签约仪式。 泰兴市高新区党工委委员、管理办副主任王峰表示:高新区是全市项目建设的主阵地,近年来聚焦高端化、智能化、绿色化&a…

【青牛科技】应用方案 | RTC实时时钟芯片D8563和D1302

一、应用领域 工控主板、安卓主板、TV板卡、智能三表(电表、水表、气表)、便携式仪器仪表等需要计时或有日历要求的产品。 二、基本特性 D8563和D1302是芯谷科技推出的RTC实时时钟芯片,具有功耗低、走时精准、外围简单等特点,二者…

使用Docker快速部署FastAPI Web应用

Docker是基于 Linux 内核的cgroup、namespace以及 AUFS 类的Union FS 等技术,对进程进行封装隔离,一种操作系统层面的虚拟化技术。Docker中每个容器都基于镜像Image运行,镜像是容器的只读模板,容器是模板的一个实例。镜像是分层结…

100种算法【Python版】第50篇——Tim Sort

本文目录 1 基本原理2 主要步骤3 算法示例4 Python 实现4.1 代码说明4.2 复杂度分析Tim Sort 是一种混合排序算法,由 Tim Peters 于 2002 年为 Python 编程语言设计。它结合了插入排序和归并排序的优点,专门针对实际数据中的某些模式进行优化。Tim Sort 的核心思想是将数组分…

Spring Boot 与 Vue 共筑高校网上订餐卓越平台

作者介绍:✌️大厂全栈码农|毕设实战开发,专注于大学生项目实战开发、讲解和毕业答疑辅导。 🍅获取源码联系方式请查看文末🍅 推荐订阅精彩专栏 👇🏻 避免错过下次更新 Springboot项目精选实战案例 更多项目…

Oracle简介、环境搭建和基础DML语句

第一章 ORACLE 简介 1.1 什么是 ORACLE ORACLE数据库系统是美国ORACLE 公司(甲骨文)提供的以分布式数据库为核心的一组软件产品,是目前最流行的客户/服务器体系结构的数据库之一。 英文官网:Database | Oracle 中文官网&#xff…

【1】虚拟机安装

1.安装VMware WorkStation Pro VMware下载地址: 密钥:YF390-0HF8P-M81RQ-2DXQE-M2UT6 2.新建虚拟机 centos7下载地址:centos-7.9.2009-isos-x86_64安装包下载_开源镜像站-阿里云