学了贝叶斯以后,不用SKlearn现成的包,基于numpy自己实现了一下高斯贝叶斯算法。可以按照顺序把代码贴进去,自己跑一下试试。

导入需要的包

import time #调用时间,显示算法运行时间
import os
import math
import numpy as np
import scipy as sp
import pandas as pd
# 使np矩阵不显示科学计数
np.set_printoptions(suppress=True)

主体Naive Bayes代码

class Gaussian(object):"""implements Gaussian Bayes classifier algorithms. These are supervised learning methods based on applying Bayes' theorem with strong (naive) feature independence assumptions.function1-fit: Fit the model by Gaussian Bayes classifier.Parameters----------X_train: train datasety_train: label of X_train----------function2-predict: return x_test's classification result based on Gaussian Bayes classifier.Parameters----------y : x_test----------"""def __init__(self):passdef fit(self,X_train,y_train):self._data_with_label=X_train.copy()self._y_train=pd.DataFrame(y_train.values,columns=['label'])self._data_with_label['label']=y_train.valuesself.mean_mat= self._data_with_label.groupby("label").mean()self.var_mat=self._data_with_label.groupby("label").var()self.prior_rate=self.__Priori()return selfdef predict(self,X_test):pred=[ self.__Condition_formula(self.mean_mat,self.var_mat,row )*self.prior_rate for row in X_test.values ]  # get the class_result=np.argmax(pred, axis=1)  # get the max return class_result#Priori probabilitydef __Priori(self):la = self._y_train['label'].value_counts().sort_index()prior_rate=np.array([ i /sum(la) for i in la])return prior_rate#Gaussian Bayes condition formuladef __Condition_formula(self,mu,sigma2,row):P_mat=1/np.sqrt(2*math.pi*sigma2)*np.exp(-(row-mu)**2/(2*sigma2))P_mat=pd.DataFrame(P_mat).prod(axis=1)return P_mat

缺点:循环较多,性能不够优化

找个数据集测试一下:

from sklearn.datasets import load_iris
from sklearn.model_selection import train_test_splitiris = load_iris()
iris.target=pd.DataFrame(iris.target)
iris.data=pd.DataFrame(iris.data)
X_train, X_test, y_train, y_test = train_test_split(iris.data, iris.target, test_size=0.4, random_state=1)
np.set_printoptions(suppress=True)

接下来是用自己写的高斯贝叶斯算法测试:

from sklearn.metrics import accuracy_scorestart_time = time.time()NB = Gaussian()
NB.fit(X_train, y_train)
y_train_NB = NB.predict(X_train)
y_test_NB = NB.predict(X_test)
print("Use custom Gaussian Naive Bayes algorithm\naccuracy on train set: ",accuracy_score(y_train,y_train_NB ),"\naccuracy on test set: ",accuracy_score(y_test,y_test_NB))print("--- %s seconds ---" % (time.time() - start_time))

可以看到结果有90+准确率。

再用sklearn自带的GaussianNB包对比一下:

from sklearn.naive_bayes import GaussianNB
start_time = time.time()
NB2 = GaussianNB()
NB2.fit(X_train, y_train.values.ravel())
y_train_NB2 = NB2.predict(X_train)
y_test_NB2 = NB2.predict(X_test)
print("Use sklearn Gaussian Naive Bayes algorithm\naccuracy on train set: ",accuracy_score(y_train,y_train_NB2 ),"\naccuracy on test set: ",accuracy_score(y_test,y_test_NB2))print("--- %s seconds ---" % (time.time() - start_time))

准确率和前面手写的Gaussian Naive Bayes算法是一样的,但是速度快了很多。大概是因为自定义算法内部循环较多的缘故,如换成矩阵运算应该会优化速度。

最后用混淆矩阵看一下测试集上的分类效果:

import matplotlib.pyplot as plt
import seaborn as sns
con_matrix = pd.crosstab(pd.Series(y_test.values.flatten(), name='Actual' ),pd.Series(y_test_NB, name='Predicted'))
plt.title("Test set Confusion Matrix on Gaussian Naive Bayes")
sns.heatmap(con_matrix, cmap="Blues", annot=True, fmt='g')
plt.show()

算法主体部分代码放到GitHub上了,有兴趣欢迎关注:
https://github.com/JuneYaooo/ml-algorithms

