十大算法之朴素贝叶斯
来源:互联网 发布:数据变异程度 编辑:程序博客网 时间:2024/06/08 03:48
1.条件概率
这个符号代表的意思是在类别Ci的条件下,出现某个由x,y组成的数据点的概率。
2.贝叶斯公式
这个准则的目的是求当知道某个点的条件下,判断他属于哪个类别的条件概率。
3.贝叶斯准则进行分类
假设数据点(x,y)可能分成C1,C2类,使用上述的贝叶斯公式进行类别的判断。那么定义贝叶斯准则为:
如果P(C1|x,y)>P(C2|x,y),那么该点属于类别C1
如果P(C1|x,y)
4.朴素贝叶斯
即假设每个样本中的特征出现的可能性相互独立。那么对于多特征的问题计算条件概率的时候,可以利用以下公式来计算条件概率:
P(x,y,z|C1)=P(x|C1)* P(y|C1) * P(z|C1)
5.下面通过以下词向量分类的例子说明朴素配叶斯分类的原理
这里w代表一个词向量,这个词向量有多个特征(w0,w1,w2,…wn),ci是这个词向量的分类。这里假设所有的特征词汇都是独立的,那么在计算p(w0,w1,w2…wn|ci)就可以用p(w0|ci) * p(w1|ci)…p(wn|ci)来代替,这就是朴素贝叶斯的原理。
测试词条转化成向量:
转化出来的向量每个元素代表词汇表中的单词是否出现在该词条中,若出现,则对应元素为1,否则,对应元素为0
def setOfWords2Vec(vocabList,inputSet): returnVec=[0]*len(vocabList) for word in inputSet: if word in vocabList: returnVec[vocabList.index(word)]=1 else:print "the word:%s is not in my Vocabulary!" % word return returnVec
训练贝叶斯分类器:
这里注意了,每个词汇表都相当于一个贝叶斯模型,不同的词汇表会输入不同的trainMatrix,trainCategory参数,从而在训练的结果会出现不同的p0Vect,p1Vect,pAbusive。
#traindef trainNB0(trainMatrix,trainCategory): numTrainDocs=len(trainMatrix) numWords=len(trainMatrix[0]) pAbusive=sum(trainCategory)/float(numTrainDocs)#计算出该文档中出现侮辱性词汇的先验概率 p0Num=ones(numWords) p1Num=ones(numWords) p0Denom=2.0 p1Denom=2.0 for i in range(numTrainDocs): ##以下这个过程就是条件概率实践方法 if trainCategory[i]==1: p1Num+=trainMatrix[i]#对侮辱性文档的每个词汇的数量统计 p1Denom+=sum(trainMatrix[i])#侮辱性文档的词汇总数 else: p0Num+=trainMatrix[i]#对非侮辱性文档的每个词汇的数量统计 p0Denom+=sum(trainMatrix[i])#非侮辱性文档的词汇总数 p1Vect=log(p1Num/p1Denom) p0Vect=log(p0Num/p0Denom) return p0Vect,p1Vect,pAbusive
测试分类器:
在classifyNB()函数中,以p(ci,w)代替p(ci|w)来最终判断w的类别,可能是因为在这个分词的背景下,这两个概率是等价的(这个仅仅是我个人的理解)
def classifyNB(vec2Classify,p0Vec,p1Vec,pClass1):##以下加号的左边是将所有的log相加,就是将所有出现在测试词条的属性的条件概率相乘,最后得出总体的条件概率,右边是类别取对数 p1=sum(vec2Classify*p1Vec)+log(pClass1) p0=sum(vec2Classify*p0Vec)+log(1-pClass1) if p1 > p0: return 1 else: return 0#这里太简单,不做解释def testingNB(): lsitOPosts,listClasses=loadDataSet() myVocabList=createVocabList(listOPosts) trainMat=[] for postinDoc in listOPosts: trainMat.append(setOfWords2Vec(myVocabList,postinDoc)) p0V,p1V,pAb=trainNB0(trainMat,listClasses) testEntry=['love','my','dalmation'] thisDoc=setOfWords2Vec(myVocabList,testEntry) print testEntry,'classified as: ',classifyNB(thisDoc,p0V,p1V,pAb) testEntry=['stupid','garbage'] thisDoc=setOfWords2Vec(myVocabList,testEntry) print testEntry,'Classified as: ',classifyNB(thisDoc,p0V,p1V,pAb)
6.交叉验证
就是将一个数据集一部分作为训练集,一部分作为测试集合。训练集和测试集不能有交集。
7.以上的一些注释都是对《机器学习实践》一书中第4章贝叶斯算法的一些比较难懂的地方的一下个人理解。
- 十大算法之朴素贝叶斯
- 机器学习十大算法之朴素贝叶斯
- 数据挖掘十大经典算法学习之Naive Bayes朴素贝叶斯
- 数据挖掘十大经典算法学习之Naive Bayes朴素贝叶斯
- 用Python Scikit-learn 实现机器学习十大算法--朴素贝叶斯算法(文末有代码)
- 数据挖掘十大经典算法(9) 朴素贝叶斯分类器 Naive Bayes
- 数据挖掘十大经典算法(9) 朴素贝叶斯分类器 Naive Bayes
- 数据挖掘十大经典算法(9) 朴素贝叶斯分类器 Naive Bayes
- 数据挖掘十大经典算法(9) 朴素贝叶斯分类器 Naive Bayes
- 数据挖掘十大经典算法(9) 朴素贝叶斯分类器 Naive Bayes
- 数据挖掘十大经典算法(9) 朴素贝叶斯分类器 Naive Bayes
- 数据挖掘十大经典算法(9) 朴素贝叶斯分类器 Naive Bayes
- 数据挖掘十大算法翻译——9朴素贝叶斯
- 数据挖掘十大经典算法(九) 朴素贝叶斯分类器 Naive Bayes
- 数据挖掘十大经典算法(9) 朴素贝叶斯分类器 Naive Bayes
- 生成学习算法之朴素贝叶斯算法
- 机器学习算法之朴素贝叶斯算法
- 机器学习算法之朴素贝叶斯算法
- 第二篇. 操作系统之 进程与线程
- 罕见bug解决办法: kienct 1代运行错误Failed to claim camera interface: LIBUSB_ERROR_NOT_FOUND
- 【bzoj1797】[Ahoi2009]Mincut 最小割
- Android绘图基础——仿华为加载动画
- 阿里云服务器 ECS 访问不了公网 ip 可能的原因及解决方法
- 十大算法之朴素贝叶斯
- 嵌入式OS入门笔记-以RTX为案例:三.初探进程
- 根据服务器返回的状态改变前端显示的内容(Angular 过滤器)
- Redis-跳表
- Ubuntu 如何设置静态IP
- 树莓大一下期末C++期末考试题及扩展思考
- HTC Vive Unity 教程
- 【笔记】【imooc】Javascript 正则表达式(Regular Expression)
- c++之const小结-使用注意