朴素贝叶斯是一种十分简单的分类算法,称其朴素是因为其思想基础的简单性,就文本分类而言,他认为词袋中的两两词之间的关系是相互独立的,即一个对象的特征向量中的每个维度都是互相独立的。这是朴素贝叶斯理论的思想基础。

朴素贝叶斯分类的正式定义:

  1. 设x={}为一个待分类项,而每个a为x的一个特征属性
  2. 有类别集合C={}
  3. 计算P(|x),P(|x),…,P(|x)
  4. 如果P(|x)=max{ P(|x),P(|x),…,P(|x)},则x

那么关键就是如何计算第三步中的各个条件概率,我们可以这样计算:

  1. 找到一个已知分类的待分类项集合,即训练集
  2. 统计得到在各类别下各个特征属性的条件概率估计,即:

P(),P(),…,P()

P(),P(),…,P()

P(),P(),…,P()

  1. 如果各个特征属性是条件独立的(或者假设他们之间是相互独立的),根据贝叶斯定理,有如下推导:

因为分母对于所有类别为常数,只要将分子最大化即可,又因为各特征属性是条件独立的,所以有:

根据上述分析,朴素贝叶斯分类的流程可以表示如下:

  1. 训练数据生成样本集:TF-IDF
  2. 对每个类别计算P()
  3. 对每个特征属性计算所有划分的条件概率
  4. 对每个类别计算P(x|)P()
  5. 以P(x|)P()的最大项作为x的所属类别

朴素贝叶斯的算法实现

首先创建一个Nbayes_pre.py文件来编写导入的数据和朴素贝叶斯类的代码

#高斯朴素贝耶斯
import numpy as np
from sklearn.model_selection import train_test_split
import pandas as pd
from sklearn.naive_bayes import GaussianNB
from sklearn.naive_bayes import BernoulliNB #伯努利分布
from sklearn.naive_bayes import MultinomialNB
from sklearn.neighbors import KNeighborsClassifier
'''''

clf = GaussianNB().fit(X, Y)
clf_pf = GaussianNB().partial_fit(X, Y, np.unique(Y))
##伯努利分布
clf = BernoulliNB()
clf.fit(train_data, train_target)
BernoulliNB(alpha=1.0, binarize=0.0, class_prior=None, fit_prior=True)

#多项式分布
from sklearn.naive_bayes import MultinomialNB
clf = MultinomialNB().fit(x_train, y_train)
'''
def getdatafromcsv():
data=pd.read_csv('iris .csv')
cols=['Sepal.Length','Sepal.Width','Petal.Length','Petal.Width']
train_target=data['Species']
train_data=data[cols]
return train_data,train_target
"""
#第一个为身高,第二个值为体重(kg),第三个为性别,1为男,2为女
x_train = [[160, 60, 1], [155, 80, 1], [178, 53, 2], [158, 53, 2], [166, 45, 2], [170, 50, 2], [156, 56, 2],
[166, 50, 1], [175, 55, 1], [188, 68, 1], [159, 41, 2], [166, 70, 1], [175, 85, 1], [188, 98, 1],
[159, 61, 2]]
#1为胖,0为瘦

y_train = [1, 1, 0, 0, 0, 0, 1, 1, 0, 0, 0, 1, 1, 1, 1]
x_test = [[166, 45, 2], [172, 52, 1], [156, 60, 1], [150, 70, 2],[166,60,1]]
"""
train_data,train_target=getdatafromcsv()
x_train,x_test,y_train,y_test=train_test_split(train_data,train_target,test_size=0.1)

def predcitbyts(train_data,train_target,test_data):
clf = GaussianNB().fit(train_data,train_target)
predict=clf.predict(test_data)
print("高斯贝耶斯结果:",predict)
clf_pf = GaussianNB().partial_fit(train_data, train_target, np.unique(train_target))
predict1=clf_pf.predict(test_data)
print("高斯贝耶斯结果partial_fit:",predict1)

def predictknn(train_data,train_target,test_data):
knn = KNeighborsClassifier()
knn.fit(train_data, train_target)
iris_y_predict = knn.predict(test_data)
print("KNN结果:",iris_y_predict)

def Bernoulli(train_data,train_target,test_data):
clf = BernoulliNB()
clf.fit(train_data, train_target)
BernoulliNB(alpha=1.0, binarize=0.0, class_prior=None, fit_prior=True)
predict=clf.predict(test_data)
print(predict)

#多项式
def Multinomial(train_data,train_target,test_data):
clf = MultinomialNB().fit(x_train, y_train)
predict=clf.predict(test_data)
print(predict)

Multinomial(x_train,y_train,x_test)
print(y_test)

