NBC朴素贝叶斯分类器 ————机器学习实战 python代码

# -*- coding: utf-8 -*-
"""
Created on Mon Aug 07 23:40:13 2017

@author: mdz
"""
import numpy as np
def loadData():
    vocabList=[[‘my‘, ‘dog‘, ‘has‘, ‘flea‘, ‘problems‘, ‘help‘, ‘please‘],
                 [‘maybe‘, ‘not‘, ‘take‘, ‘him‘, ‘to‘, ‘dog‘, ‘park‘, ‘stupid‘],
                 [‘my‘, ‘dalmation‘, ‘is‘, ‘so‘, ‘cute‘, ‘I‘, ‘love‘, ‘him‘],
                 [‘stop‘, ‘posting‘, ‘stupid‘, ‘worthless‘, ‘garbage‘],
                 [‘mr‘, ‘licks‘, ‘ate‘, ‘my‘, ‘steak‘, ‘how‘, ‘to‘, ‘stop‘, ‘him‘],
                 [‘quit‘, ‘buying‘, ‘worthless‘, ‘dog‘, ‘food‘, ‘stupid‘]]
    classList=[0,1,0,1,0,1]#1 侮辱性文字,0 正常言论
    return vocabList,classList

#对vocabList已经拆分过的句子进行筛选,筛选掉重复的单词,最后再返回list
#该list的length即属性的个数
def filterVocabList(vocabList):
    vocabSet=set([])
    for document in vocabList:
        vocabSet=vocabSet|set(document)
    return list(vocabSet)    

#对测试样本进行0-1处理
def zero_one(vocabList,input):
    returnVec=[0]*len(vocabList)
    for word in input:
       if word in vocabList:
         returnVec[vocabList.index(word)]=1
       else:
         print "the word: %s is not in my Vocabulary!"%word
    return returnVec

def trainNbc(trainSamples,trainCategory):
    numTrainSamp=len(trainSamples)
    numWords=len(trainSamples[0])
    pAbusive=sum(trainCategory)/float(numTrainSamp)
    #y=1 or 0下的特征计数
    p0Num=np.ones(numWords)
    p1Num=np.ones(numWords)
    #y=1 or 0下的类别计数
    p0NumTotal=numWords
    p1NumTotal=numWords
    for i in range(numTrainSamp):
        if trainCategory[i]==1:
             p0Num+=trainSamples[i]
             p0NumTotal+=sum(trainSamples[i])
        else:
             p1Num+=trainSamples[i]
             p1NumTotal +=sum(trainSamples[i])
    p1Vec=np.log(p1Num/p1NumTotal)
    p0Vec=np.log(p0Num/p0NumTotal)
    return p1Vec,p0Vec,pAbusive

def classifyOfNbc(testSamples,p1Vec,p0Vec,pAbusive):
    p1=sum(testSamples*p1Vec)+np.log(pAbusive)
    p0=sum(testSamples*p0Vec)+np.log(1-pAbusive)
    if p1>p0:
        return 1
    else:
        return 0
def testingNbc():
    vocabList,classList=loadData()
    vocabSet=filterVocabList(vocabList)
    trainList=[]
    for term in vocabList:
        trainList.append(zero_one(vocabSet,term))
    p1Vec,p0Vec,pAbusive=trainNbc(np.array(trainList),np.array(classList))
    testEntry=[‘love‘,‘my‘,‘daughter‘]
    testSamples=np.array(zero_one(vocabSet,testEntry))
    print testEntry,‘classified as :‘,classifyOfNbc(testSamples,p0Vec,p1Vec,pAbusive)
    testEntry=[‘stupid‘,‘garbage‘]
    testSamples=np.array(zero_one(vocabSet,testEntry))
    print testEntry,‘classified as :‘,classifyOfNbc(testSamples,p0Vec,p1Vec,pAbusive)

  

时间: 2024-08-15 06:26:50

NBC朴素贝叶斯分类器 ————机器学习实战 python代码的相关文章

朴素贝叶斯分类算法介绍及python代码实现案例

朴素贝叶斯分类算法 1.朴素贝叶斯分类算法原理 1.1.概述 贝叶斯分类算法是一大类分类算法的总称 贝叶斯分类算法以样本可能属于某类的概率来作为分类依据 朴素贝叶斯分类算法是贝叶斯分类算法中最简单的一种 注:朴素的意思是条件概率独立性 P(A|x1x2x3x4)=p(A|x1)*p(A|x2)p(A|x3)p(A|x4)则为条件概率独立 P(xy|z)=p(xyz)/p(z)=p(xz)/p(z)*p(yz)/p(z) 1.2.算法思想 朴素贝叶斯的思想是这样的: 如果一个事物在一些属性条件发生

【机器学习算法-python实现】扫黄神器-朴素贝叶斯分类器的实现

