示例#1
0
文件: bayesTest.py 项目: ForrestPi/ML
#!/usr/bin/env python
#-*- coding:utf-8 -*-
import bayes
# listOPosts,listClasses = bayes.loadDataSet()
# myVocabList = bayes.createVocabList(listOPosts)
# print myVocabList
# print bayes.setOfWords2Vec(myVocabList,listOPosts[0])
# trainMat = []
# for postinDoc in listOPosts:
#     trainMat.append(bayes.setOfWords2Vec(myVocabList,postinDoc))
# p0V,p1V,pAb = bayes.trainNB0(trainMat,listClasses)
# print pAb
# print sum(p0V)
# 
# bayes.testingNB()


# import re
# regEx=re.compile('\\W*')
# emailText=open('email/ham/6.txt').read()
# listOfTokens=regEx.split(emailText)
# print listOfTokens

#bayes.spamTest()
import feedparser
ny=feedparser.parse('http://newyork.craigslist.org/stp/index.rss')
sf=feedparser.parse('http://sfbay.craigslist.org/stp/index.rss')
vocabList,pSF,pNY=bayes.localWords(ny,sf)
bayes.getTopWords(ny,sf)
示例#2
0
print "\n                第一个过滤器例子: 恶意留言区分"
bayes.testingNB()

#第二个例子 垃圾邮件区分
print "\n                第二个过滤器例子: 垃圾邮件区分"
bayes.spamTest()

#第三个例子 个人广告中录取区域倾向
#书中的RSS不能读取到信息,相关参数:书中的例子RSS len=60,将20个作为测试样本,其余40个作为训练样本,去掉的是频数前30个词。
# 本程序中使用的例子len=20,将5个个作为测试样本,其余15个作为训练样本,去掉频数为个位数是效果最好,这里暂时取3。
print "\n                第三个例子:个人广告RSS中录取区域倾向"
nasa = feedparser.parse(
    'http://www.nasa.gov/rss/dyn/image_of_the_day.rss')  #len=60  NASA 航天新闻
ft = feedparser.parse(
    'http://www.ftchinese.com/rss/news')  #len=20,FT中文网(正式官方新闻)政治 经济 全球新闻
#sf = feedparser.parse('http://sports.yahoo.com/nba/teams/hou/rss.xml')   #len=6
#sf = feedparser.parse('http://rss.yule.sohu.vocabSetcom/rss/yuletoutiao.xml')  #搜狐娱乐(娱乐新闻)有时候len=30 有时却异常
'''
print "第一个的长度是:",len(nasa['entries'])
print "第一个的内容是:",nasa['entries']
print "第二个的长度是:",len(ft['entries'])
print "第二个的内容是:",ft['entries']
print "运行第一次的结果:"

'''
#将两个RSS中的数据用来训练和预测
bayes.localWords(nasa, ft)  #程序中已经完成了所有的操作,包括预测错误率的计算。

print "\n运行第二次的结果:"
bayes.getTopWords(nasa, ft)
示例#3
0
    trainMat.append(bayes.setOfWords2Vec(myVocaBList, postinDoc))

p0v, p1v, pAb = bayes.trainNB0(trainMat, listClasses)
pAb
p0v
p1v
p2v = 1 - p1v

# 测试模型
reload(bayes)
bayes.testingNB()

# 测试模型,看垃圾邮件分类器表现如何
reload(bayes)
bayes.spamTest()

# 测试模型,看详情的如何....
reload(bayes)
import feedparser
ny = feedparser.parse('http://newyork.craigslist.org/stp/index.rss')
sf = feedparser.parse('http://sfbay.craigslist.org/stp/index.rss')
# 这里获取的数据因为每次都不太一致,需要调整
#   1、随机生成训练集的数量
#   2、频率最高词的数量
vocabList, pSF, pNY = bayes.localWords(ny, sf)
vocabList, pSF, pNY = bayes.localWords(sf, ny)

# 看看刚刚的那些词对分类影响比较大
reload(bayes)
bayes.getTopWords(ny, sf)
print "listOPosts[3]出现词汇:", bayes.setOfWords2Vec(myVocabList, listOPosts[3])

#4.5.2 训练算法:从词向量计算概率
#4.5.3 测试算法:根据现实情况修改分类器
listOPosts, listClasses = bayes.loadDataSet()
myVocabList = bayes.createVocabList(listOPosts)
trainMat = []
for postinDoc in listOPosts:
    print "postinDoc:", postinDoc
    trainMat.append(bayes.setOfWords2Vec(myVocabList, postinDoc))
print "trainMat:", trainMat
p0V, p1V, pAb = bayes.trainNB0(trainMat, listClasses)
print "p0V:", p0V
print "p1V:", p1V
print "pAb:", pAb
bayes.testingNB()

#4.6.2 测试算法:使用朴素贝叶斯进行交叉验证
bayes.spamTest()

#4.7.1 收集数据:导入RSS源!出现bug
ny = feedparser.parse('http://newyork.craigslist.org/stp/index.rss')
sf = feedparser.parse('http://sfbay.craigslist.org/stp/index.rss')
print "ny:", ny
print "sf:", sf
vocabList, pSF, pNY = bayes.localWords(ny, sf)
vocabList, pSF, pNY = bayes.localWords(ny, sf)
print "bayes.getTopWords(ny,sf):", bayes.getTopWords(ny, sf)

#4.7.1 分析数据:显示地域相关的用词!出现bug
bayes.getTopWords(ny, sf)