-
准备数据:从文本中构建词向量
将句子转换为向量
该函数的的第一个变量返回的是词条切分的文档集合,数据来源为斑点犬爱好者留言板;classVec为类别标签的集合,有两类:侮辱性和非侮辱性,由人工标注,用于训练程序可以自动检测侮辱性留言。
创建一个包含在所有在文档中出现的不重复的列表,set函数可以输出一个无重复元素的词表,|用以求两个集合的并集。
输入参数为词汇表或某个文档,输出的是文档向量,向量的每一元素为1或0,分别表示单词在输入文档中是否出现。思路为:创建一个和词汇表等长的向量 ,向量元素都为0;然后遍历文档中的所有单词,若出现词汇表中的单词,则将输入的文档向量中的对应值设为1。
试运行结果如下:Python3对于格式要求很严格,编码规范得牢记!
可以得出,在postingList中第一个和第四个列表所拥有的元素,在整个文档中的位置。
即完成了单词向向量的转换。
-
训练算法:从词向量计算概率
思路:w为词向量,i表示文本类别:侮辱或非侮辱,p(ci)为每类文档占总文档的比例,假设每个词向量相互独立,p(w|ci)=p(w0|ci)p(w1|ci)p(w2|ci)p(w3|ci)...p(wN|ci)
伪代码为:
计算每个类别中的文档数目
对每篇训练文档:
对每个类别:
如果词条出现在文档中→增加该词条的计数值
增加所有词条的计数值
对每个类别:
对每个词条:将该词条的数目除以总词条数目得到条件概率
返回每个类别的条件概率