机器学习实战Py3.x填坑记—朴素贝叶斯

没办法,虽让Py2.x和Py3.x是两种不同的语言呢,不可避免撸这章的时候还是出现问题。

在“程序清单4-5,文件解析及完整的垃圾邮件测试函数”代码中应将里面的setOfWords2Vec改为bagOfWords2VecMN

错误:

UnicodeDecodeError: 'gbk' codec can't decode byte 0xae in position 199: illegal multibyte sequence

那是因为书上的下面这两行代码有点问题:
wordList = textParse(open('email/spam/%d.txt' % i).read()
wordList = textParse(open('email/ham/%d.txt' % i).read()
需要将上面的代码更为下面这两行:
wordList = textParse(open('email/spam/%d.txt' % i, "rb").read().decode('GBK','ignore') )
wordList = textParse(open('email/ham/%d.txt' % i,  "rb").read().decode('GBK','ignore') )

因为有可能文件中存在类似“�”非法字符。

在运行程序清单中代码时候出现错误:

del(trainingSet[randIndex])
TypeError: 'range' object doesn't support item deletion
将代码del(trainingSet[randIndex])上面第4行代码trainingSet = range(50)改为:
trainingSet = list(range(50))
因为是python3中range不返回数组对象,而是返回range对象  

运行<程序清单4-6 RSS源分类器及高频词去除函数>出现错误。
这些问题前面都已经遇到过了,轻车熟路。

AttributeError: 'dict' object has no attribute 'iteritems'
#将代码中的iteritems更改为items就好了

TypeError: 'range' object doesn't support item deletion
#将此行代码上面的第三行代码中的trainingSet = range(2*minLen)更改为
#trainingSet = list(range(2*minLen))就好了。

运行<程序清单4-7 最具表征性的词汇显示函数>时,如果用书上的
if p0V[i] > -6.0和if p1V[i] > -6.0时候则打印出来的非常长。将-6.0更改为大一些,则好一些,比如-5.4。

出现问题进行搜索参考博客:
[机器学习&数据挖掘]朴素贝叶斯数学原理
TypeError: cannot use a string pattern on a bytes-like object解决方法
处理UnicodeDecodeError: ‘XXX' codec can't decode bytes in position...的问题
python3中报错:TypeError: 'range' object doesn't support item deletion

你可能感兴趣的:(机器学习实战Py3.x填坑记—朴素贝叶斯)