高斯贝叶斯(Gaussian Naive Bayes)基于Numpy的python实现
学了贝叶斯以后,不用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实现相关推荐
- 【机器学习sklearn】高斯朴素贝叶斯 Gaussian naive bayes
贝叶斯Bayes - Thomas Bayes 前言 一.贝叶斯决策论(Bayesian decision theory) 二.实例:高斯朴素贝叶斯 Gaussian Naive Bayes (Gau ...
- 朴素贝叶斯(Naive Bayes)(原理+Python实现)
朴素贝叶斯(Naive Bayes)(原理+Python实现) 创作背景 算法分类 生成类算法 判别类算法 区别 知识补充 朴素贝叶斯算法 举个栗子 求解思路 求解过程(数学计算) 代码实现 自己实现 ...
- 朴素贝叶斯(Naive Bayes)分类和Gaussian naive Bayes
朴素贝叶斯(Naive Bayes) 参考资料:https://www.cnblogs.com/pinard/p/6069267.html 朴素贝叶斯最关键的就是 (强制认为每种指标都是独立的 ...
- 朴素贝叶斯(naive bayes)原理小结
朴素贝叶斯(naive bayes)原理小结 1. 朴素贝叶斯的学习 1.1 基本假设:条件独立性 1.2 朴素贝叶斯分类器 1.3 后验概率的含义 2. 参数估计 2.1 极大似然估计 2.2 贝叶 ...
- 朴素贝叶斯(naive bayes)分类
1. 概念回顾 1.1 条件概率公式 条件概率是指在事件B发生的条件下,事件A发生的概率.条件概率表示为P(A∣B)P(A|B)P(A∣B),读作"A在B发生的条件下发生的概率". ...
- python机器学习-朴素贝叶斯(Naive Bayes)模型建立及评估(完整代码+实现效果)
实现功能: python机器学习-朴素贝叶斯(Naive Bayes)模型建立及评估. 实现代码: # 导入需要的库 from warnings import simplefilter simplef ...
- 朴素贝叶斯(Naive Bayes):鸢尾花分类项目(不调库,手工推)
一.数据来源 1.数据来源:kaggle 2.数据样式 通过对数据"萼片.花瓣的长度.宽度(sepal_length.sepal_width.petal_length.petal_width ...
- 朴素贝叶斯(Naive Bayes)和校正曲线(Calibration Curve)
算法回顾 图片来源:https://medium.com/machine-learning-101/chapter-1-supervised-learning-and-naive-bayes-clas ...
- 朴素贝叶斯(Naive Bayes)详解
朴素贝叶斯是贝叶斯分类器中的一种模型,用已知类别的数据集训练模型,从而实现对未知类别数据的类别判断.其理论基础是贝叶斯决策论(Bayesian decision theory). 一:基础知识 (1) ...
最新文章
- tmp ubuntu 自动删除吗_Linux tmp目录自动清理总结
- boost::ptr_set相关的测试程序
- 给TreeView控件绑定数据
- static的应用以及静态与非静态的区别
- Ubuntu 16.04安装教程及虚拟机设置
- Spring4.x整合Axis1.4发布WebService服务
- mysql的日期和时间函数
- 等待队列设备[置顶] Linux设备驱动,等待队列
- 多头注意力比单头好在哪?
- MySQL下载安装教程及Navicat安装教程
- 小程序UI组件库合集——Vant、iView、ColorUI
- 计算机病毒如何彻底去除,电脑中病毒最彻底的清除方法 彻底清理删除电脑病毒的几种简单方法...
- 爱荷华州立大学计算机科学,2020年爱荷华州立大学排名TFE Times美国最佳计算机科学硕士专业排名第63...
- Web负载均衡的几种实现方式
- 《Java 并发编程的艺术》迷你书
- 关于赛车游戏制作的一点体会
- 2022第三届全国大学生网络安全精英赛练习题(9)
- 算法竞赛-ch2-水仙花数
- 证明DES解密算法实际上是DES加密算法的逆
- 个人站长应该怎么设置服务器才可以无视CC攻击