第四章總結起來就是,首先找到資料,利用textparse來切分文字,然後用createvocablist建立乙個不重複的詞的列表,然後使用函式setofwords2vec來把每個文件變為乙個文件向量,每乙個元素都是0或者1(元素若在詞列表**現,那相應的位置為1),這個向量的長度和詞列表的長度是一樣的。然後利用trainnb0函式計算pab(即侮辱性文件在總文件占得比例),p1v(每個侮辱詞出現的個數除以總的侮辱詞的數量,即每個侮辱詞在總的侮辱詞中佔得比例),p0v(每個非侮辱詞出現的個數除以總的非侮辱詞的數量,即每個非侮辱詞在總的非侮辱詞中佔得比例),隨機從訓練集中選擇一些測試集,利用setofwords2vec把測試集轉化為文件向量,然後利用classifynb來計算每個測試集是侮辱性和非侮辱性的大小,判斷出型別,然後和測試集的classlist進行比較,看**的和實際的是否一致,如果不一致則統計錯誤率。def calcmostfreq(vocablist, fulltext):
"""function: 計算出現頻率
args: vocablist:詞彙表
fulltext:全部詞彙
returns: sortedfreq[:30]:出現頻率最高的30個詞
"""import operator
freqdict = {}
for token in vocablist:#遍歷詞彙表中的每個詞,統計它在文字**現的次數
freqdict[token] = fulltext.count(token)#返回token在列表**現的次數
# 此時,可以用下列固定的**進行排序。
#>> > import operator
# >> > sortedfreq = sorted(freqdict.iteritems(), key=operator.itemgetter(1), reverse=true) # freqdict: 字典結構,
#此時返回的降序排列後的元組的列表。即列表每個元素為乙個元組,元組由鍵及其鍵值所組成
sortedfreq = sorted(freqdict.items(), key=operator.itemgetter(1), reverse=true)#鍵值為該字串在文字**現的頻率。reverse = true: 按降序排列
return sortedfreq[:30]
def localwords(feed1, feed0):
"""function: rss源分類器
args: feed1:rss源
feed0:rss源
returns: vocablist:詞彙表
p0v:類別概率向量
p1v:類別概率向量
"""import feedparser
#初始化資料列表
doclist = ; classlist = ; fulltext =
minlen = min(len(feed1['entries']), len(feed0['entries']))
#匯入文字檔案
for i in range(minlen):
#切分文字
wordlist = textparse(feed1['entries'][i]['summary'])#切分每條文本(用前面定義的函式)
#切分後的文字以原始列表形式加入文件列表
#切分後的文字直接合併到詞彙列表,# 每次只擴充套件乙個位置,wordlist以陣列的形式放在裡面,請參考:
fulltext.extend(wordlist)
#標籤列表更新
#切分文字
wordlist = textparse(feed0['entries'][i]['summary'])
#切分後的文字以原始列表形式加入文件列表
#切分後的文字直接合併到詞彙列表
fulltext.extend(wordlist)
#標籤列表更新
#獲得詞彙表
vocablist = createvocablist(doclist)# 給doclist裡面的單詞去重
#獲得30個頻率最高的詞彙
top30words = calcmostfreq(vocablist, fulltext)
#去掉出現次數最高的那些詞
for pairw in top30words:
if pairw[0] in vocablist: vocablist.remove(pairw[0])
trainingset = list(range(2*minlen))#訓練資料集中文件的個數
testset = #測試集為空
#隨機構建測試集,隨機選取二十個樣本作為測試樣本,並從訓練樣本中剔除
for i in range(20):
#隨機得到index
randindex = int(random.uniform(0, len(trainingset)))#隨機生成0到訓練集長度的數並取整(不包含數len(trainingset))
#將該樣本加入測試集中
#同時將該樣本從訓練集中剔除
del(trainingset[randindex])
#初始化訓練集資料列表和標籤列表
trainmat = ; trainclasses =
#遍歷訓練集
for docindex in trainingset:
#詞表轉換到向量,並加入到訓練資料列表中
#相應的標籤也加入訓練標籤列表中
#樸素貝葉斯分類器訓練函式
p0v, p1v, pspam = trainnb0(array(trainmat), array(trainclasses))
#初始化錯誤計數
errorcount = 0
#遍歷測試集進行測試
for docindex in testset:
#測試集詞表轉換到向量
wordvector = setofwords2vec(vocablist, doclist[docindex])
#判斷分類結果與原標籤是否一致
if classfifynb(array(wordvector), p0v, p1v, pspam) != classlist[docindex]:
#如果不一致則錯誤計數加1
errorcount += 1
#並且輸出出錯的文件
print("classification error", doclist[docindex])
#列印輸出資訊
print('the erroe rate is: ', float(errorcount)/len(testset))
#返回詞彙表和兩個類別概率向量
return vocablist, p0v, p1v
個人站長如何選擇廣告聯盟?
現在國內外的廣告聯盟多的是,就算在國內,至少也有100家以上,對於沒有經驗的 新手而言,選擇聯盟是乙個非常頭疼的事情。加入聯盟之前一定要充分調查,以免浪費資源和精力,最後落個白辛苦。基本上,選擇廣告聯盟的可以按照以下幾個原則 1 公司實力,你在做乙個聯盟之前,一定要先看一下這家公司的實力,一些大公司...
緩衝區的個人理解
緩衝區的個人理解 這裡所說的緩衝區指的是為標準輸入與標準輸出設定的緩衝區,為什麼要設定乙個標準輸入緩衝區主要是從效率上來考慮的,如果不設緩衝區會降低cpu 的效率,因為它總是會等待使用者輸入完之後才會去執行某些指令!同樣設定乙個標準輸出緩衝區是為了解決列印的問題!總之這樣做的目的就是為了效率!接下來...
基於arm的廣告機的個人總結
二.設計目標 三.相關技術 四.個人總結 基本功能 1.切換 背景 也同步 拓展功能 3.使用者互動 4.密碼驗證,登入 5.可對資料進行增刪改查 為了更多使用者了解我們的技術和文化,推廣公司產品 1.採用了核心鍊錶對資料進行儲存 2.採用了系統i o對檔案進行開啟,讀取以及寫入 3.採用了字元庫將...