朴素贝叶斯算法实现(预测糖尿病)
关于朴素贝叶斯算法
在本教程中,您将学习Naive Bayes算法,包括它的工作原理以及如何在Python中从头开始实现它。
朴素贝叶斯算法是一种直观的方法,它使用属于每个类的每个属性的概率来进行预测。 如果您想要概率性地建模预测建模问题,那么您将提出监督学习方法。
朴素贝叶斯通过假设属于给定类值的每个属性的概率独立于所有其他属性来简化概率的计算。 这是一个强有力的假设,但会产生一种快速有效的方法。(朴素贝叶斯法对条件概率分布作了条件独立性的假设。由于这是一个较强的假设,朴素贝叶斯法也由此得名)
给定属性值的类值的概率称为条件概率。 通过将条件概率乘以给定类值的每个属性,我们得到属于该类的数据实例的概率。
为了进行预测,我们可以计算属于每个类的实例的概率,并选择具有最高概率的类值。
朴素贝叶斯通常使用分类数据来描述,因为它易于使用比率进行描述和计算。 用于我们目的的更有用的算法版本支持数字属性并假设每个数字属性的值是正态分布的(落在钟形曲线上的某处)。 同样,这是一个强有力的假设,但仍然提供了可靠的结果。
预测糖尿病的发病
这个问题包括对Pima印第安人专利的医疗细节的768次观察。 记录描述了从患者身上获取的瞬时测量值,例如他们的年龄,怀孕次数和血液检查次数。 所有患者均为21岁或以上的女性。 所有属性都是数字,其单位因属性而异。
每个记录具有类别值,该类别值指示患者在进行测量(1)或不进行测量(0)的5年内是否患有糖尿病。
这是一个标准的数据集,已在机器学习文献中进行了大量研究。 良好的预测准确率为70%-76%。
朴素贝叶斯算法教程
本教程分为以下几个步骤:
处理数据:从CSV文件加载数据并将其拆分为训练和测试数据集。
汇总数据:总结训练数据集中的属性,以便我们可以计算概率并进行预测。
进行预测:使用数据集的摘要生成单个预测。
制作预测:根据测试数据集和汇总的训练数据集生成预测。
评估准确度:评估为测试数据集做出的预测的准确性,作为所有预测中的正确百分比。将它绑定在一起:使用所有代码元素来呈现Naive Bayes算法的完整且独立的实现。
1.处理数据
import pandas as pd
from sklearn.model_selection import train_test_split
import numpy as np
import math
from collections import Counter
import matplotlib.pyplot as plt
%matplotlib inlinedef loadCsv(url):data = pd.read_csv(url, sep=',')data.columns = ['one', 'two', 'three', 'four', 'five','six','seven','eight','target']data = np.array(data.iloc[:700, :])return data,data[:,:-1],data[:,-1]
url = 'https://raw.githubusercontent.com/jbrownlee/Datasets/master/pima-indians-diabetes.data.csv'
data,X,y = loadCsv(url)
X_train, X_test, y_train, y_test = train_test_split(X, y, test_size=0.2, random_state=3, stratify=y)
GaussianNB 高斯朴素贝叶斯
特征的可能性被假设为高斯
概率密度函数:
P(xi∣yk)=12πσyk2exp(−(xi−μyk)22σyk2)P(x_i | y_k)=\frac{1}{\sqrt{2\pi\sigma^2_{yk}}}exp(-\frac{(x_i-\mu_{yk})^2}{2\sigma^2_{yk}})P(xi∣yk)=2πσyk21exp(−2σyk2(xi−μyk)2)
数学期望(mean):μ\muμ,方差:σ2=∑(X−μ)2N\sigma^2=\frac{\sum(X-\mu)^2}{N}σ2=N∑(X−μ)2
在给定从训练数据估计的属性的已知平均值和标准偏差的情况下,我们可以使用高斯函数来估计给定属性值的概率。
假定为每个属性和类值准备的属性汇总,结果是给定类值的给定属性值的条件概率。
有关高斯概率密度函数的详细信息,请参阅参考资料。 总之,我们将已知细节插入高斯(属性值,平均值和标准偏差)并读取属性值属于类的可能性。
在calculateProbability()函数中,我们首先计算指数,然后计算主要的除法。 这让我们可以在两条线上很好地拟合方程。
class NaiveBayes:def __init__(self):self.model = None#数学期望(均值是数据的中心中心或中心趋势,我们将在计算概率时将其用作高斯分布的中间。)@staticmethoddef mean(X):return sum(X) / float(len(X))# 标准差( 标准偏差描述了数据传播的变化,我们将用它来表征计算概率时高斯分布中每个属性的预期传播。)def stdev(self,X):avg = self.mean(X)return math.sqrt(sum([pow(x-avg,2) for x in X]) / float(len(X)))# 概率密度函数def gaussian_probality(self,x,mean,stdev):exponent = math.exp(-(math.pow(x-mean,2)/(2*math.pow(stdev,2))))return (1 / (math.sqrt(2*math.pi) * stdev)) * exponent# zip函数将数据实例中每个属性的值分组到它们自己的列表中,以便我们可以计算属性的均值和标准差值。def summarize(self,train_data):summaries = [(self.mean(i), self.stdev(i)) for i in zip(*train_data)]return summaries# 分类别求出数学期望和标准差def fit(self, X, y):labels = list(set(y))data = {label:[] for label in labels}for f, label in zip(X, y):data[label].append(f)self.model = {label: self.summarize(value) for label, value in data.items()}return 'gaussianNB train done!'# 现在我们可以计算出属于某个类的属性的概率,我们可以组合数据实例的所有属性值的概率,并得出整个数据实例属于该类的概率。def calculate_probalities(self,input_data):probalities = {}for label, value in self.model.items():probalities[label] = 1for i in range(len(value)):mean,stdev = value[i]probalities[label] *= self.gaussian_probality(input_data[i], mean, stdev)return probalities# 可以计算属于每个类值的数据实例的概率,我们可以查找最大概率并返回关联类。def predict(self, X_test):label = sorted(self.calculate_probalities(X_test).items(), key=lambda x: x[-1])[-1][0]return label#可以将预测与测试数据集中的类值进行比较,并且可以将分类精度计算为0和100%之间的准确度。 getAccuracy()将计算此准确率。 def score(self, X_test, y_test):right = 0for X, y in zip(X_test, y_test):label = self.predict(X)if label == y:right += 1return right / float(len(X_test))
model = NaiveBayes()
model.fit(X_train, y_train)
'gaussianNB train done!'
print(model.predict([4.4, 3.2, 1.3, 0.2,0.6,5.7,4.7,6,5]))
1.0
model.score(X_test, y_test)
0.7285714285714285
朴素贝叶斯算法实现(预测糖尿病)相关推荐
- 机器学习-分类算法-朴素贝叶斯算法07
概率:概率定义为一件事情发生的可能性 如:扔硬币某一面朝上有50%概率 "朴素"贝叶斯:所有特征之间条件独立 朴素贝叶斯-文档分类 from sklearn.datasets im ...
- python人工智能——机器学习——分类算法-朴素贝叶斯算法对新闻进行分类案例
朴素贝叶斯案例流程 1.加载20类新闻数据,并进行分割 2.生成文章特征词 3.朴素贝叶斯estimator流程进行预估 代码 from sklearn.datasets import fetch_2 ...
- 朴素贝叶斯算法-分类算法
朴素贝叶斯算法-分类算法 1 概率基础 概率定义为一件事情发生的可能性 联合概率:包含多个条件,且所有条件同时成立的概率,记作P(A,B) 条件概率:事件A在另一个事件B已经发生条件下的发送概率,记作 ...
- 朴素贝叶斯算法及其实战
1.概率: 随机事件发生的可能性 2.定义 贝叶斯方法 贝叶斯方法是以贝叶斯原理为基础,使用概率统计的知识对样本数据集进行分类.由于其有着坚实的数学基础,贝叶斯分类算法的误判率是很低的.贝叶斯方法的特 ...
- 【朴素贝叶斯】深入浅出讲解朴素贝叶斯算法(公式、原理)
本文收录于<深入浅出讲解自然语言处理>专栏,此专栏聚焦于自然语言处理领域的各大经典算法,将持续更新,欢迎大家订阅! 个人主页:有梦想的程序星空 个人介绍:小编是人工智能领域硕士,全栈工 ...
- 数据挖掘之朴素贝叶斯算法
1.贝叶斯公式推理: A和B是两个事件,在B发生的条件下,A发生的条件概率记为 条件概率: (1) 条件概率: (2) (2)式得将其代入(1)得到贝叶斯公式: 可以写为 表示没有使用数据来训练分 ...
- Python scikit-learn,分类,朴素贝叶斯算法,文档分类,MultinomialNB,拉普拉斯平滑系数
朴素贝叶斯预测分类的思想就是根据待预测文档的特征(TF-IDF高的词)分别计算属于各个类别的概率,其中概率最大的类别,就是预测的类别.(朴素的意思就是文档的特征(词)之间相互独立) 朴素贝叶斯进行文档 ...
- k近邻算法与朴素贝叶斯算法
机器学习--k近邻算法与朴素贝叶斯算法 k近邻算法 朴素贝叶斯 理论基础: 精确率和召回率 交叉验证与网格搜索 k近邻算法 定义:如果一个样本在特征空间中的k个最相似(即特征空间中最邻近)的样本中的大 ...
- 【机器学习入门】(3) 朴素贝叶斯算法:多项式、高斯、伯努利,实例应用(心脏病预测)附python完整代码及数据集
各位同学好,今天我和大家分享一下朴素贝叶斯算法中的三大模型.在上一篇文章中,我介绍了朴素贝叶斯算法的原理,并利用多项式模型进行了文本分类预测. 朴素贝叶斯算法 -- 原理,多项式模型文档分类预测,附p ...
最新文章
- Guava学习笔记:缘起
- Mysql学习总结(11)——MySql存储过程与函数
- IT兄弟连 JavaWeb教程 EL表达式获取对象的属性以及数组的元素
- SM37job状态意义
- 【深度学习】一文看懂 (Transfer Learning)迁移学习(pytorch实现)
- 19 FI配置-财务会计-定义销售/采购税代码
- mysql数据字典生成器_「python技术」列表推导、生成器表达式和字典推导的差异及其示例
- hl3150cdn打印不了照片_如何在美国打印证件照片 (Passport Photos)?
- 苹果手机截图的两种方法
- 解决开发工具文件夹拖不进图片文件
- JAVA常见字符编码表
- 微信公众平台、微信开放平台、微信商户平台的区别
- Ubuntu16.04关闭笔记本触摸板
- 高线测径仪精密测量已实现全面的检测
- focaltech(敦泰)触摸屏驱动Ft5306.c学习记录
- Excel无法另存为的解决办法
- SpringBoot导入导出你会用吗?(EasyPoi)
- 爬取百大弹幕,大家还是喜欢上罗老师的课!
- 肥而不腻的红烧肉做法
- MPP技术的优势与严重缺陷
热门文章
- kindel 资源_Hanselminutes播客206-Windows Phone 7系列-Charlie Kindel的开发人员经验
- (一)数据清理之stata的使用----------数据的导入,导出;do文件的使用问题
- python在教育领域的应用_浅谈Python的主要应用领域
- 康托展开Cantor expansion 康托逆展开
- html5 移动摄像头,H5 使用移动端摄像头
- 树--- python实现
- 推荐系统实践-利用用户标签数据(4)
- 精读英文外刊 | Day 1
- SSM毕设项目医院人事及科室病区管理4m1k5(java+VUE+Mybatis+Maven+Mysql)
- 记录一下某位大神关于HTV的详细内容