朴素贝叶斯算法python实现的更多相关文章

  1. 朴素贝叶斯算法--python实现

    朴素贝叶斯算法要理解一下基础:    [朴素:特征条件独立   贝叶斯:基于贝叶斯定理] 1朴素贝叶斯的概念[联合概率分布.先验概率.条件概率**.全概率公式][条件独立性假设.]   极大似然估计 ...

  2. 朴素贝叶斯算法原理及Spark MLlib实例(Scala/Java/Python)

    朴素贝叶斯 算法介绍: 朴素贝叶斯法是基于贝叶斯定理与特征条件独立假设的分类方法. 朴素贝叶斯的思想基础是这样的:对于给出的待分类项,求解在此项出现的条件下各个类别出现的概率,在没有其它可用信息下,我 ...

  3. 朴素贝叶斯算法的python实现方法

    朴素贝叶斯算法的python实现方法 本文实例讲述了朴素贝叶斯算法的python实现方法.分享给大家供大家参考.具体实现方法如下: 朴素贝叶斯算法优缺点 优点:在数据较少的情况下依然有效,可以处理多类 ...

  4. 朴素贝叶斯算法的python实现

    朴素贝叶斯 算法优缺点 优点:在数据较少的情况下依然有效,可以处理多类别问题 缺点:对输入数据的准备方式敏感 适用数据类型:标称型数据 算法思想: 朴素贝叶斯比如我们想判断一个邮件是不是垃圾邮件,那么 ...

  5. 机器学习:python中如何使用朴素贝叶斯算法

    这里再重复一下标题为什么是"使用"而不是"实现": 首先,专业人士提供的算法比我们自己写的算法无论是效率还是正确率上都要高. 其次,对于数学不好的人来说,为了实 ...

  6. Python机器学习笔记:朴素贝叶斯算法

    朴素贝叶斯是经典的机器学习算法之一,也是为数不多的基于概率论的分类算法.对于大多数的分类算法,在所有的机器学习分类算法中,朴素贝叶斯和其他绝大多数的分类算法都不同.比如决策树,KNN,逻辑回归,支持向 ...

  7. Python机器学习算法 — 朴素贝叶斯算法(Naive Bayes)

    朴素贝叶斯算法 -- 简介 朴素贝叶斯法是基于贝叶斯定理与特征条件独立假设的分类方法.最为广泛的两种分类模型是决策树模型(Decision Tree Model)和朴素贝叶斯模型(Naive Baye ...

  8. 机器学习---用python实现朴素贝叶斯算法(Machine Learning Naive Bayes Algorithm Application)

    在<机器学习---朴素贝叶斯分类器(Machine Learning Naive Bayes Classifier)>一文中,我们介绍了朴素贝叶斯分类器的原理.现在,让我们来实践一下. 在 ...

  9. 朴素贝叶斯算法下的情感分析——C#编程实现

    这篇文章做了什么 朴素贝叶斯算法是机器学习中非常重要的分类算法,用途十分广泛,如垃圾邮件处理等.而情感分析(Sentiment Analysis)是自然语言处理(Natural Language Pr ...

随机推荐

  1. Linux系统管理——用户、组

    单用户OS和多用户OS? Linux是多用户OS,Windows是单用户OS.很多人会疑惑? Windows7也可以创建多个用户啊,怎么能说是单用户OS呢? 这里的多用户指的是OS同时可以被多个人访问 ...

  2. 台式机电脑u盘启动识别不到U盘设置

    U盘作为一个引导盘,在装机过程中显得十分的方便,有时候我们可以将U盘做成一个PE启动盘,有时我们也可以直接将U盘做成一个操作系统光盘的镜像. 但是有时候我们辛辛苦苦将U盘做成了引导盘了,关机---&g ...

  3. [杭电oj][1005]Number Sequence

    sky同学在努力地刷题..,在这题卡住了,于是一起研究了一下... 这题本身挺简单的,(1) = 1, f(2) = 1, f(n) = (A * f(n - 1) + B * f(n - 2)) m ...

  4. (1)openstack-Rabbitmq 集群部署

    一.前期准备   (1)条件:准备3台linux系统,确保配置好源,及epel源  yun1,yun2,yun3   (2)三台机器能够静态解析彼此   (3)设置可以无密钥登陆  ssh-keyge ...

  5. 复杂sql书写方法

    给你一个复杂sql连接不同的表,多个嵌套查询条件等的语句时,你是非常的胆怯由于对语法的不熟悉以及没有经验和自信,现在我们来学习一下如何写复杂的sql,我们把它分解为很多小的步骤进行 一.集中最后的输出 ...

  6. 【二进制优化-多重背包】zznu-oj-2120 : 安详--如何用尽钱币打赏主播获得最大好感度

    2120 : 安详 题目描述 spring最近喜欢上了B站新秀主播,身为顿顿吃黄焖鸡的土豪,当然要过去打赏一番,但是spring还是喜欢精打细算,所以在打赏的时候,想要掏出有限的钱,获得主播的最大好感 ...

  7. TCP中的长连接和短连接(转载)

    原文地址:http://www.cnblogs.com/onlysun/p/4520553.html 次挥手,所以说每个连接的建立都是需要资源消耗和时间消耗的  示意图:               ...

  8. 利用tycho插件自动生成pom文件

    mvn org.eclipse.tycho:tycho-pomgenerator-plugin:generate-poms -DgroupId=com.vogella.tychoexample com ...

  9. 更好的处理 Python 多工程 import 依赖

    话说, 这段时间需要开发一个项目, 新项目对现有的几乎所有项目都有依赖. 豆瓣现存的几个大项目,基本都是围绕豆瓣主站shire的依赖, 也就是说, 其他项目对shire的单项依赖,  这些项目在需要主 ...

  10. for迭代多个对象

    1.传统方法 from random import randint chinese = [randint(60, 100) for _ in range(40)] math = [randint(60 ...