自己动手写贝叶斯分类器给图书分类
朴素贝叶斯文本分类(python代码实现)
朴素贝叶斯⽂本分类(python代码实现)朴素贝叶斯(naive bayes)法是基于贝叶斯定理与特征条件独⽴假设的分类⽅法。
优点:在数据较少的情况下仍然有效,可以处理多分类问题。
缺点:对⼊输⼊数据的准备⽅式较为敏感。
使⽤数据类型:标称型数据。
下⾯从⼀个简单问题出发,介绍怎么使⽤朴素贝叶斯解决分类问题。
⼀天,⽼师问了个问题,只根据头发和声⾳怎么判断⼀位同学的性别。
为了解决这个问题,同学们马上简单的统计了7位同学的相关特征,数据如下:头发声⾳性别长粗男短粗男短粗男长细⼥短细⼥短粗⼥长粗⼥长粗⼥这个问题之前⽤做过了,这⾥我们换⼀种思路。
要是知道男⽣和⼥⽣头发长短的概率以及声⾳粗细的概率,我们就可以计算出各种情况的概率,然后⽐较概率⼤⼩,来判断性别。
假设抽样样本⾜够⼤,我们可以近似认为可以代表所有数据,假设上位7位同学能代表所有数据,这⾥⽅便计算~由这7位同学,我们马上得出下⾯表格概率分布。
性别头发长声⾳粗男1/31⼥3/53/5假设头发和声⾳都是独⽴特征,于是男⽣头发长声⾳粗的概率=3/8*1/3*1=1/8⼥⽣头发长声⾳粗的概率=5/8*3/5*3/5=9/40因为1/8<9/40所以如果⼀个⼈,头发长,声⾳粗,那么这个⼈更可能是⼥⽣,于是出现这些特征就是⼥⽣。
其他特征依次类推。
这就是朴素贝叶斯分类⽅法。
是的,就是这么简单。
下⾯来解释原理,先看贝叶斯公式:公式中,事件Bi的概率为P(Bi),事件Bi已发⽣条件下事件A的概率为P(A│Bi),事件A发⽣条件下事件Bi的概率为P(Bi│A)。
带⼊我们的例⼦中,判断头发长的⼈性别:P(男|头发长)=P(头发长|男)*P(男)/P(头发长)P(⼥|头发长)=P(头发长|⼥)*P(⼥)/P(头发长)判断头发长、声⾳粗的⼈性别:P(男|头发长声⾳粗)=P(头发长|男)P(声⾳粗|男)*P(男)/P(头发长声⾳粗)P(⼥|头发长声⾳粗)=P(头发长|⼥)P(声⾳粗|⼥)*P(⼥)/P(头发长声⾳粗)可以看到,⽐较最后⽐较概率,只⽤⽐较分⼦即可。
如何使用Python实现朴素贝叶斯分类器
在机器学习领域,朴素贝叶斯分类器是一种常用的分类算法。
它基于贝叶斯定理和特征之间的独立假设,可用于对文本和其他类型的数据进行分类。
Python语言作为一种广泛应用于数据科学和机器学习的编程语言,提供了丰富的库和工具,使得实现朴素贝叶斯分类器变得相对容易。
下面将介绍如何使用Python实现朴素贝叶斯分类器。
数据预处理在实现朴素贝叶斯分类器之前,首先需要对数据进行预处理。
这包括数据的清洗、特征选择、特征提取等操作。
Python中有许多用于数据预处理的库,例如pandas、scikit-learn等。
通过这些库,可以方便地对数据进行处理,使其适合用于朴素贝叶斯分类器的训练和测试。
特征提取在进行朴素贝叶斯分类器的实现时,需要对数据进行特征提取。
特征提取是将原始数据转换为可用于分类器训练的特征数据的过程。
在文本分类任务中,特征可以是词袋模型、TF-IDF向量等。
Python中的nltk和gensim等库提供了丰富的工具,用于文本的特征提取和表示。
朴素贝叶斯分类器训练在进行朴素贝叶斯分类器的实现时,需要对训练数据进行训练。
Python中的scikit-learn库提供了朴素贝叶斯分类器的实现,例如GaussianNB、MultinomialNB等。
通过简单的几行代码,就可以使用这些分类器对训练数据进行训练,从而得到一个分类模型。
朴素贝叶斯分类器的预测在训练完成后,就可以使用朴素贝叶斯分类器对新的数据进行分类预测。
Python中的scikit-learn库提供了predict方法,用于对新数据进行分类预测。
可以很方便地使用这些方法,对新数据进行分类预测,并得到分类结果。
交叉验证和模型评估为了评估朴素贝叶斯分类器的性能,可以使用交叉验证和模型评估的方法。
Python中的scikit-learn库提供了交叉验证和模型评估的工具,例如cross_val_score、confusion_matrix等。
通过这些工具,可以对朴素贝叶斯分类器进行性能评估,并得到分类器的准确率、召回率等指标。
贝叶斯分类器代码
贝叶斯分类器代码1. 介绍贝叶斯分类器是一种基于贝叶斯定理的概率分类器。
它通过学习一组训练数据,构建一个由特征和类别之间的条件概率组成的模型,然后用该模型对新的未知样本进行分类。
贝叶斯分类器在文本分类、垃圾邮件过滤、情感分析等任务中都得到了广泛应用。
本文将详细探讨贝叶斯分类器的代码实现,在Python中使用scikit-learn库进行演示。
2. 贝叶斯分类器原理贝叶斯分类器基于贝叶斯定理,根据条件概率计算样本的后验概率。
具体来说,给定一个样本x和一组类别y_1, y_2, …, y_n,贝叶斯分类器的任务是预测样本x 属于每个类别的概率,然后选择具有最高概率的类别作为预测结果。
贝叶斯分类器通过以下公式计算后验概率:P(y|x) = (P(x|y) * P(y)) / P(x)其中,P(y|x)是给定样本x的条件下样本属于类别y的概率,P(x|y)是属于类别y 的样本中具有特征x的概率,P(y)是类别y发生的先验概率,P(x)是样本具有特征x的概率。
3. 数据准备在编写贝叶斯分类器代码之前,首先需要准备用于训练和测试的数据。
这里以一个文本分类任务为例,使用20类新闻文本数据集(20 Newsgroups)作为示范数据。
首先,从库中加载新闻数据集:from sklearn.datasets import fetch_20newsgroupscategories = ['alt.atheism', 'sci.med', 'comp.graphics', 'sci.space'] # 选择四个类别作为示例data_train = fetch_20newsgroups(subset='train', categories=categories, shuffle =True, random_state=42)data_test = fetch_20newsgroups(subset='test', categories=categories, shuffle=T rue, random_state=42)加载数据后,我们得到两个对象data_train和data_test,它们分别表示训练集和测试集。
朴素贝叶斯分类器及Python实现
朴素贝叶斯分类器及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)是已知B发⽣后A的条件概率,也称作A的后验概率。
P(B|A)是已知A发⽣后B的条件概率,也称作B的后验概率,这⾥称作似然度。
P(B)是B的先验概率或边缘概率,这⾥称作标准化常量。
P(B|A)/P(B)称作标准似然度。
朴素贝叶斯分类(Naive Bayes)朴素贝叶斯分类器在估计类条件概率时假设属性之间条件独⽴。
⾸先定义x = {a1,a2,...}为⼀个样本向量,a为⼀个特征属性div = {d1 = [l1,u1],...} 特征属性的⼀个划分class = {y1,y2,...}样本所属的类别算法流程:(1) 通过样本集中类别的分布,对每个类别计算先验概率p(y[i])(2) 计算每个类别下每个特征属性划分的频率p(a[j] in d[k] | y[i])(3) 计算每个样本的p(x|y[i])p(x|y[i]) = p(a[1] in d | y[i]) * p(a[2] in d | y[i]) * ...样本的所有特征属性已知,所以特征属性所属的区间d已知。
可以通过(2)确定p(a[k] in d | y[i])的值,从⽽求得p(x|y[i])。
(4) 由贝叶斯定理得:p(y[i]|x) = ( p(x|y[i]) * p(y[i]) ) / p(x)因为分母相同,只需计算分⼦。
贝叶斯分类器的实现与应用
贝叶斯分类器的实现与应用近年来,机器学习技术在各个领域都有着广泛的应用。
其中,贝叶斯分类器是一种常用且有效的分类方法。
本文将介绍贝叶斯分类器的原理、实现方法以及应用。
一、贝叶斯分类器原理贝叶斯分类器是一种概率分类器,它基于贝叶斯定理和条件概率理论,通过统计样本之间的相似度,确定样本所属分类的概率大小,从而进行分类的过程。
贝叶斯定理的公式为:P(A|B) = P(B|A) × P(A) / P(B)其中,P(A|B) 表示在已知 B 的条件下,事件 A 发生的概率;P(B|A) 表示在已知 A 的条件下,事件 B 发生的概率;P(A) 和 P(B) 分别表示事件 A 和事件 B 的概率。
在分类问题中,假设有 m 个不同的分类,每个分类对应一个先验概率 P(Yi),表示在未知样本类别的情况下,已知样本属于第 i 个分类的概率。
对于一个新的样本 x,通过求解以下公式,可以得出它属于每个分类的后验概率 P(Yi|X):P(Yi|X) = P(X|Yi) × P(Yi) / P(X)其中,P(X|Yi) 表示样本 X 在已知分类 Yi 的条件下出现的概率。
在贝叶斯分类器中,我们假设所有特征之间是独立的,即条件概率 P(X|Yi) 可以表示为各个特征条件概率的乘积,即:P(X|Yi) = P(X1|Yi) × P(X2|Yi) × ... × P(Xn|Yi)其中,X1、X2、...、Xn 分别表示样本 X 的 n 个特征。
最终,将所有分类对应的后验概率进行比较,找出概率最大的那个分类作为样本的分类结果。
二、贝叶斯分类器实现贝叶斯分类器的实现包括两个部分:模型参数计算和分类器实现。
1. 模型参数计算模型参数计算是贝叶斯分类器的关键步骤,它决定了分类器的分类性能。
在参数计算阶段,需要对每个分类的先验概率以及每个特征在每个分类下的条件概率进行估计。
先验概率可以通过样本集中每个分类的样本数量计算得到。
机器学习实战之朴素贝叶斯进行文档分类(Python代码版)
机器学习实战之朴素贝叶斯进⾏⽂档分类(Python代码版) 贝叶斯是搞概率论的。
学术圈上有个贝叶斯学派。
看起来吊吊的。
关于贝叶斯是个啥⽹上有很多资料。
想必读者基本都明了。
我这⾥只简单概括下:贝叶斯分类其实就是基于先验概率的基础上的⼀种分类法,核⼼公式就是条件概率。
举个俗⽓的例⼦,通过我们的以往观察,鲤鱼中尾巴是红⾊的占⽐达90%,鲫鱼中尾巴是红⾊的占⽐只有1%不到,那么新来了⼀条⼩鱼,他是鲤鱼还是鲫鱼呢?我看⼀下他的尾巴,发现是红⾊,根据过去的先验概率经验,它是鲤鱼的概率⽐较⼤,我认为它是鲤鱼。
这当时是个最简单的例⼦,实践中的问题就复杂了。
⽐如说特征不⽌是尾巴红不红,还有鱼嘴巴⼤不⼤,鱼肥不肥,鱼⾝⼦长还是宽,各种,⽽且不是⼀个特征就能分辨出来的,还需要多⽅分析,然后贝爷感觉这个那个的真⿇烦,就先假定每个特征都是独⽴的,如果⼀条鱼红尾巴⼤嘴巴肥得很还是长⾝⼦,就这样求她是鲤鱼的概率:鲤鱼中红尾巴0.9*鲤鱼中⼤嘴巴0.3*鲤鱼中肥猪0.6*鲤鱼中长⾝⼦0.4=0.27*0.24.。
闲话少扯。
上代码分析。
我代码⼲的不是鱼的分类了,⽽是⼀篇⽂档。
from numpy import *def loadDataSet():#这个函数呢,他建⽴了⼀个敏感词典,并打了标签,共6个词集合,其中2、4、6词集合中的词是敏感词postingList = [['my','dog','has','flea',\'problems','help','please'],['maybe','not','take','him',\'to','dog','park','stupid'],['my','dalmation','is','so','cute',\'T','love','him'],['stop','posting','stupid','worthless','garbage'],['mr','licks','ate','my','steak','how',\'to','stop','him'],['quit','buying','worthless','dog','food','stupid']]classVec = [0,1,0,1,0,1]return postingList,classVecdef createVocabList(dataSet):#这个函数呢,它是把输⼊的dataset(就是⼀个新⽂档嘛)进⾏分解处理,返回的是这个⽂档没有重复词的列表vocabSet = set([])for document in dataSet:vocabSet = vocabSet | set(document)return list(vocabSet)def setOfWords2Vec(vocabList,inputSet):#这个函数呢,他就是根据输⼊的新⽂档,和词汇表,来对新⽂档打标签,看他有多少敏感词,只要是出现了词汇表⾥的词,就将标签打1,没有就默认为0 returnVec = [0]*len(vocabList)for word in inputSet:if word in vocabList:returnVec[vocabList.index(word)] =1else :print ('the word: %s is not in my Vocabulary!' % word)return returnVecdef trainNB0(trainMatrix,trainCategory):numTrainDocs = len(trainMatrix)numWords = len(trainMatrix)pAbusive = sum(trainCategory) / float(numTrainDocs)p0Num = zeros(numWords)p1Num= zeros(numWords)p0Denom = 0.0;p1Denom = 0.0for i in range(numTrainDocs):if trainCategory[i] == 1:p1Num += trainMatrix[i]p1Denom += sum(trainMatrix[i])else:p0Num += trainMatrix[i]p0Denom += sum(trainMatrix[i])p1Vect = p1Num/p1Denomp0Vect = p0Num /p0Denomreturn p0Vect,p1Vect,pAbusivedef classifyNB(vec2Classify,p0Vec,p1Vec,pClass1):p1= sum(vec2Classify * p1Vec) + log(pClass1)p0 = sum(vec2Classify * p0Vec) + log(1.0 - pClass1)if p1 > p0:return 1else :return 0def testingNB():listOPosts,listClasses = loadDataSet()myVocabList = createVocabList(listOPosts)trainMat=[]for postinDoc in listOPosts:trainMat.append(setOfWords2Vec(myVocabList,postinDoc))p0V,p1V,pAb = trainNB0(array(trainMat),array(listClasses))testEntry = ['love','my','dalmation']thisDoc = array(setOfWords2Vec(myVocabList,testEntry))print (testEntry,'classified as: ',classifyNB(thisDoc,p0V,p1V,pAb))testEntry = ['stupid','garbage']thisDoc = array(setOfWords2Vec(myVocabList,testEntry))print (testEntry,'classified as :',classifyNB(thisDoc,p0V,p1V,pAb))def bagOfWords2VecMN(vocabList,inputSet):returnVec = [0]*len(vocabList)for word in inputSet:if word in vocabList:returnVec[vocabList.index(word)] +=1return returnVecdef textParse(bigString):import relistOfTokens = re.split(r'\W*',bigString)return [tok.lower() for tok in listOfTokens if len(tok) >2]def spamTest():docList = []; classList = [];fullText = []for i in range(1,26):wordList = textParse(open('E:/数据挖掘/MLiA_SourceCode/machinelearninginaction/Ch04/email/spam/%d.txt' % i).read()) docList.append(wordList)fullText.extend(wordList)classList.append(1)# print('zhe li de i shi %d,', i)wordList = textParse(open('E:/数据挖掘/MLiA_SourceCode/machinelearninginaction/Ch04/email/ham/%d.txt' % i).read()) docList.append(wordList)fullText.extend(wordList)classList.append(0)vocabList = createVocabList(docList)trainingSet = list(range(50));testSet=[]for i in range(10):randIndex = int(random.uniform(0,len(trainingSet)))testSet.append(trainingSet[randIndex])del(trainingSet[randIndex])trainMat=[];trainClasses=[]for docIndex in trainingSet:trainMat.append(setOfWords2Vec(vocabList,docList[docIndex]))trainClasses.append(classList[docIndex])p0V,p1V,pSpam = trainNB0(array(trainMat),array(trainClasses))errorCount=0for docIndex in testSet:wordVector = setOfWords2Vec(vocabList,docList[docIndex])if classifyNB(array(wordVector),p0V,p1V,pSpam) !=classList[docIndex]:errorCount +=1print ('the error rate is :',float(errorCount)/len(testSet))。
基于概率统计的贝叶斯分类器设计
贝叶斯分类器是一种基于概率统计的分类方法,它通过利用贝叶斯定理来进行分类。
下面是设计贝叶斯分类器的一般步骤:
1. 收集数据:首先需要准备一批已知类别的训练数据集,包括特征和对应的类别标记。
2. 特征选择:对于每个样本,需要选择合适的特征来描述样本的属性。
特征的选择对分类器的性能有很大影响,需要根据具体问题进行合理选择。
3. 计算先验概率:对于每个类别,计算其在训练数据集中出现的概率,即先验概率。
先验概率可以通过简单地计算每个类别在数据集中的出现频率来估计。
4. 计算条件概率:对于每个特征,计算在每个类别下的条件概率。
这需要对每个特征在每个类别下的分布进行建模,通常使用高斯分布、多项式分布等。
5. 应用贝叶斯定理:利用贝叶斯定理,结合先验概率和条件概率,计算给定特征下每个类别的后验概率。
后验概率表示了在观察到特定特征情况下,样本属于某个类别的概率。
6. 分类决策:对于新的未知样本,根据计算得到的后验概率,选择具有最高后验概率的类别作为分类结果。
即选择具有最大后验概率的类别作为所属类别。
7. 评估分类器性能:使用测试数据集对设计的分类器进行测试,评估其分类准确性和性能表现,可以采用交叉验证等方法进行评估。
8. 优化和改进:根据评估结果,对分类器进行优化和改进,可能包括调整特征选择、调整概率模型的参数等。
贝叶斯分类器是一种简单而有效的分类方法,特别适用于小样本数据集和高维特征空间。
但在实际应用中,需要考虑特征的独立性假设、概率分布的选择以及避免潜在的过拟合等问题。
用贝叶斯回归模型解决文本分类问题
用贝叶斯回归模型解决文本分类问题文本分类是指将一篇文本归类到已经定义好的分类中,常见的应用场景包括垃圾邮件识别、情感分析和新闻分类等。
在传统的机器学习中,通常采用基于特征工程的方法将文本转化为向量,然后使用分类算法进行分类,比如朴素贝叶斯、支持向量机等。
然而,这种方法较为繁琐且受限于特征的挑选和构造,对于新出现的文本可能表现不佳。
近年来,随着深度学习的兴起,基于神经网络的文本分类方法也得到了广泛的应用。
但是,相比于传统方法,深度学习需要大量的数据和计算资源,而且难以解释。
因此,如何解决文本分类问题是一个值得探讨的问题。
本文将介绍一种基于贝叶斯回归模型(Bayesian Logistic Regression,BLR)的文本分类方法,该方法不仅能高效地处理大规模的文本数据,而且能够同时输出分类概率和置信度,使得模型的结果更具可解释性和可靠性。
同时,本文还将结合代码实现对该方法进行详细的介绍和讲解。
贝叶斯回归模型贝叶斯回归模型是一种机器学习模型,它采用的是贝叶斯方法,利用概率对未知参数进行推断。
基于贝叶斯方法,我们可以通过先验分布和数据来计算后验分布,从而得到参数的估计值和可靠区间。
在文本分类中,BLR 可以看作是建立在朴素贝叶斯分类器基础之上的一种回归模型。
在BLR 中,我们假设样本的每个特征都服从高斯分布,因此每个特征的先验分布可以表示为:$$p(\mathbf{w}_{j} | \sigma_j^2) = N(\mathbf{w}_{j} | \mathbf{0}, \sigma_j^2\mathbf{I}), j=1,2,\ldots,d$$其中,$\mathbf{w}_j$ 表示第 $j$ 个特征所对应的权重向量,$\sigma_j^2$ 表示第$j$ 个特征的方差,$\mathbf{I}$ 是单位矩阵。
假设该文档属于第 $k$ 个类别,那么其后验概率可以表示为:$$P(y=k | \mathbf{x}, \mathbf{w}) = \frac{\exp(\beta_k +\mathbf{x}^T\mathbf{w}_k)}{\sum_{c=1}^K \exp(\beta_c +\mathbf{x}^T\mathbf{w}_c)}$$其中,$\beta_k$ 是偏置项,$\mathbf{x}$ 是文档的向量表示,$\mathbf{w}$ 是所有特征的权重向量集合,$K$ 是总的类别数目。
基于知识图谱和贝叶斯分类器的图书分类
2020年6月计算机工程与设计June2020第41卷第6期COMPUTER ENGINEERING AND DESIGN Vol.41No.6基于知识图谱和贝叶斯分类器的图书分类邹鼎杰(中国人民解放军国防大学政治学院,上海200433)摘要:为解决纸质图书因元数据稀缺导致自动分类器性能较低的问题,提出基于知识图谱和朴素贝叶斯分类器的图书分类算法。
分析Zhishi.me知识图谱的內部结构和朴素贝叶斯分类器模型,在此基础上提出图书分类算法过程模型,利用分词技术从图书固有元数据和Zhishi.me知识图谱中提取关于图书、作者和出版社的详细数据,进一步提取表示图书內容特征的关键词,以TF-IDF权值作为高质量关键词筛选标准,采用朴素贝叶斯分类器分类。
实验结果表明,通过融合图书的外部知识,分类器性能得到了有效提升。
关键词:图书分类;文本分类;知识图谱;贝叶斯分类器;特征选择中图法分类号:TP391文献标识号:A文章编号:1000-7024(2020)06179606doi:10.16208/j.issnl000-7024.2020.06.047Book class讦ication based on knowledge graph and Bayesian classifierZOU Dingjie(College of Politics,National Defense University of People's Liberation Army,Shanghai200433,China) Abstract:To solve the problem of poor performance of book automatic classifier caused by scarce metadata of paper books,a bookclassificationmethodbasedonknowledgegraphandnaiveBayesclassifierwasproposed.ThestructureofZhishi.meand the model of naive Bayes classifier were analyzed.A process model of book classification was proposed.Keywords were extracted from metadataofbooksanddetaildataaboutbooks&authorsandpublishinghousesobtainedfromZhishi.meknowledgegraph. TheimportanMeofkeywordswasdeterminedusingTF-IDFalgorithm.NaiveBayesianMlassifierwasusedtodisMriminatetheMlas-sification.Experimental results show that the performance of classifier is effectively improved by fusing external knowledge. Key words:book classification;text classification;knowledge graph;Bayes classifier;feature selection1引言图书分类问题属于文本分类问题,解决图书分类问题的基本思路是将文本分类算法应用到图书分类中%3*(文献[4*将LDA(latent dirichlet allocation)模型应用到图书分 类中,采取复合加权策略将书目体例体信息和所在类目信息融合到模型之中,图书分类性能得到了有效提升。
应用贝叶斯分类算法实现文本分类问题
应用贝叶斯分类算法实现文本分类问题在信息爆炸的时代,人们面临的问题越来越多,而文本分类问题就是其中之一。
文本分类问题指的是将一篇篇文本自动分类到预定义的分类目录中。
它在商业、法律和新闻等领域经常被应用。
本文将探讨如何应用贝叶斯分类算法实现文本分类问题。
一、文本分类文本分类可以分为有监督学习和无监督学习两种方式。
有监督学习是指在训练过程中,已经提供了含有标记的样本。
该模型根据已经标记的样本来建模和学习。
而无监督学习则是没有标记的样本,该模型根据对样本的自动分析来生成模型。
文本分类需要建立训练集、测试集和验证集,由于本文的重点是有监督的学习方式,因此我们需要提供带有标记的文本集。
二、贝叶斯分类算法贝叶斯分类算法是一种有监督学习的机器学习算法,它基于贝叶斯定理和条件概率来计算样本的类别概率,从而实现对样本的分类。
它可以用于自然语言处理、信号处理、图像处理等领域。
贝叶斯分类算法的一般步骤包括:1、统计训练样本集中每个类别的先验概率;2、计算每个类别下每个特征的条件概率;3、根据测试样本的特征向量,利用条件概率的乘积和先验概率计算该样本的后验概率;4、将后验概率最大的类别作为测试样本的分类结果。
三、实现文本分类对于文本分类问题,我们需要先对文本进行预处理,例如去除停用词,将文本变为小写等。
然后,我们需要将文本转换成特征向量,常见的方式有词袋法和TF-IDF法。
其中,词袋法是将文本中每个词都看做是一个特征,将文本转化为向量,而TF-IDF法可以考虑词汇的重要性因素,并对词汇的权重进行调整。
接着,我们需要对文本进行标记,建立一个训练集和测试集。
假设我们有M个样本,通过10折交叉验证法,将数据集划分成10个部分,分别进行训练和测试,得到10个分类器。
这样做可以减小估计偏差。
最后,我们需要选取一个最优的模型。
这可以通过计算正确率、召回率、F1值等指标来评估分类器的性能,进而选择一个最优的模型。
四、应用文本分类在实际应用中被广泛地应用。
贝叶斯分类器进行2-分类时的分类规则
贝叶斯分类器进行2-分类时的分类规则
贝叶斯分类器是一种常用的概率分类方法。
在进行二分类时,其分类规则可以简述如下:
假设我们有一个训练数据集,其中包含已知类别的样本。
对于一个待分类的新样本,我们需要计算其属于每个类别的概率。
根据贝叶斯定理,我们可以使用条件概率来计算后验概率:
P(类别|特征) = (P(特征|类别) * P(类别)) / P(特征)
其中,P(类别|特征)是后验概率,表示在给定特征条件下属于某个类别的概率;P(特征|类别)是似然概率,表示在已知类别下特征出现的概率;P(类别)是先验概率,表示某个类别的出现概率;P(特征)是Evidence,表示特征出现的概率。
对于二分类任务,我们计算两个类别的后验概率,然后比较概率大小,选取概率较大的类别作为分类结果。
具体地,分类规则可以描述如下:
1. 对于每个类别c,计算后验概率P(c|特征)。
2. 如果P(c1|特征) > P(c2|特征),那么样本属于类别c1;否则,样本属于类别c2。
为了进行分类,我们需要预先估计先验概率P(类别) 和似然概率
P(特征|类别)。
这通常通过使用训练数据集来估计这些概率,并使用统计方法(如频率计数或平滑技术)来应对概率值的不确定性。
需要注意的是,贝叶斯分类器的分类规则假设特征之间是独立的,这就是所谓的朴素贝叶斯分类器。
如果实际情况下特征之间存在依赖关系,可以考虑使用其他分类器或改进算法。
Python实现贝叶斯分类器
关于朴素贝叶斯朴素贝叶斯算法是一个直观的方法,使用每个属性归属于某个类的概率来做预测。
你可以使用这种监督性学习方法,对一个预测性建模问题进行概率建模。
给定一个类,朴素贝叶斯假设每个属性归属于此类的概率独立于其余所有属性,从而简化了概率的计算。
这种强假定产生了一个快速、有效的方法。
给定一个属性值,其属于某个类的概率叫做条件概率。
对于一个给定的类值,将每个属性的条件概率相乘,便得到一个数据样本属于某个类的概率。
我们可以通过计算样本归属于每个类的概率,然后选择具有最高概率的类来做预测。
通常,我们使用分类数据来描述朴素贝叶斯,因为这样容易通过比率来描述、计算。
一个符合我们目的、比较有用的算法需要支持数值属性,同时假设每一个数值属性服从正态分布(分布在一个钟形曲线上),这又是一个强假设,但是依然能够给出一个健壮的结果。
预测糖尿病的发生本文使用的测试问题是“皮马印第安人糖尿病问题”。
这个问题包括768个对于皮马印第安患者的医疗观测细节,记录所描述的瞬时测量取自诸如患者的年纪,怀孕和血液检查的次数。
所有患者都是21岁以上(含21岁)的女性,所有属性都是数值型,而且属性的单位各不相同。
每一个记录归属于一个类,这个类指明以测量时间为止,患者是否是在5年之内感染的糖尿病。
如果是,则为1,否则为0。
机器学习文献中已经多次研究了这个标准数据集,好的预测精度为70%-76%。
下面是pima-indians.data.csv文件中的一个样本,了解一下我们将要使用的数据。
注意:下载文件,然后以.csv扩展名保存(如:pima-indians-diabetes.data.csv)。
查看文件中所有属性的描述。
Python1 2 3 4 5 6,148,72,35,0,33.6,0.627,50,1 1,85,66,29,0,26.6,0.351,31,0 8,183,64,0,0,23.3,0.672,32,1 1,89,66,23,94,28.1,0.167,21,0 0,137,40,35,168,43.1,2.288,33,1朴素贝叶斯算法教程教程分为如下几步:1.处理数据:从CSV文件中载入数据,然后划分为训练集和测试集。
基于贝叶斯算法的文本分类算法
基于贝叶斯算法的文本分类算法1、基本定义:分类是把一个事物分到某个类别中。
一个事物具有很多属性,把它的众多属性看作一个向量,即x=(x1,x2,x3,…,xn),用x这个向量来代表这个事物,x的集合记为X,称为属性集。
类别也有很多种,用集合C={c1,c2,…cm}表示。
一般X和C的关系是不确定的,可以将X 和C看作是随机变量,P(C|X)称为C的后验概率,与之相对的,P(C)称为C的先验概率。
根据贝叶斯公式,后验概率P(C|X)=P(X|C)P(C)/P(X),但在比较不同C值的后验概率时,分母P(X)总是常数,忽略掉,后验概率P(C|X)=P(X|C)P(C),先验概率P(C)可以通过计算训练集中属于每一个类的训练样本所占的比例,容易估计,对类条件概率P(X|C)的估计,这里我只说朴素贝叶斯分类器方法,因为朴素贝叶斯假设事物属性之间相互条件独立,P(X|C)=∏P(xi|ci)。
2、文本分类过程例如文档:Good good study Day day up可以用一个文本特征向量来表示,x=(Good, good, study, Day, day , up)。
在文本分类中,假设我们有一个文档d∈X,类别c又称为标签。
我们把一堆打了标签的文档集合作为训练样本,∈X×C。
例如:={Beijing joins the World Trade Organization, China}对于这个只有一句话的文档,我们把它归类到 China,即打上china标签。
朴素贝叶斯分类器是一种有监督学习,常见有两种模型,多项式模型(Multinomial Model)即为词频型和伯努利模型(Bernoulli Model)即文档型。
二者的计算粒度不一样,多项式模型以单词为粒度,伯努利模型以文件为粒度,因此二者的先验概率和类条件概率的计算方法都不同。
计算后验概率时,对于一个文档d,多项式模型中,只有在d中出现过的单词,才会参与后验概率计算,伯努利模型中,没有在d中出现,但是在全局单词表中出现的单词,也会参与计算,不过是作为“反方”参与的。
贝叶斯分类方法范文
贝叶斯分类方法范文贝叶斯分类方法(Bayesian classification)是机器学习中常用的一种分类方法,它基于贝叶斯定理,通过计算后验概率来进行分类。
贝叶斯分类方法不仅可以用于文本分类、垃圾邮件过滤等问题,还可以在许多领域中进行应用,比如图像分类、金融预测等。
本文将详细介绍贝叶斯分类方法的原理、应用和优缺点。
一、贝叶斯分类方法的原理贝叶斯分类方法是基于贝叶斯定理的一种分类方法。
它假设特征之间独立且满足朴素贝叶斯假设(Naive Bayes assumption),即每个特征之间都是相互独立的。
根据贝叶斯定理,可以计算后验概率 P(y,X),其中y 表示类别,X 表示输入的特征。
贝叶斯定理的公式如下:P(y,X)=P(X,y)P(y)/P(X)其中,P(y,X)表示后验概率,P(X,y)表示似然概率,P(y)表示先验概率,P(X)表示边缘概率。
在实际应用中,我们通常只需要比较P(y,X)的大小来进行分类。
计算后验概率的过程可以分为两步:首先计算先验概率P(y),即在不知道特征的情况下,每个类别y出现的概率;然后计算似然概率P(X,y),即在已知类别y的情况下,特征X出现的概率。
计算先验概率的方法很简单,只需统计每个类别y在训练集中的出现频率即可。
而计算似然概率则需要用到特征之间独立的朴素贝叶斯假设,将P(X,y)拆分为各个特征的条件概率的乘积。
具体地,计算似然概率的方法有多种,如多项式模型、伯努利模型和高斯模型等。
其中,多项式模型适用于文本分类问题,伯努利模型适用于二值型特征的分类问题,而高斯模型适用于连续型特征的分类问题。
在实际应用中,我们通常根据特征的类型选择适当的模型。
二、贝叶斯分类方法的应用1.文本分类:贝叶斯分类方法在文本分类中有着广泛的应用,比如垃圾邮件过滤、情感分析和文档分类等。
通过对文本的特征进行提取,并利用贝叶斯分类方法对文本进行分类,可以高效地实现文本分类任务。
2.图像分类:贝叶斯分类方法也可以用于图像分类问题。
使用朴素贝叶斯算法进行文本分类的教程
使用朴素贝叶斯算法进行文本分类的教程文本分类是自然语言处理领域中的一项重要任务,它可以帮助我们对大量的文本进行自动分类和归类。
而朴素贝叶斯算法作为一种简单而有效的文本分类方法,在实际应用中被广泛使用。
本文将为您提供一个使用朴素贝叶斯算法进行文本分类的教程,帮助您理解并掌握该算法的基本原理和实现过程。
首先,让我们对朴素贝叶斯算法有一个基本的理解。
朴素贝叶斯算法基于贝叶斯定理,通过计算给定条件下的概率来进行分类。
在文本分类任务中,我们可以将文本看作是一个由词汇组成的集合,而每个词汇都可以作为分类的特征。
朴素贝叶斯算法假设各个特征之间是相互独立的,即每个特征对分类的贡献是独立的,因此可以将整个文本的分类概率表示为各个特征的概率的乘积。
接下来,让我们来具体了解如何使用朴素贝叶斯算法进行文本分类。
首先,我们需要准备用于训练模型的文本数据集。
这个数据集应包含已标注好的文本样本,每个样本都有对应的分类标签。
例如,我们可以使用一组已标注的电子邮件文本,并给每个邮件标注上垃圾邮件与非垃圾邮件的分类。
然后,我们需要进行数据预处理。
这包括将文本中的词汇转换为特征向量,以便计算各个特征的概率。
常用的方法是使用词袋模型(Bag-of-Words),将文本表示为由不同词汇组成的向量。
我们可以使用机器学习库(例如scikit-learn)提供的特征提取工具来实现这一步骤。
接下来,我们需要计算各个特征的概率。
对于朴素贝叶斯算法,我们需要计算每个特征在每个分类下的条件概率。
具体而言,对于每个词汇,我们需要计算它在每个分类下的出现频率,并除以该分类下所有词汇的总数。
这样就得到了各个特征在各个分类下的条件概率。
在计算完成各个特征的条件概率后,我们可以使用贝叶斯定理来计算给定条件下的分类概率。
对于一个待分类的文本样本,我们可以计算它属于每个分类的概率,并选择概率最大的分类作为最终分类结果。
在实际应用中,我们通常会使用交叉验证的方法来评估模型的性能。
贝叶斯分类器设计原理与实现
贝叶斯分类器设计原理与实现贝叶斯分类器是一种基于贝叶斯定理的机器学习算法,常被用于文本分类、垃圾邮件过滤等任务。
本文将介绍贝叶斯分类器的设计原理和实现。
一、贝叶斯分类器的原理贝叶斯分类器基于贝叶斯定理,该定理描述了在已知一些先验条件下,如何通过新的观测数据来更新我们对于某个事件发生概率的判断。
在分类任务中,我们希望通过已知的特征,预测出一个样本属于某一类别的概率。
在贝叶斯分类器中,我们通过计算后验概率来决定样本的分类。
后验概率是指在已知某个条件下,事件发生的概率。
根据贝叶斯定理,后验概率可以通过先验概率和条件概率来计算。
先验概率是指在没有任何其他信息的情况下,事件发生的概率;条件概率是指在已知其他相关信息的情况下,事件发生的概率。
贝叶斯分类器根据特征的条件独立性假设,将样本的特征表示为一个向量。
通过训练数据,我们可以计算出每个特征在不同类别中的条件概率。
当有一个新的样本需要分类时,我们可以根据贝叶斯定理和特征的条件独立性假设,计算出该样本属于每个类别的后验概率,从而实现分类。
二、贝叶斯分类器的实现贝叶斯分类器的实现主要包括训练和预测两个步骤。
1. 训练过程训练过程中,我们需要从已知的训练数据中学习每个特征在不同类别下的条件概率。
首先,我们需要统计每个类别出现的频率,即先验概率。
然后,对于每个特征,我们需要统计它在每个类别下的频率,并计算出条件概率。
可以使用频率计数或者平滑方法来估计这些概率。
2. 预测过程预测过程中,我们根据已训练好的模型,计算出待分类样本属于每个类别的后验概率,并选择具有最大后验概率的类别作为最终的分类结果。
为了避免概率下溢问题,通常会将概率取对数,并使用对数概率进行计算。
三、贝叶斯分类器的应用贝叶斯分类器在自然语言处理领域有广泛的应用,尤其是文本分类和垃圾邮件过滤。
在文本分类任务中,贝叶斯分类器可以通过学习已有的标记文本,自动将新的文本分类到相应的类别中。
在垃圾邮件过滤任务中,贝叶斯分类器可以通过学习已有的垃圾邮件和正常邮件,自动判断新的邮件是否为垃圾邮件。
Python实现贝叶斯分类器,纯干货
Python实现贝叶斯分类器,纯干货本文的主要目的是引导读者更加深入的学习数据挖掘和分析技术的同时进一步熟悉Python数据分析的基本流程以及对加深对Python编程的掌握。
贝叶斯理论介绍在概率和统计学领域,贝叶斯理论基于对某一事件证据的认识,来预测该时间事件的发生概率。
比如,如果癌症和年龄相关,在考虑年龄影响的条件下,预测癌症的概率的准确率就会高于不考虑年龄的准确率。
贝叶斯理论的表达公式如下所示:A、B为事件,并且P(B)≠0P(A)和P(B)为独立观察事件A、B发生的概率P(A|B),条件概率,即是在B事件发生的情况下,A事件发生的概率P(B|A),条件概率,即是在A事件发生的情况下,B事件发生的概率假设药品测试的灵敏度为99%,准确率为99%。
意思就是如果使用了药品,那么99%的可能性,会测试结果会显阳性;如果没有用药,那有99%的可能性测试结果显阴性。
现在随机抽出一个人,测试结果显阳性,试问用药的可能性有多大。
这个结果与直觉有较大的出入,计算结果表明随机抽出一个人进行用药测试,即使结果呈阳性,没有用药的可能性也要大于用药的可能性。
在机器学习领域,朴素贝叶斯分类器是基于贝叶斯理论并假设各特征相互独立的分类方法。
朴素贝叶斯模型构建分类器的基本方法是:使用特征向量来表示某个,并赋给这些实体代表其类别的标签。
所有的朴素贝叶斯分类器都假设某个特征的值与另一个特征的值是相互独立的。
比如,一种水果,形状为圆形、直径在5cm左右且颜色为红色被分类为苹果。
贝叶斯在进行分类的时候,在判别这种水果为苹果时,只考虑这几种特征独自对分类概率的影响,而不去考虑形、颜色、直径这些特征的相关性。
贝叶斯分类器可以通过监督式学习的方式非常高效的训练。
尽管贝叶斯分类器的假设条件过于简单,甚至与实际不符。
但大多数时候,它都有较好的表现;它有一个较大的优点是,只需要少量的训练数据,就可以建立起分类所需要的所有参数。
从抽象的角度而言,朴素贝叶斯其实就是条件概率模型:给定一个实体,求解这个实体属于某一个类别的概率,这个实体用一个长度为n的向量来表示,向量中的每一个元素都表示一个特征量的值(相互独立)。
- 1、下载文档前请自行甄别文档内容的完整性,平台不提供额外的编辑、内容补充、找答案等附加服务。
- 2、"仅部分预览"的文档,不可在线预览部分如存在完整性等问题,可反馈申请退款(可完整预览的文档不适用该条件!)。
- 3、如文档侵犯您的权益,请联系客服反馈,我们会尽快为您处理(人工客服工作时间:9:00-18:30)。
自己动手写贝叶斯分类器给图书分类背景与目的首先,这是一个机器学习初学者兼非数学科班出身的非典型工程师的自学记录。
所以本文不会特别理论,也不会太深入地讲解公式,但是会非常有目的性,针对一个特别现实的问题,从头开始分享解决方案,包括某些优化方案。
从问题开始我们要解决的问题,是对图书进行二元分类。
分类的依据是图书的tag。
这些tag可能来自专家,或者编辑,或者用户。
例如“外国文学”,“侦探”,“计算机”,“python”都属于tag。
出于我们的小小实验项目的需求,简化问题,我们现在要把图书分为“人文”或者“非人文”两类。
所以,正如上文所说,这是一个对图书进行的二元分类问题。
例如,《计算机科学导论》,它的标签有“计算机”“科学”“经典”“导论”,它属于“非人文”。
《麦田里的守望者》,它的标签有“小说”“文学”“美国”,它属于“人文”。
我们的分类器有能力根据一本书的标签,自动地将其归类为“人文”或者“非人文”。
试试看,蛮有意思的!为了解决这个问题,我们给出若干个前提:任何一本书只可能归类为“人文”或“非人文”中的一类1本书有1个或以上的tag所有书都没有“人文”和“非人文”的tag(什么?你不相信?看看亚马逊京东就知道了)你需要很少的概率知识,比如什么是概率?条件概率又是什么?使用python和numpy我们将使用python作为这个实验项目的编程语言。
numpy是一个python的科学计算库,需要你自行安装。
因为我们的程序涉及一些简单的矩阵运算,用numpy可以大大简化编程工作量。
基本原理贝叶斯分类器的工作原理还是需要了解一定的理论知识的,别担心,这部分很快就过去。
我会直接结合要解决的问题来讲解。
基本上,用贝叶斯分类是要解决一个这样的问题:已知一本书有这些tag:tag1,tag2,tag3......它属于“人文”分类的概率是多少?属于“非人文”分类的概率呢?假设p1表示在这种情况下,它属于“人文”的概率,p2表示这种情况下,它属于“非人文”的概率。
如果p1>p2,那么这本书就属于“人文”,反过来就是“非人文”。
我们不考虑p1=p2的情况。
很简单,不是么?所以,问题就变成了,如何通过tag1,tag2,tag3...来计算p1和p2?毕竟,只要知道了这两个值,我们的最终问题就解决了。
条件概率其实,这是一个条件概率的问题。
所谓条件概率,就是求:在已知b发生的情况下,a发生的概率。
我们写做:p(a|b)。
结合我们的实际问题,那就是在tag1,tag2,tag3...已经发生的情况下(也就是这本书的tag就是tag1,tag2,tag3...),这本书属于“人文”和“非人文”的概率。
我们写做:p(cate1|tag1,tag2,tag3...) 意思是在tag1,tag2,tag3...发生的情况下,这本书属于cate1的概率(cate1=“人文”)p(cate2|tag1,tag2,tag3...) 意思是在tag1,tag2,tag3...发生的情况下,这本书属于cate2的概率(cate2=“非人文”)这里的p(cate1|tag1,tag2,tag3...)其实就是上面说的p1,我们这里用更为专业的方法来写。
条件概率怎么求呢?这就是贝叶斯公式:p(a|b) = p(b|a) * p(a) / p(b)这个意思就是:想要求p(a|b),而你又知道p(b|a),p(a)和p(b)的值,那你就可以通过p(b|a)*p(a)/p(b)来求得p(a|b)。
换成我们要解决的实际问题,等于:p(cate1|tag1,tag2,tag3...) = p(tag1,tag2,tag3...|cate1) * p(cate1) / p(tag1,tag2,tag3...)翻译为人话,那就是你想求p(cate1|tag1,tag2,tag3...),而你现在知道:p(tag1,tag2,tag3...|cate1)的值,也就是你知道在一本书已经被分类为“人文”的情况下,tag1,tag2,tag3...一起出现的概率p(cate1),也就是所有被标记为“人文”分类的书,(在训练集中)在所有书(“人文”和“非人文”)中出现的概率p(tag1,tag2,tag3...),也就是tag1,tag2,tag3...(在训练集)所有tag中出现的概率也就是说,我们只要挨个求出上述3项,我们就可以求出p(cate1|tag1,tag2,tag3...)了。
同样,p(cate2|tag1,tag2,tag3...)也可以求出。
这里有个值得注意的技巧,上述3项中,其实第3项不需要我们计算。
因为我们的目的是比较p(cate1|tag1,tag2,tag3...)与p(cate2|tag1,tag2,tag3...)的大小,不是为了得到实际的值,由于上述公式里的分母p(tag1,tag2,tag3...)是一样的,所以,我们只需要比较分子的大小就可以了。
也就是比较:p(tag1,tag2,tag3...|cate1) * p(cate1),与p(tag1,tag2,tag3...|cate2) * p(cate2)的大小这样可以省去我们一些计算。
朴素贝叶斯那么,如何计算p(tag1,tag2,tag3...|cate1)呢?这里要用到朴素贝叶斯的概念,就是说,我们认为,在一本书中的标签里,每个标签都是相互独立的,与对方是否出现没有关系。
也就是说“计算机”和“经典”出现的概率互不相关,不会因为“计算机”出现了就导致“经典”出现的概率高。
既然是相互独立,那么,p(tag1,tag2,tag3...|cate1)就等于:p(tag1|cate1) x p(tag2|cate1) x p(tag3|cate1) x ...p(tag1,tag2,tag3...|cate2)就等于:p(tag1|cate2) x p(tag2|cate2) x p(tag3|cate2) x ...也就是说,我们可以计算每一个tag,分别在“人文”和“非人文”书籍的所有tag中出现的概率,然后将它们乘起来,就得到我们想要的。
举例分析我们现在有一本书《计算机科学导论》,它的标签是“计算机”“科学”“理论”“经典”“导论”,我们想知道在这几个标签出现的情况下,《计算机科学导论》分别属于“人文”和“非人文”的概率。
那么,我们已经有了什么呢?幸运的是,我们目前手头有10本书,已知其中6本是“人文”,4本是“非人文”。
这10本书,经过排重,一共有70个不同的标签,“计算机”,“科学”,“理论”,“导论”也在其中。
基于此,我们可以得出,p(cate1)=6/10=0.6,p(cate2)=1-0.6=0.4。
也就是说“人文”书在所有书中的概率是0.6,“非人文”是0.4。
接下来就是p(tag1,tag2,tag3...|cate1)和p(tag1,tag2,tag3...|cate2)了。
也就是,我们要算出,在“人文”类里的所有书中,“计算机”“科学”“理论”“经典”“导论”这几个tag在“人文”书的所有tag里出现的概率。
同样,我们还要算出,在“非人文”类里的所有书中,上述这几个tag在所有“非人文”书中的所有tag里出现的概率。
计算的方法,就是将每个tag在“人文”和“非人文”中出现的概率,相乘,然后再分别乘以0.6和0.4。
然后比较一下大小就可以了。
也就是比较p(cate1) x p(tag1,tag2,tag3...|cate1)与p(cate2) x p(tag1,tag2,tag3...|cate2)的大小。
开始动手1.准备训练集几乎所有的机器学习都需要训练集。
贝叶斯分类也一样。
事实上,我们上面所说的我们##已知##的数据,就是训练集。
上面例子中举出的那10本书,以及这10本书所有排重后的tag,就是我们的训练集;而0.6和0.4这两个概率,还有p1(tag1,tag2,tag3...|cate1)和p2(tag1,tag2,tag3...|cate2),就是我们基于训练集的数据计算出来的,机器学习管这叫“训练”。
基于我们的问题,我们需要准备100本书,人为地分为“人文”和“非人文”两类,并且收集将这些书的所有tag。
这些书如何获得?你可以爬取亚马逊或者豆瓣上的书籍资源。
2.形成tag集将上述所说的tag,用python里的列表来保存,我们令其为dicts.dicts里的每一个元素是一个tag,例如:dicts = ['科学','理论','c++']这样的形式。
3.计算训练集中“人文”和“非人文”的概率非常简单,如我们的例子所说,假设这训练集中的这100本书,有60本是“人文”,那么p(cate1)=60/100=0.6。
p(cate2)=1-p(cate1)=0.4。
这里我们用变量:pcate1 = 0.6pcate2 = 0.44.计算tag集中每个tag在训练集“人文”书籍中的tag出现的概率首先,我们基于训练集构造一个列表,这个列表里的每一项又是一个列表,这个列表里的每一项,不是1就是0。
1表示这个词典中这个位置的tag是这本书的一个tag。
举例:假设我们的dicts是这样的:['计算机','小说','心理','科学','编程','行为','导论','经典','游记','美国']我们有这样一个列表:tag_vector_cate1[[0,1,0,0,0,0,0,1,1],[0,0,1,0,0,0,0,1,0],..............]这个列表对应的是“人文”类。
每一行代表训练集中“人文”类的一本书。
第一行对应的书是《麦田里的守望者》,它的标签是“小说”,“经典”,“美国”。
第二行对应的书是《可预测的非理性》,它的标签是“心理”,“行为”,“美国”。
注意,我们是用整个tag集dicts来表示一本书的tag。
所以,第一行第1列(我们从0开始计数)的1,表示《每天里的守望者》有一个'小说'的tag(对应dicts里的第1列);第一行第2列的0,表示《麦田里的守望者》这本书没有'心理'这个tag(对应dicts里的第2列)。
同理,我们看到第一行和第二行的第7列都是1,说明《麦田里的守望者》和《可预测的非理性》都有'美国'这个tag。
有了这样的数据,我们就很好计算了。
现在以计算p(tag1|cate1)为例。
对于tag1,我们计算出在训练集里“人文”的所有书中,tag1出现了多少次。