1.P126代码
为了定义阈值,请修改初始化方法,在classifier中加入一个新的实例变量:

def __init__(self, getfeatures):classifier.__init__(self, getfeatures)self.thresholds = {}

这段代码在做修改时,应直接在类classifier里的定义_ _ init _ _() 中加入最后一句代码,前面的一句代码就不要了。
修改后的_ _ init _ _()为:

class classifier:def __init__(self, getfeatures, filename = None):#count the number of feature or classify groupself.fc = {}#count the number of doc in each classificationself.cc = {}self.getfeatures = getfeatures#classifier.__init__(self, getfeatures)self.thresholds = {}

2.P131
在输入代码验证时,如果输入

>>> reload(docclass)
<module 'docclass' from 'docclass.py'>
>>> docclass.sampletrain(c1)
>>> c1.classify('quick rabbit')

就会提示错误

>>> reload(docclass)
<module 'docclass' from 'docclass.py'>
>>> docclass.sampletrain(c1)
>>> c1.classify('quick rabbit')
Traceback (most recent call last):File "<stdin>", line 1, in <module>File "docclass.py", line 94, in classifyprobs[cat] = self.prob(item, cat)
AttributeError: fisherclassifier instance has no attribute 'prob'

正确做法应该是在重新加载了文件后应该先重新对c1进行重新定义,就不会提示错误了。如下

>>> reload(docclass)
<module 'docclass' from 'docclass.py'>
>>> docclass.sampletrain(c1)
>>> c1.classify('quick rabbit')
Traceback (most recent call last):File "<stdin>", line 1, in <module>File "docclass.py", line 94, in classifyprobs[cat] = self.prob(item, cat)
AttributeError: fisherclassifier instance has no attribute 'prob'
>>> c1 = docclass.fisherclassifier(docclass.getwords)
>>> docclass.sampletrain(c1)
>>> c1.classify('quick rabbit')
'good'
>>> c1.classify('quick money')
'bad'
>>> c1.setminimum('bad', 0.8)
>>> c1.classify('quick money')
'good'
>>> c1.setminimum('good', 0.4)
>>> c1.classify('quick money')
'good'
>>> 

3.P128
本页中进行归一化计算时,文章中的公式为:
cprob = clf/(clf+nclf)
但是在程序中却是

p = clf / (freqsum)

我认为在计算nclf时就已经包括了clf,故不需要再加一次既可以实现归一化,所以应该将文章中的公式改为:
cprob = clf/nclf
当然,加不加clf并不会影响最终结果,只会影响概率的数值,不会影响排行。
4.P129
文中的“包含单词‘casino’的文档是垃圾邮件的概率为0.9”一句有误,经过计算,包含单词‘casino’的文档是垃圾邮件的概率应该为1.0
5.P137
书中代码:

def entryfeatures(entry):splitter = re.compile('\\W*')f = {}#get words in title and sign ittitlewords = [s.lower() for s in splitter.split(entry['title']) if len(s) > 2 and len(s) < 20]for w in titlewords: f['Title: ' + w] = 1#get words in absrtactsummarywords = [s.lower() for s in splitter.split(entry['summary']) if len(s) > 2 and len(s) < 20]#count capitalize wordsuc = 0for i in range(len(summarywords)):w = summarywords[i]f[w] = 1if w.isupper(): uc += 1#words from absrtact as featuresif i < len(summarywords) - 1:twowords = ' '.join(summarywords[i : i + 1])f[twowords] = 1#keep names compile of artile's creater and publicorf['Publisher: ' + entry['publisher']] = 1#UPPERCASE is a virtual word, and it is used to aim at too many capitalize words existif float(uc) / len(summarywords) > 0.3: f['UPPERCASE'] = 1return f

统计大写单词的数量时,用到了前面提取到的summarywords变量,但是,在提取summarywords变量时,

summarywords = [s.lower() for s in splitter.split(entry['summary']) if len(s) > 2 and len(s) < 20]

可以看到,lower()函数已经把summarywords变量中的单词全变成小写的了。所以在统计后面的大写单词也就没有意义了。所以我认为应该改为

summarywords = [s for s in splitter.split(entry['summary']) if len(s) > 2 and len(s) < 20]

请忽略我的渣英语。

