直播網(wǎng)站怎么建設(shè)長春網(wǎng)站制作計劃
?作者簡介:CSDN內(nèi)容合伙人、信息安全專業(yè)在校大學(xué)生🏆
🔥系列專欄 :課設(shè)-機器學(xué)習(xí)
📃新人博主 :歡迎點贊收藏關(guān)注,會回訪!
💬舞臺再大,你不上臺,永遠是個觀眾。平臺再好,你不參與,永遠是局外人。能力再大,你不行動,只能看別人成功!沒有人會關(guān)心你付出過多少努力,撐得累不累,摔得痛不痛,他們只會看你最后站在什么位置,然后羨慕或鄙夷。
文章目錄
- 一.工程摘要
- 二、研究背景與意義
- 2.1 研究背景及意義
- 2.2 文本特征提取方法
- 三、模型方法
- 3.1 數(shù)據(jù)集收集
- 3.2 數(shù)據(jù)集處理
- 3.3 **樸素貝葉斯模型**
- 3.4 多項式事件模型
- 3.5 模型建立
- 拉普拉斯平滑
- 拉普拉斯平滑
- 3.6 模型的評估
- 四.實驗結(jié)果分析、對比和討論
- 4.1 實驗結(jié)果對比分析:
- 4.2 本次實驗的不足
- 五.對本門課的感想、意見和建議
- 六.參考文獻
一.工程摘要
摘要: 本次報告實現(xiàn)了新聞分類。從新聞網(wǎng)站上,收集了六類中文文本,分別是政治,體育,法律,經(jīng)濟,科技,美食。對文本采用詞集模型和詞袋模型分別處理,利用機器學(xué)習(xí)模型中的基于Multinomial event model模型的樸素貝葉斯文本分類預(yù)測進行分類,構(gòu)建了一個新聞文本分類器。
二、研究背景與意義
2.1 研究背景及意義
中文文本分類在日漸完善的網(wǎng)絡(luò)信息管理與網(wǎng)絡(luò)平臺建設(shè)方面都發(fā)揮著重要的作用。國內(nèi)的信息發(fā)布和交流平臺主要依靠中文文本進行信息的傳遞,隨著用戶的增多,涌現(xiàn)的文本數(shù)量也快速增長。平臺上服務(wù)于用戶的個性推薦、垃圾信息過濾等功能的實現(xiàn)主要依托于文本分類技術(shù),然而在網(wǎng)絡(luò)信息傳播過程中,總會出現(xiàn)新鮮類別文本的數(shù)量呈爆炸性增長的情況,由于無法在短時間內(nèi)針對新類別文本進行大量樣本標注,會出現(xiàn)文本分類效果不佳的問題,導(dǎo)致與之相關(guān)的功能也受到影響。因此,高實時性要求的場景下快速準確的文本分類能力,對于保障網(wǎng)絡(luò)平臺功能的正常運作具有重要意義?;诖吮尘?本文對基于主動學(xué)習(xí)的中文文本分類問題進行了研究,能夠在保證文本分類器性能的前提下,減少標注樣本的使用。
2.2 文本特征提取方法
經(jīng)過特征提取后保留的文本特征是文本中最重要的特征,但是計算機并不認識,因此需要進一步轉(zhuǎn)化為計算機能識別的向量。特征選擇作為文本分類過程中的關(guān)鍵技術(shù)之一,那么如何選取貢獻程度比較大的特征項集合,大大的降低文本中特征項的維度,進而使文本分類的分類性能得以提升是亟待解決的問題。2005年,Yan 等人提出了正交質(zhì)心特征選擇算法,該算法主要是對正交質(zhì)子空間學(xué)習(xí)算法的目標函數(shù)進行優(yōu)化,在特征維度很低的時候,該算法擁有比較出色的表現(xiàn)。2009年,Lin Ying 等人提出了一種新的特征選擇算法,該算法主要是基于詞權(quán)重的概率模型。2013年,Deng和 Zhong提出了一種新的特征選擇算法,該算法基于TF-IDF特征加權(quán)算法和KL散度,可以更精準的反映文本的類別和內(nèi)容。2019年,Liu等人提出了一種用于不平衡數(shù)據(jù)分類的嵌入式特征選擇方法。
特征加權(quán)同樣作為文本分類過程中的一個重要環(huán)節(jié),它可以進一步計算文本中的每一個特征項對于文本類別的劃分所做的貢獻程度值。選擇合適的加權(quán)算法可以大大提高文本分類最終的分類性能。2007年,Samer等人提出了一種名為Random-Walk特征加權(quán)算法,該特征加權(quán)算法最終的分類結(jié)果也比較出色。2009年,Lin Yin等人提出了一種面向不平衡文本分類的特征加權(quán)算法。2010年,Nigam提出了一種基于嫡的特征加權(quán)算法,該算法主要是基于信息嫡來度量文本中特征項的權(quán)重。2014年,Peng等人提出了一種改進的TF-IDF特征加權(quán)算法,該算法可以同時反映文本特征在正類別文本與負類別文本中的重要性。2018年,張敏提出了一種局部一致性的信息嫡Relief特征加權(quán)算法。
三、模型方法
3.1 數(shù)據(jù)集收集
本次報告采用的數(shù)據(jù)集為新聞網(wǎng)公開的的數(shù)據(jù)集,分為六類,分別為政治,體育,法律,經(jīng)濟,科技,美食。共25655條數(shù)據(jù),其中80%用作訓(xùn)練集,20%用作測試集。
3.2 數(shù)據(jù)集處理
因為訓(xùn)練集和測試集的處理方法是一致的,所以下文只介紹訓(xùn)練集。
1)首先,將txt中的文本的不同標簽下的數(shù)據(jù)提取,放置于一個二維列表中,因為是有監(jiān)督學(xué)習(xí),所以將同種類的文本放置于同一個維度下,實現(xiàn)代碼為load_data_set()和get_data_list()。因為下載的文章有各種標簽,所以要用正則表達式讀取,實現(xiàn)的代碼如下:
圖表 1 數(shù)據(jù)的讀取
2)對其去重,去停用詞。去重為了生成詞匯表。在生成詞匯表時,可用python自帶的set集合來表示,集合中不會有重復(fù)元素。劃分詞語時,有些詞語是沒有實際意思的,對后續(xù)的關(guān)鍵詞提取就會加大工作量,并且可能提取的關(guān)鍵詞是無效的。所以在分詞處理以后,引入停用詞去優(yōu)化分詞的結(jié)果。所以要在詞匯表中刪除停用詞。實現(xiàn)的代碼為create_vocab_list()和load_stop_words()。停用詞表為網(wǎng)上公開的數(shù)據(jù)集,提前保存到txt文件中。實現(xiàn)的代碼如下:
圖表 2 生成詞匯表和去停用詞
3)文本向量化,以詞為單位。分別利用如下的詞集模型和詞袋模型利用上述的詞匯表將文本轉(zhuǎn)換為向量。二者的不同點在于,對于重復(fù)出現(xiàn)的詞在向量中的位置由1表示,還是由出現(xiàn)的次數(shù)表示。
詞集模型
詞袋模型
實現(xiàn)的代碼如下:
圖表 3 SOW和BOW的代碼實現(xiàn)
3.3 樸素貝葉斯模型
貝葉斯公式如下:
由于同一個訓(xùn)練集的p(x)和p(y)相等,則可以轉(zhuǎn)化為如下公式:即類先驗概率和類條件概率的乘積由于模型采用了y=cj,表明使用了標簽信息,最后預(yù)測時,需要對測試樣本屬于每個標簽的概率都要計算一遍。不像生成式一般直接就輸出測試樣本的概率分布。
3.4 多項式事件模型
1)模型概率計算:
假設(shè)每個類別的概率
將文本轉(zhuǎn)換為字符統(tǒng)計,將重復(fù)字符轉(zhuǎn)為N次方形式
聯(lián)合概率
2)最大似然求參:
3)解出閉式解:
MLE 公式
應(yīng)用拉格朗日乘法
4)閉式MLE解:
梯度
MLE解
為了避免在預(yù)測時出現(xiàn)概率為零的情況,應(yīng)用拉普拉斯平滑
3.5 模型建立
程序首先輸入預(yù)先統(tǒng)計好的詞匯表數(shù)和文檔數(shù)目,利用拉普拉斯平滑方法創(chuàng)建一個全為1的數(shù)組。然后繼續(xù)利用拉普拉斯方法初始化所有標簽的概率,即分子為相應(yīng)的標簽數(shù)量+1,分母為訓(xùn)練集總標簽的數(shù)量+標簽的分類數(shù)量(本報告為6)。
for i in range(len(p_class)):
拉普拉斯平滑
p_class[i] = np.log((train_category.count(i) + 1.0) / (len(train_category) + classes_num))
然后循環(huán)整個訓(xùn)練集,按照上述公式,累加相應(yīng)標簽下,相應(yīng)詞中每個元素的分子分母。
for i in range(classes_num):
拉普拉斯平滑
p_words_num.append(np.ones(num_words))
p_words_denom.append(num_words)
分子和分母相除時,要取對數(shù),防止下溢出。
for i in range(classes_num):
p_words.append(np.log(p_words_num[i] / p_words_denom[i]))
即計算每個標簽下的每個詞出現(xiàn)的累加概率,此時的值即為后續(xù)驗證集中某個詞是否為相應(yīng)標簽下的權(quán)重。后續(xù)預(yù)測時,不像生成式一般直接就輸出測試樣本的概率分布,需要對測試樣本屬于每個標簽的概率都要計算一遍。
for class_index in range(classes_num):
log_sum = p_class[class_index]
for i in range(len(bag_of_words_vec)):
if bag_of_words_vec[i] > 0:
log_sum += bag_of_words_vec[i] * p_words[class_index][i]
此時,選擇概率最大的所屬標簽即為可能的標簽。Python中的矩陣模塊自帶函數(shù)numpy.argmax可以得到每一維度下最大值所在的索引,剛好對應(yīng)相應(yīng)字典中的標簽。此時便可在有監(jiān)督學(xué)習(xí)下預(yù)測值是否正確。
3.6 模型的評估
過擬合:一個假設(shè)在訓(xùn)練數(shù)據(jù)上能夠獲得比其他假設(shè)更好的擬合, 但是在測試數(shù)據(jù)集上卻不能很好地擬合數(shù)據(jù),此時認為這個假設(shè)出現(xiàn)了過擬合的現(xiàn)象。(模型過于復(fù)雜)(高方差)
欠擬合:一個假設(shè)在訓(xùn)練數(shù)據(jù)上不能獲得更好的擬合,并且在測試數(shù)據(jù)集上也不能很好地擬合數(shù)據(jù),此時認為這個假設(shè)出現(xiàn)了欠擬合的現(xiàn)象。(模型過于簡單)(高偏差)
初步測試時,將20%的測試集放入測試,得到準確率為93.90%,懷疑是過度擬合,將80%的測試集放入測試,得到準確率為99.16%,模型過于擬合,方差太高,我認為是有幾點可以改進的地方,1、增大數(shù)據(jù)的訓(xùn)練量,2、減少特征維度,減少詞匯表,3、正則化。本次報告從前兩點入手。
起初,詞匯表為23983條詞匯。將詞匯隨機選取18000條,測試是否擬合程度可以下降。結(jié)果為將20%的測試集放入測試,得到準確率為94.93%,將80%的測試集放入測試,得到準確率為98.83%,得出結(jié)論,該程序過擬合,并且當適當縮小詞匯表規(guī)模的情況下,可以增加準確率。所以需要降低特征維度,也就是降低詞匯表中的數(shù)據(jù)集數(shù)量,所以設(shè)計程序以1000的間隔遍歷詞匯表,觀察測試集和訓(xùn)練集的準確率。程序運行的結(jié)果如下圖:
圖表 4 詞匯表在16000-23000的測試結(jié)果
由圖像可知,在21000附近以100位單位繼續(xù)劃分,得到如下結(jié)果:
圖表 5詞匯表在20500-21500的測試結(jié)果
由上圖可知,詞匯表在20900附近,得到的模型較好,擬合度較高。
四.實驗結(jié)果分析、對比和討論
4.1 實驗結(jié)果對比分析:
1)不同數(shù)量詞匯表下的準確率:
一個假設(shè)在訓(xùn)練數(shù)據(jù)上能夠獲得比其他假設(shè)更好的擬合, 但是在測試數(shù)據(jù)集上卻不能很好地擬合數(shù)據(jù),此時認為這個假設(shè)出現(xiàn)了過擬合的現(xiàn)象。(模型過于復(fù)雜)(高方差)。一個假設(shè)在訓(xùn)練數(shù)據(jù)上不能獲得更好的擬合,并且在測試數(shù)據(jù)集上也不能很好地擬合數(shù)據(jù),此時認為這個假設(shè)出現(xiàn)了欠擬合的現(xiàn)象。(模型過于簡單)(高偏差)經(jīng)過對比和遍歷循環(huán),找到了最適合的,最擬合的數(shù)據(jù)集如下圖所示:
圖表 6 詞匯表在20500-21500的測試結(jié)果
2)SOW和BOW模型下的準確率:
經(jīng)過對比SOW和BOW模型下的準確率,發(fā)現(xiàn)BOW下的準確率略高于SOW,SOW是單個文本中單詞出現(xiàn)在字典中,就將其置為1,而不管出現(xiàn)多少次。BOW是單個文本中單詞出現(xiàn)在字典中,就將其向量值加1,出現(xiàn)多少次就加多少次。 所以BOW比SOW更能表現(xiàn)原始數(shù)據(jù)的特點吧,但是都是基于詞之間保持獨立性,沒有關(guān)聯(lián)為前提。這使得其統(tǒng)計方便,但同時也丟失了文本間詞之間關(guān)系的信息。結(jié)果如下圖:
圖表 7 SOW和BOW模型
3)是否去停用詞下的準確率
經(jīng)過對比是否去掉停詞,劃分詞語時,有些詞語是沒有實際意思的,對后續(xù)的關(guān)鍵詞提取就會加大工作量,并且可能提取的關(guān)鍵詞是無效的。所以在分詞處理以后,引入停用詞去優(yōu)化分詞的結(jié)果。所以結(jié)果如下圖:
圖表 8 是否去除停用詞
3)多元伯努利事件模型和多項式事件模型下的準確率
二者的計算粒度不一樣,多項式模型以詞為粒度,伯努利模型以文件為粒度,因此二者的先驗概率和類條件概率的計算方法都不同。計算后驗概率時,對于一個文檔d,多項式模型中,只有在d中出現(xiàn)過的詞,才會參與后驗概率計算,伯努利模型中,沒有在d中出現(xiàn),但是在全局單詞表中出現(xiàn)的單詞,也會參與計算,不過是作為“反方”參與的。所以在詞匯表為23983條詞匯時,結(jié)果如下表:
模型名稱\準確率 | 測試集準確率 | 訓(xùn)練集準確率 |
---|---|---|
多項式事件模型 | 93.90% | 99.16% |
多元伯努利事件模型 | 87.64% | 97.85% |
圖表 9多元伯努利事件模型和多項式事件模型
4.2 本次實驗的不足
1)SOW和BOW都是基于詞之間保持獨立性,沒有考慮句子有關(guān)聯(lián)為前提。這使得其統(tǒng)計方便,但同時也丟失了文本間詞之間關(guān)系的信息??梢圆捎媒?jīng)典的One-hot模型、TF-IDF模型和基于深度學(xué)習(xí)的Word2vec模型。TF-IDF模型與One-hot模型相比,可以計算反詞頻概率值;Word2vec模型能解決One-hot模型和TF-IDF模型的維度災(zāi)難和向量稀疏的缺陷。
2)因為用到了隨機函數(shù),刪掉了部分特征點(并沒有考慮這些特征的權(quán)值),所以模型的參數(shù)最終是在一個合理的空間范圍內(nèi),需要進一步的縮小范圍,然后得到確切得值。
3)樸素貝葉斯分類器。樸素貝葉斯在機器學(xué)習(xí)中非常常見,尤其是在文本分類中對于情感分析、垃圾郵件處理等應(yīng)用比較廣泛。但是對于樸素貝葉斯分類算法,以后還可以考慮對條件概率的計算方法進行改進。
五.對本門課的感想、意見和建議
過本次實驗,我熟悉了python語言的語法,并可以熟練的使用。同時也培養(yǎng)了我的動手能力,“實驗就是為了讓你動手做,去探索一些你未知的或是你尚不是深刻理解的東西。每個步驟我都親自去做,不放棄每次鍛煉的機會。經(jīng)過這一周,讓我的動手能力有了明顯的提高。機器學(xué)習(xí)課程歷時大半個學(xué)期,做實驗時通過自己編寫、運行程序,不僅可以鞏固了以前所學(xué)過的知識,而且學(xué)到了很多在書本上所沒有學(xué)到過的知識。以前對于編程工具的使用還處于一知半解的狀態(tài)上,但是經(jīng)過一段上機的實踐,對于怎么去排錯、查錯,怎么去看每一步的運行結(jié)果。不僅鞏固了書本所學(xué)的知識,還具有一定的靈活性,發(fā)揮了我們的創(chuàng)造才能。
通過這次課程設(shè)計使我懂得了理論與實際相結(jié)合是很重要的,只有理論知識是遠遠不夠的,只有把所學(xué)的理論知識與實踐相結(jié)合起來,從理論中得出結(jié)論,才能真正提高自己的實際動手能力和獨立思考的能力。在設(shè)計的過程中遇到問題,可以說得是困難重重,這畢竟第一次做的,難免會遇到過各種各樣的問題,同時在設(shè)計的過程中發(fā)現(xiàn)了自己的不足之處,對以前所學(xué)過的知識理解得不夠深刻,掌握得不夠牢固。這次課程設(shè)計終于順利完成了,在設(shè)計中遇到了很多編程問題,最后在自己的思考以及和同學(xué)的討論中,終于迎刃而解。
本門課程算是我最喜歡的一門課程了,他有完整的機器學(xué)習(xí)體系,可以讓我們從0到1,合肥工業(yè)大學(xué)的老師和網(wǎng)課吳恩達老師相輔相成,共同助力我們理解機器學(xué)習(xí),coursera網(wǎng)課配套的實驗編程題題引導(dǎo)我一步一步導(dǎo)入數(shù)據(jù),構(gòu)建模型,評估模型,參數(shù)優(yōu)化等,為今天的工程設(shè)計打下了夯實的基礎(chǔ)。
六.參考文獻
- 青盞.樸素貝葉斯模型 多元伯努利事件模型+多項式事件模型 Multi-Variate Bernoulli Event Model and Multinomial Event Model. https://blog.csdn.net/qq_16234613/article/. 2018
- 吳恩達.Machine Learning. https://www.coursera.org/ .2022