《集体智慧编程》第六章
1.P126代碼
為了定義閾值,請修改初始化方法,在classifier中加入一個新的實例變量:
這段代碼在做修改時,應直接在類classifier里的定義_ _ init _ _() 中加入最后一句代碼,前面的一句代碼就不要了。
修改后的_ _ init _ _()為:
2.P131
在輸入代碼驗證時,如果輸入
就會提示錯誤
>>> 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)
但是在程序中卻是
我認為在計算nclf時就已經包括了clf,故不需要再加一次既可以實現歸一化,所以應該將文章中的公式改為:
cprob = clf/nclf
當然,加不加clf并不會影響最終結果,只會影響概率的數值,不會影響排行。
4.P129
文中的“包含單詞‘casino’的文檔是垃圾郵件的概率為0.9”一句有誤,經過計算,包含單詞‘casino’的文檔是垃圾郵件的概率應該為1.0
5.P137
書中代碼:
統計大寫單詞的數量時,用到了前面提取到的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]請忽略我的渣英語。
總結
以上是生活随笔為你收集整理的《集体智慧编程》第六章的全部內容,希望文章能夠幫你解決所遇到的問題。
- 上一篇: spark安装测试过程中提示consol
- 下一篇: 《集体智慧编程》第8章