(转载请注明出处:http://blog.csdn.net/buptgshengod) 1.背景 以前我在外面公司实习的时候,一个大神跟我说过,学计算机就是要一个一个贝叶斯公式的套用来套用去.嗯,现在终于用到了.朴素贝叶斯分类器据说是好多扫黄软件使用的算法,贝叶斯公式也比较简单,大学做概率题经常会用到.核心思想就是找出特征值对结果影响概率最大的项.公式如下: 什么是朴素贝叶斯,就是特征值相互独立互不影响的情况.贝叶斯可以有很多变形,这里先搞一个简单的,以后遇到复杂的再写. 2.数据集 摘自机器学

机器学习:贝叶斯分类器(二)——高斯朴素贝叶斯分类器代码实现

一 高斯朴素贝叶斯分类器代码实现 网上搜索不调用sklearn实现的朴素贝叶斯分类器基本很少,即使有也是结合文本分类的多项式或伯努利类型,因此自己写了一遍能直接封装的高斯类型NB分类器,当然与真正的源码相比少了很多属性和方法,有兴趣的可以自己添加.代码如下(有详细注释): class NaiveBayes(): '''高斯朴素贝叶斯分类器''' def __init__(self): self._X_train = None self._y_train = None self._classes

朴素贝叶斯分类器及Python实现

贝叶斯定理 贝叶斯定理是通过对观测值概率分布的主观判断(即先验概率)进行修正的定理,在概率论中具有重要地位. 先验概率分布(边缘概率)是指基于主观判断而非样本分布的概率分布,后验概率(条件概率)是根据样本分布和未知参数的先验概率分布求得的条件概率分布. 贝叶斯公式: P(A∩B) = P(A)*P(B|A) = P(B)*P(A|B) 变形得: P(A|B)=P(B|A)*P(A)/P(B) 其中 P(A)是A的先验概率或边缘概率,称作"先验"是因为它不考虑B因素. P(A|B)是已知

机器学习---朴素贝叶斯分类器(Machine Learning Naive Bayes Classifier)

朴素贝叶斯分类器是一组简单快速的分类算法.网上已经有很多文章介绍,比如这篇写得比较好:https://blog.csdn.net/sinat_36246371/article/details/60140664.在这里,我按自己的理解再整理一遍. 在机器学习中,我们有时需要解决分类问题.也就是说,给定一个样本的特征值(feature1,feature2,...feauren),我们想知道该样本属于哪个分类标签(label1,label2,...labeln).即:我们想要知道该样本各个标签的条件概

基于朴素贝叶斯分类器的文本分类算法

源代码下载:NaviveBayesClassify.rar Preface 文本的分类和聚类是一个比较有意思的话题,我以前也写过一篇blog<基于K-Means的文本聚类算法>,加上最近读了几本数据挖掘和机器学习的书籍,因此很想写点东西来记录下学习的所得. 在本文的上半部分<基于朴素贝叶斯分类器的文本分类算法(上)>一文中简单介绍了贝叶斯学习的基本理论,这一篇将展示如何将该理论运用到中文文本分类中来,具体的文本分类原理就不再介绍了,在上半部分有,也可以参见代码的注释. 文本特征向量

PGM学习之三 朴素贝叶斯分类器(Naive Bayes Classifier)

介绍朴素贝叶斯分类器的文章已经很多了.本文的目的是通过基本概念和微小实例的复述,巩固对于朴素贝叶斯分类器的理解. 一 朴素贝叶斯分类器基础回顾 朴素贝叶斯分类器基于贝叶斯定义,特别适用于输入数据维数较高的情况.虽然朴素贝叶斯分类器很简单,但是它确经常比一些复杂的方法表现还好. 为了简单阐述贝叶斯分类的基本原理,我们使用上图所示的例子来说明.作为先验,我们知道一个球要么是红球要么是绿球.我们的任务是当有新的输入(New Cases)时,我们给出新输入的物体的类别(红或者绿).这是贝叶斯分类器的典型

从朴素贝叶斯分类器到贝叶斯网络(下)

书接上文 :从朴素贝叶斯分类器到贝叶斯网络(上) 三.贝叶斯网络 贝叶斯网络(Bayesian Network)是一种用于表示变量间依赖关系的数据结构.有时它又被称为信念网络(Belief Network)或概率网络(Probability Network).在统计学习领域.概率图模型(PGM,Probabilistic Graphical Models)经常使用来指代包括贝叶斯网络在内的更加宽泛的一类机器学习模型.比如隐马尔可夫模型(HMM,Hidden Markov Model)也是一种PG

数据挖掘十大经典算法(9) 朴素贝叶斯分类器 Naive Bayes

贝叶斯分类器 贝叶斯分类器的分类原理是通过某对象的先验概率,利用贝叶斯公式计算出其后验概率,即该对象属于某一类的概率,选择具有最大后验概率的类作为该对象所属的类.眼下研究较多的贝叶斯分类器主要有四种,各自是:Naive Bayes.TAN.BAN和GBN. 贝叶斯网络是一个带有概率凝视的有向无环图,图中的每个结点均表示一个随机变量,图中两结点 间若存在着一条弧,则表示这两结点相相应的随机变量是概率相依的,反之则说明这两个随机变量是条件独立的.网络中随意一个结点X 均有一个对应的条件概率表(Con