数学建模训练 — 红楼梦作者解析
摘要
《紅樓夢》不同章回之間作者的異同,歷來被學術界爭論不休。當新的計算工具出現之后,我們就可以用數學的知識統計分析《紅樓夢》不同章回作者異同的問題。
針對問題一,問題一要求根據主要人物在不同章回出現的頻率不同,確定作者異同。首先選取《紅樓夢》中十二個主要人物的名稱,然后把整本書分為前四十章回、中四十章回、后四十章回,基于MATLAB進行的頻數統計,計算頻率,列出表格,并且使用SPSS畫出不同章回的折線圖。之后進行比對,我們得出前八十回主要人物占總文本的頻率為2.8011%,后40回主要人物占總文本的頻率為2.83095%,二者大致相同,由此可以判斷前八十章和后四十章為一個人所寫。
針對問題二,問題二要求我們通過虛詞在不同章回出現的頻率的異同,判斷作者異同。首先我們確定了18個要研究的虛詞,分別為“而、何、乎、乃、其、且、若、所、為、焉、也、以、因、于、與、則、者、之”,之后同樣把整本書分為前四十回、中四十回、后四十回。利用MATLAB編程進行頻數統計,計算頻率,并且利用SPSS畫出折線圖和餅圖,可以更直觀的觀察并得出結果。前80回虛詞使用頻率約為2.49%,而后40回虛詞使用的頻率約為1.975%,二者差別明顯,故綜合知通過虛詞的出現頻率我們得出的結論為前80回和后40回的作者不是同一人所寫。
針對問題三,要求我們通過詞與詞之間的相關性分析,判斷作者異同。我們利用SPSS進行了兩變量相關性分析和距離分析,得出了相關性表格和近似值矩陣矩陣,建立了判斷作者異同的模型。得出前四十章和中四十章的相關性大于前四十章與后四十章的相關性、中四十章與后四十章的相關性;前四十章和中四十章的歐式距離也小于前四十章與后四十章的歐式距離、中四十章與后四十章的歐式距離,我們得出結論,前八十章和后四十章不為一個人所寫。
針對問題四,要求我們用其他方法分析作者的異同。我們首先運用句長分析的方法,對前四十章回、中四十章回、后四十章回的“。”頻數進行統計,但是太過單一,所以我們又想了SVM方法增加器可行性。SVM又稱為支持向量機,在空間中得到一個超平面,通過計算各數據點到超平面的距離進行數據分類進而可以找出作者的異同,結果是不為一個作者所寫。
關鍵詞:頻率 兩變量相關性分析 距離分析文言虛詞 文本分類 SVM算法
一、問題重述
1.1 引言
? 《紅樓夢》是具有高度思想性和藝術性的偉大作品,代表中國古典小說的最高成就,為中國古代“四大名著”之首。因某些歷史原因,《紅樓夢》在傳播和保留過程中出現了令人遺憾的缺失。關于《紅樓夢》作者的問題,歷史上有較大爭議。前80回是曹雪芹著作,后40回是高鶚續寫是目前比較公認的版本,請你通過建模分析,解決問題這一問題。
1.2 問題的提出
(1)根據前八十章回和后四十主要人物出現頻數的不同,判斷是否為一個作者所寫。
(2)利用120章回中你感興趣詞語的詞頻(比如虛詞或者常用高頻詞的詞頻)的不同,能否證明不同章回之間作者的異同;
(3)利用詞與詞之間的相關性進行分析,能否證明不同章回之間作者的異同;
(4)你是否有其他方法(比如語義分析等)來分析不同章回之間作者的異同?
二、問題分析
2.1 問題一
要求我們依據紅樓夢中主要人物出現的頻率來判斷作者在前80回和后40回是否異同,首先我們把紅樓夢120回平均分為三部份,基于matlab編程,解出第一個問題。我們首先用matlab計算出每個主要人物的名字在前四十回、中四十回和后四十回中出現的頻數。然后根據數學原理,計算出每個主要人物出現的頻率,加以對比,判斷前八十回和后四十回作者的異同。
2.2 問題二
要求我們通過感興趣的詞頻(我們選用虛詞來判斷),判斷作者在前80回和后40回是否異同,首先我們把紅樓夢120回平均分為三部份,基于matlab編程,解出第二個問題。我們首先用matlab計算出每個虛詞在前四十回、中四十回和后四十回中出現的頻數,并且對三部分虛詞總體和各個虛詞進行統計,然后根據數學原理,計算出每個虛詞出現的頻率,加以對比,判斷前八十回和后四十回作者的異同。
2.3 問題三
此問要求我們通過相關性分析,對不同章回作者的異同作出判斷,基于SPSS的相關分析中的兩變量相關分析和距離分析,求出結果。首先對各個虛詞出現的person相關、斯皮爾曼等級相關和肯德爾相關作出分析,然后進行距離分析,使用歐式距離,得出近似值矩陣,然后得出結論。判斷各章回作者的異同。
2.4 問題四
此問要求我們用其它的方法確定作者的異同,我們就想到了句長分析的方法。但是句長分析的方法過于單一,所以我們選擇用SVM方法補充。通過超平面的尋找和數據到超平面的距離判斷作者的異同。
三、問題假設?
1.假設三個部分主要人物頻率的異同可以反映作者的行文風格;主要人物出現的頻率很低可以忽略,對結果無影響;
2.假設三個部分虛詞頻率的異同可以反映作者的行文風格;虛詞出現的頻率很低可以忽略,對結果無影響;
3.假設虛詞數據可靠;
4.表格中用“1”或“前”代表1-40章回,用“2”或“中”代表40-80章回,用“3”或“后”代表80-120章回。
四、符號說明
五、模型的建立與求解
5.1?問題一模型的建立與求解
要求我們依據紅樓夢中主要人物出現的頻率來判斷作者在前80回和后40回是否異同,在用matlab求頻數之前,通過查閱相關資料我們要選取主要人物來分析問題。然后根據主要人物出現的頻率來判斷作者是不是同一人。
5.1.1 主要人物的選取
?? 《紅樓夢人物譜》該書分別依據庚辰本《脂硯齋重評石頭記》和程乙本《紅樓夢》,精確統計出作品中除歷史人物外的全部人物,標出每個人物在作品中首次出現的回數,并根據人物間的血緣,隸屬或其他關系,編制兩套人物表[1]。表中還以注釋的形式,對人物之間復雜微妙的關系和其他眾多疑難問題進行了精辟詳盡的分析說明。在書中我們依次選取寶玉、黛玉、寶釵、賈環、襲人、麝月、鶯兒、李嬤嬤、鳳姐、晴雯、賈母、趙姨娘來進行數據分析。
5.1.2 主要人物選取后的相關計算
我們首先對文檔進行處理,分為三個部分,前四十回為“1”、中四十回為“2”,后四十回為“3”,各個部分對應的文檔字數記作為:
然后使用MATLAB進行編程處理。我們選取了12個主要人物進行分析,記作在前四十回、中四十回和后四十回中各個部分所選取12個主要人物的頻數記作為:
然后計算各部分所選取主要人物的頻數之和記作為:
然后計算各個部分,各個人物所占本部分的頻率記作為:
最后計算出各個部分主要人物的出現占總文本頻率記作為:
5.1.3 模型的計算結果分析
通過MATLAB計算出結果,我們用SPSS得到三個部分中主要人物使用情況和出現頻率的模型結果:
三個部分文本的總字數分別為:273879、328310、279058;
三個部分主要人物出現頻數總和為:4265、4012、3930;
各個部分主要人物的出現總字數為:8597、8087、7900;
計算主要人物出現的頻率為:
從上述表中我們可以看出寶玉出現的頻率最大,通過對比三部分各主要人物的頻率知比較大致相似,前80回出現主要人物占總文本的頻率為2.8011%,后40回主要人物占總文本的頻率為2.83095%,二者大致相同,又有折線圖知各個人物頻率大致也相似,通過對主要人物出現的頻率來解釋,我們得出結論為前80回合后40回是同一個作者所寫。
5.2?問題二的模型建立與求解 ?
??? 要求我們通過感興趣的詞頻(我們選用虛詞來判斷),判斷作者在前80回和后40回是否異同,也是和問題一相似,通過選出虛詞,來判斷各個虛詞在每個部分的頻率,各個虛詞占總樣本的頻率。通過對比來分析作者的異同。
5.2.1 虛詞的選取
能夠區別文學作品的特征主要有 用詞、句式、修辭手法、中心意象、主題等等。但是能用于統計的特征有語音、字、詞、句子、段落,語篇結構等等可以量化考察的信息。因此它反映的不是作者想表現的內容,而是作者行文中不經意間體現出的用詞造句習慣。我們知道古代虛詞有18個,《紅樓夢》內容是文言文的形式,在這里選用虛詞這一文言文中的特殊詞匯判定作者行文風格,虛詞是一類特殊的詞匯,它不在文章中有實義,從而虛詞在文言文中的使用情況僅由作者用詞習慣決定,從而可以通過對虛詞的使用情況分析代表作者的一類行文風格
故我們可以選取這18個虛詞來分析,它們依次是而、何、乎、乃、其、且、若、所、為、焉、也、以、因、于、與、則、者、之。然后統計每部分的字數,再分別統計出各虛詞在每部分中的使用頻數,對三部分中的虛詞使用比率進行比較,分析出作者使用虛詞的總體情況。在分別就每一個虛詞的使用分析確定作者的風格。
5.2.2?相關計算
使用MATLAB進行編程處理。我們選取了18個虛詞進行分析,記作在前四十回、中四十回和后四十回中各個部分所選取18個虛詞的頻數記作為:
然后計算各部分所選取虛詞的頻數之和記作為:
然后計算各個部分,各虛詞所占本部分的頻率記作為:
最后計算出各個部分主要人物的出現占總文本頻率記作為:
5.2.3?模型的計算結果分析
通過MATLAB計算出在三部分虛詞出現的頻數,以下是相應的結果給出三個樣本中虛詞出現頻數的表格,模型結果如下知三部分各個虛詞總數依次為6830、8161、5512。
計算虛詞的使用頻率為 :?
從以上表中我們可以看出虛詞的使用頻率,“也”使用占比例最大第一部分各虛詞分布集中,第二部分除去也外也比較集中,對比一二第三部分較為分散,由餅狀圖也可以看出1、2比較相似,而3和1、2有明顯的區別。從這里看出前80回和后40回作者不是同一個人,另一方面從虛詞的使用頻率來看,前80回虛詞使用頻率約為2.49%,而后40回虛詞使用的頻率約為1.975%,二者差別明顯,故綜合知通過虛詞的出現頻率我們得出的結論為前80回和后40回的作者不是同一人所寫。
5.3?問題三的模型建立與求解
題目要求我們根據詞與詞之間的相關性分析,確定不同章回的作者異同。首先我們把全書分為前、中、后三部分,每個部分40章回,然后運用SPSS進行虛詞之間的相關性分析。
5.3.1 兩變量相關性分析
首先使用相關性分析,對虛詞之間的關系進行相關性分析。我們使用了Person相關系數,用以衡量章回和虛詞出現頻數的線性關系。
(1)Person相關系數:
此系數用于衡量間隔尺度變量間的線性關系。公式如下:
(2)斯皮爾曼等級相關系數:
由于person相關系數適用于兩變量的度量水平都是間隔尺寸數據,兩變量的總體是正態分布或近似分布,所以改用適用于變量總體的分布不詳的斯皮爾曼等級相關系數:
(3)肯德爾相關系數:
為了得出正確的數據我們采取了多個相關系數進行分析,肯德爾相關系數基于數據的秩,利用變量的秩計算相關性:
計算過相關系數后,就要開始相關系數的顯著性檢驗。樣本相關系數是從總體樣本中抽取隨即樣本觀測值計算出來的,是近似值,為了確定樣本相關系數不是偶然結果,我們還需要做顯著性檢驗。
(4)person相關系數假設檢驗:
在假設總體相關系數為0的情況下,與樣本有關的統計量服從自由度為(n-2)的T?分布:
(5)斯皮爾曼等級相關系數假設檢驗:
在原假設相關系數為0的小樣本的條件下,采用斯皮爾曼相關系數,進行大樣本分析時,要使用正態檢驗統計量Z:
(6)肯德爾相關系數假設檢驗:
在原假設相關系數為0的小樣本的條件下,肯德爾服從肯德爾分布,大樣本數據分析時,采用統計檢驗量:
5.3.2 距離分析
距離分析是對變量之間廣義距離的一種度量,有助于分析復雜的數據集。我們把紅樓夢分為前中后三部分,通過SPSS軟件進行相似性度量和不相似性度量,可以得到變量之間廣義距離的矩陣,并且可以通過歐式距離確定變量的近似值矩陣。
Euclidean(歐式距離):
5.3.3?模型的計算結果分析
根據SPSS的運行結果,我們得到如下表格,可以分析得知詞與詞之間的相關性。我們把全文分為前、中、后三個部分,每部分四十回,由此判斷作者的異同。
由表格可以得出,在由三種相關系數計算得到的的計算結果中,前四十回與中四十回的相關性明顯高于前四十回、中四十回與后四十回的相關性。
由表9可以看出,采用了歐式距離,是一個非相似性矩陣,變量之間的差別是:“前四十回”和“后四十回”、“中四十回”和“后四十回”的歐式距離大于“前四十回”和“中四十回”的歐式距離。可以得出“前四十回”和“后四十回”、“中四十回”和“后四十回”的差別大于“前四十回”和“中四十回”的差別。由以上分析可知可以得出結論,紅樓夢前八十回和后四十回不是一個人寫的。
5.4?問題四模型的建立與求解
5.4.1?句長分析
句長分析是通過MATLAB統計“。”的個數,確定前中后三部分的句子個數,再根據總字數確定每個部分的平均句子長度,分析對比這三部分的平均句子長度,發現三部分的句子長度很相近,并且用句子分析過于單調,所以我們加入了其它分析方法。
5.4.2 SVM介紹
(1)SVM主要思想?
針對線性可分情況進行分析,對于線性不可分的情況,通過使用非線性映射算法將低維輸入空間線性不可分的樣本轉化為高維特征空間使其線性可分,從而使得高維特征空間采用線性算法對樣本的非線性特征進行線性分析成為可能。它基于結構風險最小化理論之上在特征空間中構建最優超平面,使得學習器得到全局最優化,并且在整個樣本空間的期望以某個概率滿足一定上界。
(2)SVM主要特征
??? ⑴ SVM學習問題可以表示為凸優化問題,因此可以利用已知的有效算法發現目標函數的全局最小值。而其他分類方法(如基于規則的分類器和人工神經網絡)都采用一種基于貪心學習的策略來搜索假設空間,這種方法一般只能獲得局部最優解。
??⑵ SVM通過最大化決策邊界的邊緣來控制模型的能力。盡管如此,用戶必須提供其他參數,如使用核函數類型和引入松弛變量等。
??⑶ 通過對數據中每個分類屬性引入一個啞變量,SVM可以應用于分類數據。
??⑷ SVM一般只能用在二類問題,對于多類問題效果不好。
5.4.3 SVM算法
SVM又稱為支持向量機,是常見的一種判別方法。在機器學習領域,是一個有監督的學習模型,通常用來進行模式識別、分類以及回歸分析。其思想是找到數據空間中的一個超平面,使得數據空間中的所有數據到這個超平面的距離最短。通過計算各數據點到超平面的距離進行數據分類進而可以找出作者的異同。
(1)點到超平面的距離公式:
通過各個特征變量組成的數據點,我們可以求出數據點到超平面的距離。特征變量我們選取句子個數、句長和虛詞個數,公式如下:
5.4.4?結果
得出結論,由于前八十章回的數據點和后四十章回的數據點距超平面的距離相差很大,所以前八十章和后四十章不是一個作者寫的。
附錄
問題一 代碼: fid=fopen('filename.txt','r'); if fid==-1 disp('can not open the file'); return; end dict=char('寶玉','黛玉','寶釵','賈環','襲人','麝月','鶯兒','李嬤嬤','鳳姐','晴雯','賈母','趙姨娘'); freq=zeros(size(dict,1),1); while(~feof(fid)) aLine=fgetl(fid); disp(aLine) for i=1:size(dict,1) re=strfind(aLine,deblank(dict(i,:))); freq(i)=freq(i)+length(re); end end for i=1:size(dict,1)disp([dict(i,:),'出現次數:',num2str(freq(i))]) end fclose(fid);問題二 代碼: fid=fopen('filename.txt','r'); if fid==-1 disp('can not open the file'); return; end dict=char('而','何','乎','乃','其','若','所','為','焉','也','以','因','于','與','則','者','之'); freq=zeros(size(dict,1),1); while(~feof(fid)) aLine=fgetl(fid); disp(aLine) for i=1:size(dict,1) re=strfind(aLine,deblank(dict(i,:))); freq(i)=freq(i)+length(re); end end for i=1:size(dict,1)disp([dict(i,:),'出現次數:',num2str(freq(i))]) end fclose(fid);總結
以上是生活随笔為你收集整理的数学建模训练 — 红楼梦作者解析的全部內容,希望文章能夠幫你解決所遇到的問題。
- 上一篇: 【操作系统】本地ping出现一般故障解决
- 下一篇: 集成产品开发,不让你的产品变现脚踩西瓜皮