【原創(chuàng)】機(jī)器學(xué)習(xí)之PageRank算法應(yīng)用與C#實(shí)現(xiàn)(2)球隊(duì)排名應(yīng)用與C#代碼
本文關(guān)鍵詞:Google搜索引擎的數(shù)學(xué)模型及其應(yīng)用,由筆耕文化傳播整理發(fā)布。
在上一篇文章:機(jī)器學(xué)習(xí)之PageRank算法應(yīng)用與C#實(shí)現(xiàn)(1)算法介紹 中,對PageRank算法的原理和過程進(jìn)行了詳細(xì)的介紹,并通過一個很簡單的例子對過程進(jìn)行了講解。從上一篇文章可以很快的了解PageRank的基礎(chǔ)知識。相比其他一些文獻(xiàn)的介紹,上一篇文章的介紹非常簡潔明了。說明:本文的主要內(nèi)容都是來自“趙國,宋建成.Google搜索引擎的數(shù)學(xué)模型及其應(yīng)用,西南民族大學(xué)學(xué)報(bào)自然科學(xué)版.2010,vol(36),3”這篇學(xué)術(shù)論文。鑒于文獻(xiàn)中本身提供了一個非常簡單容易理解和入門的案例,所以本文就使用文章的案例和思路來說明PageRank的應(yīng)用,文章中的文字也大部分是復(fù)制該篇論文,個人研究是對文章的理解,以及最后一篇的使用C#實(shí)現(xiàn)該算法的過程,可以讓讀者更好的理解如何用程序來解決問題。所以特意對作者表示感謝。如果有認(rèn)為侵權(quán),請及時(shí)聯(lián)系我,將及時(shí)刪除處理。
論文中的案例其實(shí)是來源于1993年全國大學(xué)生數(shù)學(xué)建模競賽的B題—足球隊(duì)排名問題。
本文原文鏈接:【原創(chuàng)】機(jī)器學(xué)習(xí)之PageRank算法應(yīng)用與C#實(shí)現(xiàn)(2)球隊(duì)排名應(yīng)用與C#代碼
1993年的全國大學(xué)生數(shù)學(xué)建模競賽B題就出了這道題目,不過當(dāng)時(shí)PageRank算法還沒有問世,所以現(xiàn)在用PageRank來求解也只能算馬后炮,不過可以借鑒一下思路,順便可以加深對算法的理解,并可以觀察算法實(shí)際的效果怎么樣。順便說一下,全國大學(xué)生數(shù)學(xué)建模競賽的確非常有用,我在大學(xué)期間,連續(xù)參加過2004和2005年的比賽,雖然只拿了一個省二等獎,但是這個過程對我的影響非常大。包括我現(xiàn)在的編程,解決問題的思路都是從建模培訓(xùn)開始的。希望在校大學(xué)生珍惜這些機(jī)會,如果能入選校隊(duì),參加集訓(xùn),努力學(xué)習(xí),對以后的學(xué)習(xí),工作都非常有幫助。下面看看這個題目的具體問題:
具體數(shù)據(jù)由于篇幅較大,已經(jīng)上傳為圖片,需要看的,點(diǎn)擊鏈接:數(shù)據(jù)鏈接
2.利用PageRank算法的思路 2.1 問題分析足球隊(duì)排名次問題要求我們建立一個客觀的評估方法,只依據(jù)過去一段時(shí)間(幾個賽季或幾年)內(nèi)每個球隊(duì)的戰(zhàn)績給出各個球隊(duì)的名次,具有很強(qiáng)的實(shí)際背景.通過分析題中12支足球隊(duì)在聯(lián)賽中的成績,不難發(fā)現(xiàn)表中的數(shù)據(jù)殘缺不全,隊(duì)與隊(duì)之間的比賽場數(shù)相差很大,直接根據(jù)比賽成績來排名次比較困難。
下面我們利用PageRank算法的隨機(jī)沖浪模型來求解.類比PageRank算法,我們可以綜合考慮各隊(duì)的比賽成績?yōu)槊恐蜿?duì)計(jì)算相應(yīng)的等級分(Rank),然后根據(jù)各隊(duì)的等級分高低來確定名次,直觀上看,給定球隊(duì)的等級分應(yīng)該由它所戰(zhàn)勝和戰(zhàn)平的球隊(duì)的數(shù)量以及被戰(zhàn)勝或戰(zhàn)平的球隊(duì)的實(shí)力共同決定.具體來說,確定球隊(duì)Z的等級分的依據(jù)應(yīng)為:一是看它戰(zhàn)勝和戰(zhàn)平了多少支球隊(duì);二要看它所戰(zhàn)勝或戰(zhàn)平球隊(duì)的等級分的高低.這兩條就是我們確定排名的基本原理.在實(shí)際中,若出現(xiàn)等級分相同的情況,可以進(jìn)一步根據(jù)凈勝球的多少來確定排名.由于表中包含的數(shù)據(jù)量龐大,我們先在不計(jì)平局,只考慮獲勝局的情形下計(jì)算出各隊(duì)的等級分,以說明算法原理。然后我們綜合考慮獲勝局和平局,加權(quán)后得到各隊(duì)的等級分,并據(jù)此進(jìn)行排名?紤]到競技比賽的結(jié)果的不確定性,我們最后建立了等級分的隨機(jī)沖浪模型,分析表明等級分排名結(jié)果具有良好的參數(shù)穩(wěn)定性。
2.2 獲取轉(zhuǎn)移概率矩陣首先利用有向賦權(quán)圖的權(quán)重矩陣來表達(dá)出各隊(duì)之間的勝負(fù)關(guān)系.用圖的頂點(diǎn)表示相應(yīng)球隊(duì),用連接兩個頂點(diǎn)的有向邊表示兩隊(duì)的比賽結(jié)果。同時(shí)給邊賦權(quán)重,表明占勝的次數(shù)。所以,可以得到數(shù)據(jù)表中給出的12支球隊(duì)所對應(yīng)的權(quán)重矩陣,這是計(jì)算轉(zhuǎn)義概率矩陣的必要步驟,這里直接對論文中的截圖進(jìn)行引用:
上述權(quán)重不夠科學(xué),在論文中,作者提出了加權(quán)等級分,就是考慮平局的影響,對2個矩陣進(jìn)行加權(quán)得到權(quán)重矩陣,從而得到轉(zhuǎn)移概率矩陣。這里由于篇幅比較大,但是思路比較簡單,不再詳細(xì)說明,如果需要詳細(xì)了解,可以看論文。本文還是集中在C#的實(shí)現(xiàn)過程。
2.4 隨機(jī)沖浪模型
下面我們將使用C#實(shí)現(xiàn)論文中的上述過程,注意,2.3和2.2的思想是類似的,只不過是多了一個加權(quán)的過程,對程序來說還是很簡單的。下面還是按照步驟一個一個來,很多人看到問題寫程序很難下手,其實(shí)習(xí)慣就好了,按照算法的步驟來,一個一個實(shí)現(xiàn),總之要先動手,,不要老是想,想來想去沒有結(jié)果,浪費(fèi)時(shí)間。只有實(shí)際行動起來,才能知道實(shí)際的問題,一個一個解決,持之以恒,思路會越來越清晰。
3.1 計(jì)算權(quán)重矩陣權(quán)重矩陣要根據(jù)測試數(shù)據(jù),球隊(duì)和每2個球隊(duì)直接的比分來獲取,所以我們使用一個字典來存儲原始數(shù)據(jù),將每個節(jié)點(diǎn),2個隊(duì)伍的比賽結(jié)果比分都寫成數(shù)組的形式,來根據(jù)勝平負(fù)的場次計(jì)算積分,得到邊的權(quán)重,看代碼吧:
[,] CalcLevelTotalScore(Dictionary
本文關(guān)鍵詞:Google搜索引擎的數(shù)學(xué)模型及其應(yīng)用,由筆耕文化傳播整理發(fā)布。
本文編號:199067
本文鏈接:http://sikaile.net/kejilunwen/yysx/199067.html