《集体智慧编程》第六章相关推荐

  1. 《集体智慧编程》——第一章导读

    为什么80%的码农都做不了架构师?>>>    什么是集体智慧 其含义是指:为了长早新的想法,而将一群人的行为.偏好或思想组合在一起. 完成这项工作的一种最为基础的方法,便是使用调查 ...

  2. 【集体智慧编程】第二章、提供推荐

    一.前言 本章即将告诉大家,如何根据群体偏好来为人们提供推荐.有许多针对于此的应用,如:在线购物中的商品推荐.热门网站的推荐,以及帮助人们寻找音乐和影片的应用.本章将告诉你如何构筑一个系统,用以寻找具 ...

  3. 《集体智慧编程》第九章

    1.P210 函数scaledata()在运行时会报错: AttributeError: 'list' object has no attribute 'data' 这是由于函数scaledata() ...

  4. 《集体智慧编程》第二章(一)

    一.计算用户相似度 1.欧几里得距离 为了方便以后的读者学习,代码(基于python2.6)全部在最后. 这个没什么好说的,在二维空间中就是两点之间线段的长度.多维空间中,例如A(x1,x2,x3,- ...

  5. Python Qt GUI快速编程第六章代码分析

    这是我敲的Python Qt Gui快速编程第六章上的代码,以后可能要用到其中一些,如果忘记了就来这里看看. #coding=utf-8 #d import os import platform im ...

  6. 《集体智慧编程》数学公式

    这篇博客的目的主要是为了记录这些公式,取自原书附录B. 1.欧几里得距离(Euclidean Distance) 用途:计算距离,衡量相似度 公式: 代码实现: def euclidean(p, q) ...

  7. c语言编程作业最大整数问题,C语言编程第六章作业答案.doc

    C语言编程第六章作业答案 1. 输入两个正整数m和n,求其最大公约数和最小公倍数. 辗除法--辗转相除法, 又名欧几里德算法(Euclidean algorithm)乃求两个正整数之最大公因子的算法. ...

  8. 《集体智慧编程》读书笔记2

    最近重读<集体智慧编程>,这本当年出版的介绍推荐系统的书,在当时看来很引领潮流,放眼现在已经成了各互联网公司必备的技术. 这次边阅读边尝试将书中的一些Python语言例子用C#来实现,利于 ...

  9. 《集体智慧编程》读书笔记10

    最近重读<集体智慧编程>,这本当年出版的介绍推荐系统的书,在当时看来很引领潮流,放眼现在已经成了各互联网公司必备的技术. 这次边阅读边尝试将书中的一些Python语言例子用C#来实现,利于 ...

  10. 《集体智慧编程》读书笔记4

    最近重读<集体智慧编程>,这本当年出版的介绍推荐系统的书,在当时看来很引领潮流,放眼现在已经成了各互联网公司必备的技术. 这次边阅读边尝试将书中的一些Python语言例子用C#来实现,利于 ...

最新文章

  1. 玩转VSCode插件之Remote-SSH
  2. JAVA 笔记no.2
  3. “2012年度IT博客大赛”获奖感言--梦想、学习、坚持、自信、淡定
  4. 问题引发由于与GI相关的python脚本中的错误,Gnome终端无法启动
  5. swagger接口文档使用
  6. 【面试题3】二维数组中的查找
  7. python中文叫什么-python中文别名
  8. wsimport指令
  9. c语言省略号电脑键盘怎么打,省略号的快捷键怎么打【图解】
  10. 游戏编程该读哪些书?
  11. 数据分析之实战项目——电商用户行为分析【python】
  12. abb机器人编程手册_002.ABB机器人高级编程--String飞升篇
  13. 垃圾收集器与内存分配策略系列(三)
  14. git 打patch的方法
  15. linux SVN安装及配置图解教程
  16. Linux: pam
  17. 数据库基础-储存过程和触发器
  18. 前端_前端招聘面试题(1)
  19. JavaSE_day14Map集合和Map集合的实现类
  20. 网络游戏私服行业现状和反私服的措施

热门文章

  1. idea中提交mapper.xml到svn后代码变灰色
  2. Tomcat启动问题,启动是Tomcat8,结果却是Tomcat9
  3. JavaScript——易班优课YOOC课群在线测试自动答题解决方案(十一)恢复右键、选择和复制
  4. MAC + Tomcat——部署Web项目时Tomcat启动成功,但部署的Web项目404错误
  5. JAVA Swing——框架(JFrame、JDialog)位置居于父窗口中央的解决方案
  6. CG CTF WEB 起名字真难
  7. Two Merged Sequences
  8. 用cn.hutool工具包进行图片上传下载示例
  9. windows查看java进程详细信息的几种方法
  10. 【学习笔记】springboot的过滤器与拦截器的使用 springboot的事件驱动模型