赞
踩
朴素贝叶斯分类是机器学习中常用的一种文本分类算法。它基于贝叶斯定理和特征独立性假设,具有简单、高效和易于理解的特点。它在自然语言处理、垃圾邮件过滤、情感分析等领域具有广泛的应用。
首先,让我们来了解一下贝叶斯定理,它是朴素贝叶斯分类算法的基础。贝叶斯定理描述了在已知一些条件下,另一事件发生的概率。假设有事件A和事件B,贝叶斯定理可以表示为:
其中:
( P(A|B) ) 是在事件B发生的条件下事件A发生的概率;
( P(B|A) ) 是在事件A发生的条件下事件B发生的概率;
( P(A) ) 和 ( P(B) ) 分别是事件A和事件B发生的概率。
朴素贝叶斯分类基于贝叶斯定理和条件独立性假设。贝叶斯定理是基于条件概率的一种统计推断方法,它描述了如何根据已有的观察结果来更新一个事件的概率。而条件独立性假设是指在给定类别的情况下,特征之间是相互独立的。
朴素贝叶斯分类将输入文本表示为一个向量,其中每个维度对应于一个特征值。假设有 N 个特征,分类任务有 K 个类别。对于一个给定的文本样本 X,朴素贝叶斯分类通过计算以下公式来预测它所属的类别:
P(Y = c|X) = P(X|Y = c) * P(Y = c) / P(X)
其中,P(Y = c|X) 表示给定输入文本 X 情况下,它属于类别 c 的概率。P(X|Y = c) 是朴素贝叶斯分类器的核心部分,它表示在类别 c 的情况下,特征向量 X 出现的概率。P(Y = c) 表示类别 c 的先验概率,即在没有任何观察之前,样本属于类别 c 的概率。P(X) 是一个归一化因子,用于确保概率的和等于 1。
朴素贝叶斯分类算法在文本分类、垃圾邮件过滤、情感分析等领域得到广泛应用。以文本分类为例,我们可以利用朴素贝叶斯分类器对新闻文章进行分类,帮助用户快速找到感兴趣的内容;在垃圾邮件过滤方面,朴素贝叶斯分类器可以有效地识别并过滤掉用户收件箱中的垃圾邮件;在情感分析中,朴素贝叶斯分类器可以分析文本中的情感色彩,帮助企业了解用户对其产品或服务的评价。
- import nltk.classify as cf
- import nltk.classify.util as cu
- import jieba
- import snownlp
-
- def setiment(sentences):
- # 文本转换为特征及特征选取
- pos_data = []
- with open('D:\Desktop\垃圾体育文本.txt', 'r+', encoding='utf-8') as pos:
- while True:
- words = pos.readline()
- if words:
- positive = {}
- words = jieba.cut(words) # 数据结巴分词
- for word in words:
- positive[word] = True
- pos_data.append((positive, 'POSITIVE'))
- else:
- break
- neg_data = []
- with open('D:\Desktop\垃圾旅游文本.txt', 'r+', encoding='utf-8') as neg:
- while True:
- words = neg.readline()
- if words:
- negative = {}
- words = jieba.cut(words) # 对数据结巴分词
- for word in words:
- negative[word] = True
- neg_data.append((negative, 'NEGATIVE'))
- else:
- break
- # 划分训练集(80%)与测试集(20%)
- pos_num, neg_num = int(len(pos_data) * 0.8), int(len(neg_data) * 0.8)
- train_data = pos_data[: pos_num] + neg_data[: neg_num] # 抽取80%数据
- test_data = pos_data[pos_num: ] + neg_data[neg_num: ] # 剩余20%数据
- # 构建分类器(朴素贝叶斯)
- model = cf.NaiveBayesClassifier.train(train_data)
- ac = cu.accuracy(model, test_data)
- print('准确率为:' + str(ac))
- tops = model.most_informative_features() # 信息量较大的特征
- print('\n信息量较大的前50个特征为:')
- for top in tops[: 50]:
- print(top[0])
- for sentence in sentences:
- feature = {}
- words = jieba.cut(sentence)
- for word in words:
- feature[word] = True
- pcls = model.prob_classify(feature)
- sent = pcls.max()
- prob = pcls.prob(sent)
- print('\n','‘',sentence,'’', '出现的概率为', sent, '概率为','%.2f%%' % round(prob * 100, 2))
- if __name__ == '__main__':
-
-
- sentences = ['体育','马林', '辽宁队', '辽宁队队长',
- '黄金周', '旅游','游客']
- setiment(sentences)
- import nltk.classify as cf
- import nltk.classify.util as cu
- import jieba
- import snownlp
-
- def setiment(sentences):
- # 文本转换为特征及特征选取
- pos_data = []
- with open('D:\Desktop\spam-邮件.txt', 'r+', encoding='utf-8') as pos:
- while True:
- words = pos.readline()
- if words:
- positive = {}
- words = jieba.cut(words) # 数据结巴分词
- for word in words:
- positive[word] = True
- pos_data.append((positive, 'POSITIVE'))
- else:
- break
- neg_data = []
- with open('D:\Desktop\ham-邮件.txt', 'r+', encoding='utf-8') as neg:
- while True:
- words = neg.readline()
- if words:
- negative = {}
- words = jieba.cut(words) # 对数据结巴分词
- for word in words:
- negative[word] = True
- neg_data.append((negative, 'NEGATIVE'))
- else:
- break
- # 划分训练集(80%)与测试集(20%)
- pos_num, neg_num = int(len(pos_data) * 0.8), int(len(neg_data) * 0.8)
- train_data = pos_data[: pos_num] + neg_data[: neg_num] # 抽取80%数据
- test_data = pos_data[pos_num: ] + neg_data[neg_num: ] # 剩余20%数据
- # 构建分类器(朴素贝叶斯)
- model = cf.NaiveBayesClassifier.train(train_data)
- ac = cu.accuracy(model, test_data)
- print('准确率为:' + str(ac))
- tops = model.most_informative_features() # 信息量较大的特征
- print('\n信息量较大的前50个特征为:')
- for top in tops[: 50]:
- print(top[0])
- for sentence in sentences:
- feature = {}
- words = jieba.cut(sentence)
- for word in words:
- feature[word] = True
- pcls = model.prob_classify(feature)
- sent = pcls.max()
- prob = pcls.prob(sent)
- print('\n','‘',sentence,'’', '出现的概率为', sent, '概率为','%.2f%%' % round(prob * 100, 2))
- if __name__ == '__main__':
-
-
- sentences = ['u','i', 'd', 'a',
- 'y', 'w']
- setiment(sentences)
一直提示文件打开方式不对,访问不了?
encoding要改成自己文本打开后的格式,看看TXT文本右下角的是什么,再去代码中改成相对于的,可以正常输出了。
通过本次实验,了解到朴素贝叶斯分类是一种简单而有效的文本分类算法。它基于贝叶斯定理和特征独立性假设,具有简单、高效和易于理解的特点。通过使用朴素贝叶斯分类器,我们可以有效地对文本进行分类,如垃圾邮件过滤、情感分析等。虽然朴素贝叶斯分类器在处理复杂的模式和依赖性时可能会有局限性,但在许多实际应用中仍然表现出良好的性能。
Copyright © 2003-2013 www.wpsshop.cn 版权所有,并保留所有权利。