1.第4章:朴素贝叶斯
垃圾邮件分类项目中
def spamTest():
'''
Desc:
对贝叶斯垃圾邮件分类器进行自动化处理。
Args:
none
Returns:
对测试集中的每封邮件进行分类,若邮件分类错误,则错误数加 1,最后返回总的错误百分比。
'''
import random
docList = []
classList = []
fullText = []
for i in range(1,26):
wordList=textParse(open('../Downloads/MachineLearning-master (1)/MachineLearning-master/input/4.NaiveBayes/email/spam/%d.txt' % i).read())
docList.append(wordList)
fullText.extend(wordList)
classList.append(1)
#查出问题在 文档《23.Txt》中,“SciFinance?is ”改成“SciFinance is ”即可
wordList=textParse(open('../Downloads/MachineLearning-master (1)/MachineLearning-master/input/4.NaiveBayes/email/ham/%d.txt' % i).read())
docList.append(wordList)
fullText.extend(wordList)
classList.append(0)
。。。
执行时会出现Parse错误,查出问题在 文档《23.Txt》中,“SciFinance?is ”改成“SciFinance is ”即可。
2.第7章:集成方法(随机森林和Adaboost)
随机森林篇中最开始导入数据时,特征为浮点型数字,标签为字母,书中为区分特征,采用了str.isdigit()来判断,但isdigit()只能判断int类型,float会被判定为str,导致最终测试出错。
这里用正则表达式替换isdgit(),通过测试。
# 导入文件
def loadDataSet(filename):
dataset = []
with open(filename, 'r') as fr:
for line in fr.readlines():
if not line:
continue
lineArr=[]
for feature in line.split(','):
str_f=feature.strip()
value = re.compile(r'^[-+]?\d*\.\d*|[-+]?\.?\d*$')
result = value.match(str_f)
if result:#(书中str_f.isdigit()对于浮点数无法判断)
lineArr.append(float(str_f))
else:
lineArr.append(str_f)
dataset.append(lineArr)
return dataset