朴素贝叶斯(三)示例:过滤垃圾邮件
转载请注明作者和出处:https://blog.csdn.net/weixin_45814668
微信公众号:qiongjian0427
知乎:https://www.zhihu.com/people/qiongjian0427
Github代码获取:https://github.com/qiongjian/Machine-learning/
Python版本: Python3.x
流程
(1)收集数据:提供文本文件。
(2)准备数据:将文本文件解析成词条向量。
(3)分析数据:检查词条确保解析的正确
(4)训练算法:使用我们之前建立的trainNB0()函数。
(5)测试算法:使用calssifyNB(),并且构建一个新的测试函数来计算文档集的错误率。
(6)使用算法:构建一个完整的程序对一组文档进行分类,将错分的文档输出。
导入
from numpy import *
import random
import math
import os
收集数据:提供文本文件
准备数据:切分文本
先前的词向量是预先给定的,这次将介绍如何从文本文档中构建自己的词列表。
使用split()切分
对于一个文本字符串,可以使用Python的string.split()方法将其切分。
mySent='This book is the best book on Python or M.L. I have ever laid eyes upon.'
mySent.split()
结果:
['This','book','is','the','best','book','on','Python','or',
'M.L.','I','have', 'ever', 'laid','eyes','upon.']
可以切分出所有词,但是标点符号也被当成词的一部分。
使用正则表达式切分
import re
regEx = re.compile('\\W*')
listOfTokens = regEx.split(mySent)
listOfTokens
结果:
['This','book','is','the','best','book','on','Python','or',
'M','L','I', 'have','ever','laid','eyes','upon','']
可以切分出每个单词,不包括标点,但空字符串要去掉。
我们希望所有词的形式都是统一的,所以将字符串转换为小写(.lower())或者大写(.upper())。