日韩性视频-久久久蜜桃-www中文字幕-在线中文字幕av-亚洲欧美一区二区三区四区-撸久久-香蕉视频一区-久久无码精品丰满人妻-国产高潮av-激情福利社-日韩av网址大全-国产精品久久999-日本五十路在线-性欧美在线-久久99精品波多结衣一区-男女午夜免费视频-黑人极品ⅴideos精品欧美棵-人人妻人人澡人人爽精品欧美一区-日韩一区在线看-欧美a级在线免费观看

歡迎訪問(wèn) 生活随笔!

生活随笔

當(dāng)前位置: 首頁(yè) > 编程资源 > 编程问答 >内容正文

编程问答

贝叶斯算法-情感分类

發(fā)布時(shí)間:2024/3/13 编程问答 35 豆豆
生活随笔 收集整理的這篇文章主要介紹了 贝叶斯算法-情感分类 小編覺得挺不錯(cuò)的,現(xiàn)在分享給大家,幫大家做個(gè)參考.

課程名稱:Artificial Intelligence

人工智能: ?中山大學(xué) ?本科生實(shí)驗(yàn)報(bào)告

實(shí)驗(yàn)題目

??樸素貝葉斯法完成文本信息情感分類訓(xùn)練,要求使用拉普拉斯平滑技巧:
??在給定文本數(shù)據(jù)集完成文本情感分類訓(xùn)練,在測(cè)試集完成測(cè)試,計(jì)算準(zhǔn)確率。(提示:可借助 sklearn 機(jī)器學(xué)習(xí)庫(kù)完成文本特征(tf-idf)提取)
??思考:在前面的文本分類算法中,如果測(cè)試文本中的單詞沒有在訓(xùn)練文本中出現(xiàn)會(huì)造成什么結(jié)果?
??會(huì)影響到后驗(yàn)概率的計(jì)算結(jié)果,使分類產(chǎn)生偏差。解決這一問(wèn)題的方法是采用貝葉斯估計(jì)。具體地,方法為:

實(shí)驗(yàn)內(nèi)容

算法原理

(1)使用read_data()函數(shù)分別讀取train.txt和test.txt文件。
(2)將讀取內(nèi)容的每一行進(jìn)行加工并打包成node類,方便以后提取使用。
(3)對(duì)test.txt文件里的每一行,通過(guò)bayes()函數(shù)找到在訓(xùn)練集條件下的最大可能的情感。
(4)將得到的情感與test.txt文件里的情感對(duì)比,得到正確個(gè)數(shù),并求出正確率。

關(guān)鍵代碼展示(帶注釋)

(1)將每一行文本打包

# 打包每一句話的信息 class node:def __init__(self,word_set,dic,emotion,word):self.word_set = word_set # 詞集self.dic = dic # 詞頻self.emotion = emotion # 情感self.word = word # 內(nèi)容

(2)讀取數(shù)據(jù)

# 讀取數(shù)據(jù) def read_data(file):with open(file,'r') as f:lines = f.readlines()line_num = len(lines) - 1# line_num = 5 # 先讀5行試驗(yàn)data = []for i in range(1,line_num+1):dic = {}word_set = set([])word = lines[i].split()[3:]emotion = (int)(lines[i].split()[1])for w in word:if w in word_set:dic[w] += 1else:word_set.add(w)dic[w] = 1for w in dic:dic[w] = dic[w]/len(word) data.append(node(word_set,dic,emotion,word)) return datatrain_data = read_data('train.txt') test_data = read_data('test.txt') # for i in range(len(test_data)): # print(test_data[i].word_set) # print(test_data[i].dic) # print(test_data[i].emotion) # print()

(3)貝葉斯函數(shù)

# 貝葉斯估計(jì) def bayes(x,train_set):lemd = 1 # 拉普拉斯平滑p = [0]*7for line in train_set:px = 1 # 該句情感下的貝葉斯估計(jì)p_k = [0]*len(x) # x(k):第k個(gè)元素在train中出現(xiàn)的概率p_k_sum = 0 # x(k)之和for k in range(len(x)):if x[k] in line.word_set:p_k[k] = line.dic[x[k]]else:p_k[k] = 0p_k_sum += p_k[k]for k in range(len(x)):px = px * (p_k[k]+lemd)/(p_k_sum+len(x)*lemd) p[line.emotion] += px / len(train_set) # 默認(rèn)每個(gè)句子的概率都是1/nemo = 0for i in range(7):if p[i]>p[emo]:emo = ireturn emo

(4)計(jì)算正確率

# 計(jì)算正確率 correct_num = 0 # 正確個(gè)數(shù) correct_rate = 0 # 正確率 for test in test_data:emo = bayes(test.word,train_data)if emo == test.emotion:correct_num += 1# print("pre",emo)# print("fact",test.emotion)# print(emo==test.emotion) correct_rate = correct_num/len(test_data) print(correct_rate)

實(shí)驗(yàn)結(jié)果及分析
輸入:無(wú)
輸出:

總結(jié)

以上是生活随笔為你收集整理的贝叶斯算法-情感分类的全部?jī)?nèi)容,希望文章能夠幫你解決所遇到的問(wèn)題。

如果覺得生活随笔網(wǎng)站內(nèi)容還不錯(cuò),歡迎將生活随笔推薦給好友。