1.特征向量 每一个有效词汇在邮件中出现的次数(使用一维列表方法) word 词汇出现的次数 一维列表.count(word) 2.将列表转换为数组形式 array(参数) 创建垃圾邮件,正常邮件训练集 array(列表对象 或 表达式) 3.使用 朴素贝叶斯算法 model = MultinomialNB() 4.进行训练模型 model.fit model.fit(array数组,array数组) 5.对指定 topWords 数据使用函数 map(lambda x:words.count(x),topWords) 6.预测数据 model.predict ,返回值为 0 或 1 result = model.predict(array数组.reshape(1,-1))[0] 7.查看在不同区间的概率 model.predict_proba(array数组.reshape(1,-1)) 8.条件语句,预测的结果便于区分 1 为垃圾邮件,0 为 正常邮件 return "垃圾邮件" if result == 1 else "正常邮件" 程序: # 全部训练集中出现次数最多的前 600 个单词 topWords = getTopWords(600) vectors = [ ] for words in allWords: temp = list(map(lambda x:words.count(x),topWords)) # 获取前600个单词的出现的个数 vectors.append(temp) vectors = array(vectors) # 对训练集中的数据给定一个标签 # 0.txt~99.txt 为垃圾邮件,0 # 100~140 为有效邮件,1 labels = array([1] * 100 + [0] * 41) # 创建模型 model = MultinomialNB() model.fit(vectors,labels) # 训练样本数和标签 def predict(txtFile): words = getWordsFromFile(txtFile) # 获取有效字符 currentVector = array(tuple( lambda x:words.count(x),topWords )) # 查看有效词汇个数 result = model.predict(currentVector.reshape(1,-1))[0] # 查看预测的概率 print(model.predict_proba(currentVector.reshape(1,-1))) return "垃圾邮件" if result == 1 else "正常邮件"
2020-04-11