web算法中樸素貝葉斯如何實現(xiàn)文檔分類-創(chuàng)新互聯(lián)

本篇內(nèi)容主要講解“web算法中樸素貝葉斯如何實現(xiàn)文檔分類”,感興趣的朋友不妨來看看。本文介紹的方法操作簡單快捷,實用性強。下面就讓小編來帶大家學習“web算法中樸素貝葉斯如何實現(xiàn)文檔分類”吧!

10年的資源網(wǎng)站建設經(jīng)驗,針對設計、前端、開發(fā)、售后、文案、推廣等六對一服務,響應快,48小時及時工作處理。營銷型網(wǎng)站建設的優(yōu)勢是能夠根據(jù)用戶設備顯示端的尺寸不同,自動調(diào)整資源建站的顯示方式,使網(wǎng)站能夠適用不同顯示終端,在瀏覽器中調(diào)整網(wǎng)站的寬度,無論在任何一種瀏覽器上瀏覽網(wǎng)站,都能展現(xiàn)優(yōu)雅布局與設計,從而大程度地提升瀏覽體驗。創(chuàng)新互聯(lián)公司從事“資源網(wǎng)站設計”,“資源網(wǎng)站推廣”以來,每個客戶項目都認真落實執(zhí)行。

  作業(yè)要求:

  實驗數(shù)據(jù)在bayes_datasets文件夾中。其中,

  ? train為訓練數(shù)據(jù)集,包含hotel和travel兩個中文文本集,文本為txt格式。hotel文本集中全部都是介紹酒店信息的文檔,travel文本集中全部都是介紹景點信息的文檔;

  ? Bayes_datasets/test為測試數(shù)據(jù)集,包含若干hotel類文檔和travel類文檔。

  用樸素貝葉斯算法對上述兩類文檔進行分類。要求輸出測試數(shù)據(jù)集的文檔分類結(jié)果,即每類文檔的數(shù)量。

  (例:hotel:XX,travel:XX)

  貝葉斯公式:

  樸素貝葉斯算法的核心,貝葉斯公式如下:

