打开APP
userphoto
未登录

开通VIP,畅享免费电子书等14项超值服

开通VIP
机器学习实战笔记(Python实现)

 

正文

---------------------------------------------------------------------------------------

本系列文章为《机器学习实战》学习笔记,内容整理自书本,网络以及自己的理解,如有错误欢迎指正。

源码在Python3.5上测试均通过,代码及数据 --> https://github.com/Wellat/MLaction

---------------------------------------------------------------------------------------

1、算法概述

1.1 朴素贝叶斯

朴素贝叶斯是使用概率论来分类的算法。其中朴素各特征条件独立贝叶斯根据贝叶斯定理。

根据贝叶斯定理,对一个分类问题,给定样本特征x,样本属于类别y的概率是:

 -------(1)

在这里,x 是一个特征向量,设 x 维度为 M。因为朴素的假设,即特征条件独立,根据全概率公式展开,上式可以表达为:

这里,只要分别估计出,特征 Χi 在每一类的条件概率就可以了。类别 y 的先验概率可以通过训练集算出,同样通过训练集上的统计,可以得出对应每一类上的,条件独立的特征对应的条件概率向量。 

1.2 算法特点

优点:在数据较少的情况下仍然有效,可以处理多类别问题。

缺点:对于输入数据的准备方式较为敏感。

适用数据类型:标称型数据。

 

2、使用Python进行文本分类

要从文本中获取特征,需要先拆分文本。可以把词条想象为单词,也可以使用非单词词条,如URL、IP地址或者任意其他字符串。然后将每一个文本片段表示为一个词条向量,其中值为1表示词条出现在文档中,0表示词条未出现。

2.1 准备数据:从文本中构建词向量

按 Ctrl+C 复制代码
按 Ctrl+C 复制代码

2.2 训练算法:从词向量计算概率

计算每个类别的条件概率,伪代码:

按 Ctrl+C 复制代码
按 Ctrl+C 复制代码

2.3 测试算法

分类函数:

按 Ctrl+C 复制代码
按 Ctrl+C 复制代码

测试:

按 Ctrl+C 复制代码
按 Ctrl+C 复制代码

3、实例:使用朴素贝叶斯过滤垃圾邮件

一般流程:

3.1 切分文本

将长字符串切分成词表,包括将大写字符转换成小写,并过滤字符长度小于3的字符。

1 def textParse(bigString):#2     '''3     文本切分4     输入文本字符串,输出词表5     '''6     import re7     listOfTokens = re.split(r'\W*', bigString)8     return [tok.lower() for tok in listOfTokens if len(tok) > 2] 9     

3.2 使用朴素贝叶斯进行垃圾邮件分类

 1 def spamTest(): 2     ''' 3     垃圾邮件测试函数 4     ''' 5     docList=[]; classList = []; fullText =[] 6     for i in range(1,26): 7         #读取垃圾邮件 8         wordList = textParse(open('email/spam/%d.txt' % i,'r',encoding= 'utf-8').read()) 9         docList.append(wordList)10         fullText.extend(wordList)11         #设置垃圾邮件类标签为112         classList.append(1)        13         wordList = textParse(open('email/ham/%d.txt' % i,'r',encoding= 'utf-8').read())14         docList.append(wordList)15         fullText.extend(wordList)16         classList.append(0)17     vocabList = createVocabList(docList)#生成次表库18     trainingSet = list(range(50))19     testSet=[]           #20     #随机选10组做测试集21     for i in range(10):22         randIndex = int(random.uniform(0,len(trainingSet)))23         testSet.append(trainingSet[randIndex])24         del(trainingSet[randIndex])  25     trainMat=[]; trainClasses = []26     for docIndex in trainingSet:#生成训练矩阵及标签27         trainMat.append(bagOfWords2VecMN(vocabList, docList[docIndex]))28         trainClasses.append(classList[docIndex])29     p0V,p1V,pSpam = trainNB0(array(trainMat),array(trainClasses))30     errorCount = 031     #测试并计算错误率32     for docIndex in testSet:33         wordVector = bagOfWords2VecMN(vocabList, docList[docIndex])34         if classifyNB(array(wordVector),p0V,p1V,pSpam) != classList[docIndex]:35             errorCount += 136             print("classification error",docList[docIndex])37     print('the error rate is: ',float(errorCount)/len(testSet))38     #return vocabList,fullText

4、实例:使用朴素贝叶斯分类器从个人广告中获取区域倾向

一般流程:

在这个中,我们将分别从美国的两个城市中选取一些人,通过分析这些人发布的征婚广告信息,来比较这两个城市的人们在广告用词上是否不同 。

4.1 实现代码

按 Ctrl+C 复制代码
按 Ctrl+C 复制代码

 

本站仅提供存储服务,所有内容均由用户发布,如发现有害或侵权内容,请点击举报
打开APP,阅读全文并永久保存 查看更多类似文章
猜你喜欢
类似文章
【热】打开小程序,算一算2024你的财运
朴素贝叶斯算法 | 算法基础
[Python图像处理] 三十九.Python图像分类万字详解(贝叶斯图像分类、KNN图像分类、DN...
python机器学习:朴素贝叶斯分类算法
全网疯传20本PDF书籍:内容涵盖AI、数据科学、机器学习等
100天搞定机器学习|Day15 朴素贝叶斯
一文了解机器学习知识点及其算法(附python代码)
更多类似文章 >>
生活服务
热点新闻
分享 收藏 导长图 关注 下载文章
绑定账号成功
后续可登录账号畅享VIP特权!
如果VIP功能使用有故障,
可点击这里联系客服!

联系客服