题目:
1.已知一个文本集合为:
[[‘my’, ‘dog’,‘has’,’false’,’problems’,’help’,’please’],
[‘maybe’,’not’,’take’,’him’,’to’,’dog’,’park’,’stupid’],
[‘my’,’dalmation’,’is’,’so’,’cute’,’I’,’love’,’him’,’my’],
[‘stop’,‘posting’,‘stupid’,‘worthless’,‘garbage’], [‘mr’,‘licks’,‘ate’,‘my’,‘steak’,‘how’,‘to’,‘stop’,‘him’],
[‘quit’,‘buying’,‘worthless’,‘dog’,‘food’,‘stupid’]]
此数据集有6个文本,其对应标签为classVec={0,1,0,1,0,1},标签为1表示此文本带有侮辱性词语,否则标签为0。要求:
(1)得到数据集的所有出现的单词构成的无重复词的词典。即为:
[‘cute’, ‘love’, ‘help’, ‘garbage’, ‘quit’, ‘I’, ‘problems’, ‘is’, ‘park’, ‘stop’, ‘flea’, ‘dalmation’, ‘licks’, ‘food’, ‘not’, ‘him’, ‘buying’, ‘posting’, ‘has’, ‘worthless’, ‘ate’, ‘to’, ‘maybe’, ‘please’, ‘dog’, ‘how’, ‘stupid’, ‘so’, ‘take’, ‘mr’, ‘steak’, ‘my’]
(2)根据词典将原始的6个文本表示成0或1数字构成的词向量形式。例如,第一个文本对应的词向量为:
[0, 0, 1, 0, 0, 0, 1, 0, 0, 0, 1, 0, 0, 0, 0, 0, 0, 0, 1, 0, 0, 0, 0, 1, 1, 0, 0, 0, 0, 0, 0, 1]
(3)利用朴素贝叶斯分类模型。
(4)现有两个文本:[‘love’, ‘my’, ‘dalmation’], [‘stupid’, ‘garbage’],用(3)得到的朴素贝叶斯分类器对其进行分类,即给出其标签为0(非侮辱性文本)或1(侮辱性文本)。
2.在(1)-(4)的基础上,对给出的50个邮件,其中25个垃圾邮件,25个非垃圾邮件进行分类,随机选取20个垃圾邮件和20个非垃圾邮件作为训练集,剩余10个文本为测试集,用训练集文本得到朴素贝叶斯文本分类器的多项式模型或贝努力模型,然后对测试集文本进行测试,得到其accuracy值。
步骤:
代码如下:
# -*- coding: utf-8 -*-
from numpy import* #导入所有库
def loadDataSet(): #载入数据和标签
postingList=[
['my','dog','has','flea','problems','help','please'],
['maybe','not','take','him','dog','part','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,</