当前位置:首页 > 智能硬件 > 人工智能AI
[导读] 今天介绍机器学习中一种基于概率的常见的分类方法,朴素贝叶斯,之前介绍的KNN, decision tree 等方法是一种 hard decision,因为这些分类器的输出只有0 或者 1,朴素贝

今天介绍机器学习中一种基于概率的常见的分类方法,朴素贝叶斯,之前介绍的KNN, decision tree 等方法是一种 hard decision,因为这些分类器的输出只有0 或者 1,朴素贝叶斯方法输出的是某一类的概率,其取值范围在 0-1 之间,朴素贝叶斯在做文本分类,或者说垃圾邮件识别的时候非常有效。

朴素贝叶斯就是基于我们常用的贝叶斯定理:

假设我们要处理一个二分类问题: c1,c2,给定一个样本,比如说是一封邮件,可以用向量 x 来表示,邮件就是一个文本,而文本是由单词构成的,所以 x 其实包含了这封邮件里出现的单词的信息,我们要求的就是,给定样本 x ,我们需要判断这个样本是属于 c1 还是属于 c2,当然,我们可以用概率表示为:

这个就是我们常见的后验概率。根据贝叶斯定理,我们可以得到:

这就是我们说的朴素贝叶斯,接下来的就是各种统计了。

我们给出一个利用朴素贝叶斯做文本分类的例子:

首先建立一个数据库:
def Load_dataset():
posTIngList=[['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']]
classVec = [0, 1, 0, 1, 0, 1]
return posTIngList, classVec

接下来,我们建立一个字典库,保证每一个单词在这个字典库里都有一个位置索引,一般来说,字典库的大小,就是我们样本的维度大小:
def Create_vocablist(dataset):
vocabSet = set([])
for document in dataset :
vocabSet = vocabSet | set(document)
return list(vocabSet)

我们可以将样本转成向量:一种方法是只统计该单词是否出现,另外一种是可以统计该单词出现的次数。
def Word2Vec(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 the vocabulary" % word)
return returnVec

def BoW_Vec(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 the vocabulary" % word)
return returnVec

接下来,我们建立分类器:这里需要注意的是,由于概率都是 0-1 之间的数,连续的相乘,会让最终结果趋于0,所以我们可以把概率相乘转到对数域的相加:
def Train_NB(trainMat, trainClass) :
Num_doc = len(trainMat)
Num_word = len(trainMat[0])
P_1 = sum(trainClass) / float(Num_doc)
P0_num = np.zeros(Num_word) + 1
P1_num = np.zeros(Num_word) + 1
P0_deno = 2.0
P1_deno = 2.0
for i in range(Num_doc):
if trainClass[i] == 1:
P1_num += trainMat[i]
P1_deno +=sum(trainMat[i])
else:
P0_num += trainMat[i]
P0_deno += sum(trainMat[i])
P1_vec = np.log(P1_num / P1_deno)
P0_vec = np.log(P0_num / P0_deno)

return P_1, P1_vec, P0_vec

def Classify_NB(testVec, P0_vec, P1_vec, P1):
p1 = sum(testVec * P1_vec) + math.log(P1)
p0 = sum(testVec * P0_vec) + math.log(1-P1)
if p1 > p0:
return 1
else:
return 0

def Text_parse(longstring):
import re
regEx = re.compile(r'W*')
Listoftokens = regEx.split(longstring)
return [tok.lower() for tok in Listoftokens if len(tok)>0]
# return Listoftokens

这里给出简单的测试:

test_string = 'This book is the best book on Python or M.L.
I have ever laid eyes upon.'

wordList = Text_parse(test_string)

Mydata, classVec = Load_dataset()

'''
Doc_list = []
Full_list = []
for i in range (len(Mydata)):
Doc_list.append(Mydata[i])
Full_list.extend(Mydata[i])
'''

Vocablist = Create_vocablist(Mydata)

Wordvec = Word2Vec(Vocablist, Mydata[0])

trainMat = []
for doc in Mydata:
trainMat.append(Word2Vec(Vocablist, doc))

P_1, P1_vec, P0_vec = Train_NB(trainMat, classVec)

print Mydata
print classVec
print wordList

本站声明: 本文章由作者或相关机构授权发布,目的在于传递更多信息,并不代表本站赞同其观点,本站亦不保证或承诺内容真实性等。需要转载请联系该专栏作者,如若文章内容侵犯您的权益,请及时联系本站删除( 邮箱:macysun@21ic.com )。
换一批
延伸阅读

研究人员证明新技术能够识别葡萄和葡萄酒中释放的复杂化学特征,从而以比传统方法更快、更经济的方式预测葡萄酒生产中的质量风险。

关键字: 人工智能 机器学习 传感器

2026年8月31日 – 专注于引入新品的全球电子元器件和工业自动化产品授权代理商贸泽电子 (Mouser Electronics) 推出新一期Empowering Innovation Together (EIT) 技...

关键字: 量子计算 人工智能 机器学习

中国北京,2026年8月28日——总部设于新加坡的通用人工智能(AGI)研究公司 Sapient Intelligence 今日宣布推出自主式 AI 研发系统 PRAXIST(Beta 版本)。该系统能够处理复杂的技术问...

关键字: 人工智能 机器学习

物联网(IoT: Internet of Things)的格局正在经历一场根本性的变革。随着人工智能(AI)和机器学习(ML: Machine Learning)从云端向边缘迈进,IoT设备面临着前所未有的挑战:如何在支...

关键字: 物联网 人工智能 机器学习

6G时代将迎来根本性变革,有望塑造首个AI原生无线通信网络。未来随着AI在6G网络中的广泛应用,工程师们也将面临前所未有的挑战。如何对高度动态变化、更智能、通信速度更快且全面超越历代网络的系统架构执行有效验证,是摆在工程...

关键字: 6G AI 机器学习

无安装次数限制、内置优化工具,可简化并加速嵌入式与边缘AI部署

关键字: 编译器 机器学习 嵌入式

防霉淋浴哨兵是一款智能的机器学习设备,可检测淋浴运行时的声音,并立即识别抽油烟机未开启的情况。它会实时向Home Assistant发送警报,提醒用户在湿度上升前启动通风设备。其效果简单却高效:一种低成本、自动化的防霉方...

关键字: 机器学习 树莓派5 Arduino Q

一切始于一个我不断在身边发现的常见问题——无论是亲密的朋友,还是我在健身训练的健身房圈子中。经过数周高强度的锻炼后,很多人都在问同一个问题:“我想要增肌的肌肉为什么没有增长,而那些我本意没想练的肌肉却反而变得酸痛?”

关键字: 可穿戴设备 机器学习 STM32

西门子 AI fabric 整合了 Rapidminer® 产品系列与 Mendix™ 低代码平台,现已统一集成于工业 AI 编排软件 Intelligence Center X 之中。该软件旨在助力企业打破 AI 零散...

关键字: 机器学习 AI

在探索睡眠的奥秘时,尤其是在深夜身体完全处于静止状态时,人们通常更容易察觉到健康状况和呼吸模式的变化,而非亲眼所见。对普通人而言,在漆黑的卧室里通过视觉提示或摄像头来监测睡眠质量并不现实,且会引发严重的隐私问题。然而,忽...

关键字: 机器学习 Edge Impulse 边缘人工智能
关闭