高斯贝叶斯(Gaussian Naive Bayes)基于Numpy的python实现相关推荐

  1. 【机器学习sklearn】高斯朴素贝叶斯 Gaussian naive bayes

    贝叶斯Bayes - Thomas Bayes 前言 一.贝叶斯决策论(Bayesian decision theory) 二.实例:高斯朴素贝叶斯 Gaussian Naive Bayes (Gau ...

  2. 朴素贝叶斯(Naive Bayes)(原理+Python实现)

    朴素贝叶斯(Naive Bayes)(原理+Python实现) 创作背景 算法分类 生成类算法 判别类算法 区别 知识补充 朴素贝叶斯算法 举个栗子 求解思路 求解过程(数学计算) 代码实现 自己实现 ...

  3. 朴素贝叶斯(Naive Bayes)分类和Gaussian naive Bayes

    朴素贝叶斯(Naive Bayes)   参考资料:https://www.cnblogs.com/pinard/p/6069267.html   朴素贝叶斯最关键的就是 (强制认为每种指标都是独立的 ...

  4. 朴素贝叶斯(naive bayes)原理小结

    朴素贝叶斯(naive bayes)原理小结 1. 朴素贝叶斯的学习 1.1 基本假设:条件独立性 1.2 朴素贝叶斯分类器 1.3 后验概率的含义 2. 参数估计 2.1 极大似然估计 2.2 贝叶 ...

  5. 朴素贝叶斯(naive bayes)分类

    1. 概念回顾 1.1 条件概率公式 条件概率是指在事件B发生的条件下,事件A发生的概率.条件概率表示为P(A∣B)P(A|B)P(A∣B),读作"A在B发生的条件下发生的概率". ...

  6. python机器学习-朴素贝叶斯(Naive Bayes)模型建立及评估(完整代码+实现效果)

    实现功能: python机器学习-朴素贝叶斯(Naive Bayes)模型建立及评估. 实现代码: # 导入需要的库 from warnings import simplefilter simplef ...

  7. 朴素贝叶斯(Naive Bayes):鸢尾花分类项目(不调库,手工推)

    一.数据来源 1.数据来源:kaggle 2.数据样式 通过对数据"萼片.花瓣的长度.宽度(sepal_length.sepal_width.petal_length.petal_width ...

  8. 朴素贝叶斯(Naive Bayes)和校正曲线(Calibration Curve)

    算法回顾 图片来源:https://medium.com/machine-learning-101/chapter-1-supervised-learning-and-naive-bayes-clas ...

  9. 朴素贝叶斯(Naive Bayes)详解

    朴素贝叶斯是贝叶斯分类器中的一种模型,用已知类别的数据集训练模型,从而实现对未知类别数据的类别判断.其理论基础是贝叶斯决策论(Bayesian decision theory). 一:基础知识 (1) ...

最新文章

  1. tmp ubuntu 自动删除吗_Linux tmp目录自动清理总结
  2. boost::ptr_set相关的测试程序
  3. 给TreeView控件绑定数据
  4. static的应用以及静态与非静态的区别
  5. Ubuntu 16.04安装教程及虚拟机设置
  6. Spring4.x整合Axis1.4发布WebService服务
  7. mysql的日期和时间函数
  8. 等待队列设备[置顶] Linux设备驱动,等待队列
  9. 多头注意力比单头好在哪?
  10. MySQL下载安装教程及Navicat安装教程
  11. 小程序UI组件库合集——Vant、iView、ColorUI
  12. 计算机病毒如何彻底去除,电脑中病毒最彻底的清除方法 彻底清理删除电脑病毒的几种简单方法...
  13. 爱荷华州立大学计算机科学,2020年爱荷华州立大学排名TFE Times美国最佳计算机科学硕士专业排名第63...
  14. Web负载均衡的几种实现方式
  15. 《Java 并发编程的艺术》迷你书
  16. 关于赛车游戏制作的一点体会
  17. 2022第三届全国大学生网络安全精英赛练习题(9)
  18. 算法竞赛-ch2-水仙花数
  19. 证明DES解密算法实际上是DES加密算法的逆
  20. 个人站长应该怎么设置服务器才可以无视CC攻击

热门文章

  1. 点云学习笔记19——使用pcl将bin文件转化为pcd文件
  2. 如何用ae插件Typemonkey 实现文字混排效果
  3. Monkey学习心得
  4. 计算机辅助诊断(Computer-aided diagnosis)小总结
  5. TMS320C6748开发视频教程笔记 第12章 通用输入输出口 GPIO
  6. js 获取当前时间戳
  7. 唐骏:当年我为啥要讽刺微软的产品经理[转]
  8. 基于密码技术的应急广播安全解决方案
  9. C++输出各种图形简单实现
  10. SpringBoot之JPA框架下如何使用JTA——分布式事务解决方案