web算法中樸素貝葉斯如何實現(xiàn)文檔分類

  代碼實現(xiàn):

  第一部分:讀取數(shù)據(jù)

  f_path = os.path.abspath('.')+'/bayes_datasets/train/hotel'

  f1_path = os.path.abspath('.')+'/bayes_datasets/train/travel'

  f2_path = os.path.abspath('.')+'/bayes_datasets/test'

  ls = os.listdir(f_path)

  ls1 = os.listdir(f1_path)

  ls2 = os.listdir(f2_path)

  #去掉網(wǎng)址的正則表達式

  pattern = r"(http[s]?://(?:[a-zA-Z]|[0-9]|[$-_@.&+]|[!*,]|(?:%[0-9a-fA-F][0-9a-fA-F]))+)|([a-zA-Z]+.\w+\.+[a-zA-Z0-9\/_]+)"

  res = []

  for i in ls:

  with open(str(f_path+'\\'+i),encoding='UTF-8') as f:

  lines = f.readlines()

  tmp = ''.join(str(i.replace('\n','')) for i in lines)

  tmp = re.sub(pattern,'',tmp)

  remove_digits = str.maketrans('', '', digits)

  tmp = tmp.translate(remove_digits)

  # print(tmp)

  res.append(tmp)

  print("hotel總計:",len(res))

  for i in ls1:

  with open(str(f1_path + '\\' + i), encoding='UTF-8') as f:

  lines = f.readlines()

  tmp = ''.join(str(i.replace('\n', '')) for i in lines)

  tmp = re.sub(pattern, '', tmp)

  remove_digits = str.maketrans('', '', digits)

  tmp = tmp.translate(remove_digits)

  # print(tmp)

  res.append(tmp)

  print("travel總計:",len(res)-308)

  #print(ls2)

  for i in ls2:

  with open(str(f2_path + '\\' + i), encoding='UTF-8') as f:

  lines = f.readlines()

  tmp = ''.join(str(i.replace('\n', '')) for i in lines)

  tmp = re.sub(pattern, '', tmp)

  remove_digits = str.maketrans('', '', digits)

  tmp = tmp.translate(remove_digits)

  # print(tmp)

  res.append(tmp)

  print("test總計:",len(res)-616)

  print("數(shù)據(jù)總計:",len(res))

  這一部分的任務是將放在各個文件夾下的txt文檔讀入程序,并將數(shù)據(jù)按照需要的形式存放。數(shù)據(jù)分為訓練集和測試集,而訓練集又包括景點和酒店兩類,故數(shù)據(jù)總共分為三類,分三次分別讀取。在訓練集的每一個txt文件中最前端都有一串網(wǎng)址信息,我用正則表達式將其過濾掉,后來發(fā)現(xiàn)此部分并不會影響最終的結(jié)果。之后將三類文檔依次讀取,將讀取的結(jié)果存放入一個結(jié)果list中。list的每一項為一個字符串,存放的是一個txt文件的去除掉要過濾的數(shù)據(jù)之后的全部信息。最終得到travel文件夾下共有308個文檔,hotel文件夾下也有308個文檔,測試集共有22個文檔。

  第二部分:分詞,去除停用詞

  stop_word = {}.fromkeys([',','。','!','這','我','非常','是','、',':',';'])

  print("中文分詞后結(jié)果:")

  corpus = []

  for a in res:

  seg_list = jieba.cut(a.strip(),cut_all=False)#精確模式

  final = ''

  for seg in seg_list:

  if seg not in stop_word:#非停用詞,保留

  final += seg

  seg_list = jieba.cut(final,cut_all=False)

  output = ' '.join(list(seg_list))

  # print(output)

  corpus.append(output)

  # print('len:',len(corpus))

  # print(corpus)#分詞結(jié)果

  這一部分要做的是設置停用詞集,即分詞過程中過濾掉的無效詞匯,將每一個txt文件中的數(shù)據(jù)進行中文分詞。首先stop_word存放了停用詞集,使用第三方庫jieba進行中文分詞,將去除停用詞后的結(jié)果最后放入corpus中。

  第三部分:計算詞頻

  #將文本中的詞語轉(zhuǎn)換為詞頻矩陣

  vectorizer = CountVectorizer()

  #計算各詞語出現(xiàn)的次數(shù)

  X = vectorizer.fit_transform(corpus)

  #獲取詞袋中所有文本關(guān)鍵詞

  word = vectorizer.get_feature_names()

  #查看詞頻結(jié)果

  #print(len(word))

  for w in word:

  print(w,end=" ")

  print(" ")

  #print("詞頻矩陣:")

  X = X.toarray()

  #print("矩陣len:",len(X))

  #np.set_printoptions(threshold=np.inf)

  #print(X)無錫人流多少錢 http://www.bhnnk120.com/

  這一部分的任務是將文本中的詞語轉(zhuǎn)換為詞頻矩陣,并且計算各詞語出現(xiàn)的次數(shù)。詞頻矩陣是將文檔集合轉(zhuǎn)換為矩陣,每個文檔都是一行,每個單詞(標記)是列,相應的(行,列)值是該文檔中每個單詞或標記的出現(xiàn)頻率。

  但我們需要注意的是,本次作業(yè)的詞頻矩陣的大小太大,我曾嘗試輸出整個詞頻矩陣,直接導致了程序卡頓,我也嘗試了輸出矩陣的第一項,也有近20000個元素,所以如果不是必需,可以不輸出詞頻矩陣。

  第四部分:數(shù)據(jù)分析

  # 使用616個txt文件夾內(nèi)容進行預測

  print ("數(shù)據(jù)分析:")

  x_train = X[:616]

  x_test = X[616:]

  #print("x_train:",len(x_train))

  #print("x_test:",len(x_test))

  y_train = []

  # 1表示好評0表示差評

  for i in range(0,616):

  if i < 308:

  y_train.append(1)#1表示旅店

  else:

  y_train.append(0)#0表示景點

  #print(y_train)

  #print(len(y_train))

  y_test= [0,0,0,1,1,1,0,0,1,0,1,0,0,1,0,0,1,1,1,0,1,1]

  # 調(diào)用MultionmialNB分類器

  clf = MultinomialNB().fit(x_train,y_train)

  pre = clf.predict(x_test)

  print("預測結(jié)果:",pre)

  print("真實結(jié)果:",y_test)

  print(classification_report(y_test,pre))

  hotel = 0

  travel = 0

  for i in pre:

  if i == 0:

  travel += 1

  else:

  hotel += 1

  print("Travel:",travel)

  print("Hotel:",hotel)

  這部分的任務是將所有的訓練數(shù)據(jù)根據(jù)其標簽內(nèi)容進行訓練,然后根據(jù)訓練得到的結(jié)果對測試數(shù)據(jù)進行預測分類。x_train代表所有的訓練數(shù)據(jù),共有616組;其對應的標簽為y_train,也有616組,值為1代表酒店,值為0代表景點。x_test代表所有的測試數(shù)據(jù),共有22組;其對應標簽為y_test,亦22組,其值則由我自己事先根據(jù)其值手工寫在程序中。此時需要注意的是測試集文件在程序中的讀取順序可能與文件夾目錄中的順序不一致。最后將測試集數(shù)據(jù)使用訓練集數(shù)據(jù)調(diào)用MultionmialNB分類器得到的模型進行預測,并將預測結(jié)果與真實結(jié)果進行對比。

  得出運行結(jié)果。

到此,相信大家對“web算法中樸素貝葉斯如何實現(xiàn)文檔分類”有了更深的了解,不妨來實際操作一番吧!這里是創(chuàng)新互聯(lián)網(wǎng)站,更多相關(guān)內(nèi)容可以進入相關(guān)頻道進行查詢,關(guān)注我們,繼續(xù)學習!

網(wǎng)頁名稱:web算法中樸素貝葉斯如何實現(xiàn)文檔分類-創(chuàng)新互聯(lián)
轉(zhuǎn)載來源:http://muchs.cn/article30/dsgeso.html

成都網(wǎng)站建設公司_創(chuàng)新互聯(lián),為您提供網(wǎng)站策劃、靜態(tài)網(wǎng)站全網(wǎng)營銷推廣定制網(wǎng)站、ChatGPT、品牌網(wǎng)站制作

廣告

聲明:本網(wǎng)站發(fā)布的內(nèi)容(圖片、視頻和文字)以用戶投稿、用戶轉(zhuǎn)載內(nèi)容為主,如果涉及侵權(quán)請盡快告知,我們將會在第一時間刪除。文章觀點不代表本網(wǎng)站立場,如需處理請聯(lián)系客服。電話:028-86922220;郵箱:631063699@qq.com。內(nèi)容未經(jīng)允許不得轉(zhuǎn)載,或轉(zhuǎn)載時需注明來源: 創(chuàng)新互聯(lián)

手機網(wǎng)站建設