《集体智慧编程》第六章
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]
请忽略我的渣英语。
《集体智慧编程》第六章相关推荐
- 《集体智慧编程》——第一章导读
为什么80%的码农都做不了架构师?>>> 什么是集体智慧 其含义是指:为了长早新的想法,而将一群人的行为.偏好或思想组合在一起. 完成这项工作的一种最为基础的方法,便是使用调查 ...
- 【集体智慧编程】第二章、提供推荐
一.前言 本章即将告诉大家,如何根据群体偏好来为人们提供推荐.有许多针对于此的应用,如:在线购物中的商品推荐.热门网站的推荐,以及帮助人们寻找音乐和影片的应用.本章将告诉你如何构筑一个系统,用以寻找具 ...
- 《集体智慧编程》第九章
1.P210 函数scaledata()在运行时会报错: AttributeError: 'list' object has no attribute 'data' 这是由于函数scaledata() ...
- 《集体智慧编程》第二章(一)
一.计算用户相似度 1.欧几里得距离 为了方便以后的读者学习,代码(基于python2.6)全部在最后. 这个没什么好说的,在二维空间中就是两点之间线段的长度.多维空间中,例如A(x1,x2,x3,- ...
- Python Qt GUI快速编程第六章代码分析
这是我敲的Python Qt Gui快速编程第六章上的代码,以后可能要用到其中一些,如果忘记了就来这里看看. #coding=utf-8 #d import os import platform im ...
- 《集体智慧编程》数学公式
这篇博客的目的主要是为了记录这些公式,取自原书附录B. 1.欧几里得距离(Euclidean Distance) 用途:计算距离,衡量相似度 公式: 代码实现: def euclidean(p, q) ...
- c语言编程作业最大整数问题,C语言编程第六章作业答案.doc
C语言编程第六章作业答案 1. 输入两个正整数m和n,求其最大公约数和最小公倍数. 辗除法--辗转相除法, 又名欧几里德算法(Euclidean algorithm)乃求两个正整数之最大公因子的算法. ...
- 《集体智慧编程》读书笔记2
最近重读<集体智慧编程>,这本当年出版的介绍推荐系统的书,在当时看来很引领潮流,放眼现在已经成了各互联网公司必备的技术. 这次边阅读边尝试将书中的一些Python语言例子用C#来实现,利于 ...
- 《集体智慧编程》读书笔记10
最近重读<集体智慧编程>,这本当年出版的介绍推荐系统的书,在当时看来很引领潮流,放眼现在已经成了各互联网公司必备的技术. 这次边阅读边尝试将书中的一些Python语言例子用C#来实现,利于 ...
- 《集体智慧编程》读书笔记4
最近重读<集体智慧编程>,这本当年出版的介绍推荐系统的书,在当时看来很引领潮流,放眼现在已经成了各互联网公司必备的技术. 这次边阅读边尝试将书中的一些Python语言例子用C#来实现,利于 ...
最新文章
- 玩转VSCode插件之Remote-SSH
- JAVA 笔记no.2
- “2012年度IT博客大赛”获奖感言--梦想、学习、坚持、自信、淡定
- 问题引发由于与GI相关的python脚本中的错误,Gnome终端无法启动
- swagger接口文档使用
- 【面试题3】二维数组中的查找
- python中文叫什么-python中文别名
- wsimport指令
- c语言省略号电脑键盘怎么打,省略号的快捷键怎么打【图解】
- 游戏编程该读哪些书?
- 数据分析之实战项目——电商用户行为分析【python】
- abb机器人编程手册_002.ABB机器人高级编程--String飞升篇
- 垃圾收集器与内存分配策略系列(三)
- git 打patch的方法
- linux SVN安装及配置图解教程
- Linux: pam
- 数据库基础-储存过程和触发器
- 前端_前端招聘面试题(1)
- JavaSE_day14Map集合和Map集合的实现类
- 网络游戏私服行业现状和反私服的措施
热门文章
- idea中提交mapper.xml到svn后代码变灰色
- Tomcat启动问题,启动是Tomcat8,结果却是Tomcat9
- JavaScript——易班优课YOOC课群在线测试自动答题解决方案(十一)恢复右键、选择和复制
- MAC + Tomcat——部署Web项目时Tomcat启动成功,但部署的Web项目404错误
- JAVA Swing——框架(JFrame、JDialog)位置居于父窗口中央的解决方案
- CG CTF WEB 起名字真难
- Two Merged Sequences
- 用cn.hutool工具包进行图片上传下载示例
- windows查看java进程详细信息的几种方法
- 【学习笔记】springboot的过滤器与拦截器的使用 springboot的事件驱动模型