(云南財(cái)經(jīng)大學(xué) 云南 昆明 650221)
主流的機(jī)器學(xué)習(xí)算法包括支持向量機(jī)、神經(jīng)網(wǎng)絡(luò)、集成學(xué)習(xí)和邏輯回歸。本節(jié)對(duì)這些算法的基本原理進(jìn)行簡(jiǎn)要介紹。
(一)支持向量機(jī)
支持向量機(jī)(SupportVectorMachines,SVM),其早期工作來(lái)自前蘇聯(lián)學(xué)者VladimirN.Vapnik和AlexanderY.Lerner在1963年發(fā)表的研究,是一類(lèi)按監(jiān)督學(xué)習(xí)方式對(duì)數(shù)據(jù)進(jìn)行分類(lèi)的廣義線性分類(lèi)器。其核心思想即,二維數(shù)據(jù)分布在樣本空間上,由一個(gè)超平面對(duì)多維數(shù)據(jù)進(jìn)行分割,這個(gè)平面叫做分類(lèi)的決策邊界,支持向量就是離決策邊界最近的一些點(diǎn),支持向量機(jī)的目的就是最大化支持向量到?jīng)Q策邊界的距離,從而,如果數(shù)據(jù)犯錯(cuò)的話,分類(lèi)器會(huì)盡可能的健壯。
當(dāng)遇到多維或者復(fù)雜數(shù)據(jù)時(shí),就需要引用核函數(shù)將數(shù)據(jù)轉(zhuǎn)換成易于分類(lèi)器理解的形式,其中最流行的一種成為徑向基函數(shù)(radialbasisfunction),利用核函數(shù)講數(shù)據(jù)映射到高維空間,可以將在低維空間中的非線性問(wèn)題轉(zhuǎn)換成高維空間下的線性問(wèn)題來(lái)求解。支持向量機(jī)是一個(gè)二分類(lèi)器,當(dāng)用其解決多分類(lèi)問(wèn)題時(shí),則需要額外的方法對(duì)其進(jìn)行擴(kuò)展。SVM效果取決于優(yōu)化參數(shù)和和函數(shù)中的參數(shù)設(shè)置。
(二)神經(jīng)網(wǎng)絡(luò)
1958年,計(jì)算科學(xué)家Rosenblatt提出了由兩層神經(jīng)元組成的神經(jīng)網(wǎng)絡(luò)。他給它起了一個(gè)名字——“感知器”(Perceptron),也就是單層神經(jīng)網(wǎng)絡(luò),它由一個(gè)輸入層和輸出層組成,每一個(gè)特征屬于代表一個(gè)神經(jīng)單元,輸入層只負(fù)責(zé)傳輸數(shù)據(jù),不做計(jì)算。在輸出層則需要對(duì)前一層的數(shù)據(jù)進(jìn)行計(jì)算,連接輸入層和輸出層的帶有箭頭的線表示一個(gè)權(quán)重,預(yù)測(cè)值則是輸入和權(quán)值之間的線性加權(quán)和疊加了一個(gè)激活函數(shù)g的值,即Z=g(W*a),在單層神經(jīng)網(wǎng)絡(luò)中,g函數(shù)使用sgn函數(shù),也就是取符號(hào)函數(shù)。這個(gè)函數(shù)當(dāng)輸入大于0時(shí),輸出1,否則輸出0。
但是Minsky在1969年出版了一本叫《Perceptron》的書(shū),里面用詳細(xì)的數(shù)學(xué)證明了單層神經(jīng)網(wǎng)絡(luò)的弱點(diǎn),尤其是對(duì)異或這樣的簡(jiǎn)單分類(lèi)任務(wù)都無(wú)法解決[2]。
兩層神經(jīng)網(wǎng)絡(luò),在單層神經(jīng)網(wǎng)絡(luò)基礎(chǔ)上,增加一個(gè)中間層,此時(shí),中間層和輸出層都是計(jì)算層,激活函數(shù)也由sgn變?yōu)閟igmoid。我們將yp作為預(yù)測(cè)值,y為真實(shí)值,將loss=(yp-y)2定義為損失函數(shù),因此我們做的工作就是讓loss值盡可能的小,一般采用梯度下降法,直到梯度接近零,在神經(jīng)網(wǎng)絡(luò)中,由于結(jié)構(gòu)復(fù)雜,每次計(jì)算梯度的代價(jià)很大。因此1986年,Rumelhar和Hinton等人提出了反向傳播(Backpropagation,BP)算法,解決了兩層神經(jīng)網(wǎng)絡(luò)所需要的復(fù)雜計(jì)算量問(wèn)題。也就是經(jīng)典的BP神經(jīng)網(wǎng)絡(luò),反向傳播法利用神經(jīng)網(wǎng)絡(luò)的結(jié)構(gòu),首先計(jì)算輸出層的梯度,然后是第二個(gè)參數(shù)梯度,接著計(jì)算中間層梯度,再然后計(jì)算第一個(gè)參數(shù)的梯度,最后計(jì)算輸入層梯度。盡管使用了BP算法,一次神經(jīng)網(wǎng)絡(luò)的訓(xùn)練仍然耗時(shí)太久,而且困擾訓(xùn)練優(yōu)化的一個(gè)問(wèn)題就是局部最優(yōu)解問(wèn)題,這使得神經(jīng)網(wǎng)絡(luò)的優(yōu)化較為困難。同時(shí),隱藏層的節(jié)點(diǎn)數(shù)需要調(diào)參,這使得使用不太方便。
多層神經(jīng)網(wǎng)絡(luò),隨著計(jì)算機(jī)硬件性能提升(如GPU圖形加速卡),在二層的基礎(chǔ)上,中間層的層次繼續(xù)擴(kuò)張,參數(shù)也隨之增加,通過(guò)研究和實(shí)踐發(fā)現(xiàn),更深的網(wǎng)絡(luò)層次往往比淺層有更好的識(shí)別率,這點(diǎn)在ImageNet大賽上獲得的證實(shí)。因?yàn)橥ㄟ^(guò)每一層,對(duì)前一層的抽象表示更加深入。ReLU函數(shù)(f(x)=max(0,x))在訓(xùn)練多層神經(jīng)網(wǎng)絡(luò)時(shí),更容易收斂,并且預(yù)測(cè)性能更好。
(三)集成學(xué)習(xí)
俗話說(shuō),三個(gè)臭皮匠頂個(gè)諸葛亮,這就是元算法的思路,集成學(xué)習(xí)就是對(duì)其它算法進(jìn)行組合的一種學(xué)習(xí)方式。集成方法主要包括Bagging和Boosting兩種方法。Bagging方法即在原始樣本中,根據(jù)Bootstraping方法,隨機(jī)抽取一部分?jǐn)?shù)據(jù)集作為訓(xùn)練數(shù)據(jù),一共抽取K次,每一次的訓(xùn)練集訓(xùn)練出一個(gè)模型,一共訓(xùn)練出K個(gè)模型,最后再由K個(gè)模型投票得出結(jié)果,如果是對(duì)于回歸問(wèn)題,則計(jì)算K個(gè)模型的均值為最后的結(jié)果[3]。Boosting則是每一輪訓(xùn)練集相同,但是會(huì)賦予訓(xùn)練集一個(gè)權(quán)重,根據(jù)模型的錯(cuò)誤率來(lái)調(diào)整權(quán)值,錯(cuò)誤率越高,權(quán)值越高。其中具有代表性的AdaBoost分類(lèi)器,具有泛化錯(cuò)誤率低,可以應(yīng)用在大部分分類(lèi)器上,無(wú)需調(diào)參。但是對(duì)離群點(diǎn)敏感等特點(diǎn)。
本文數(shù)據(jù)來(lái)自國(guó)內(nèi)某款流行競(jìng)技游戲官網(wǎng)RiotAPI中,通過(guò)玩家ID獲取到前十分鐘的游戲狀態(tài)數(shù)據(jù),玩家水平控制在一定范圍,即代表玩家水平大致相同。本數(shù)據(jù)集收集了共19項(xiàng)狀態(tài)數(shù)據(jù),一共38項(xiàng)(紅藍(lán)兩方玩家)。
數(shù)據(jù)集狀態(tài)屬性包括19項(xiàng),共38個(gè),分別是blueWardsPlacedDestroyed,blueFirstBlood,blueKills,blueDeaths,blueAssists,blueEliteMonsters,blueDragons,blueHeralds,blueTowersDestroyed,blueTotalGold,blueAvgLevel,blueTotalExperience,blueTotalMinionsKilled,blueTotalJungleMinionsKilled,blueGoldDiff,blueExperienceDiff,blueCSPerMin,blueGoldPerMin。以上狀態(tài)特征除blueFirstBlood為分類(lèi)變量,1為是,0為否,其它均為連續(xù)變量。目標(biāo)變量為blueWins,是否取勝。數(shù)據(jù)集一共包括9879個(gè)樣本。
(一)數(shù)據(jù)處理步驟
1.讀取數(shù)據(jù)
使用python中的csv包,讀取樣本數(shù)據(jù)文件‘high_diamond_ranked_10min.csv’,同時(shí)引用numpy包,創(chuàng)建訓(xùn)練數(shù)據(jù)矩陣和標(biāo)簽矩陣,遍歷樣本數(shù)據(jù),將特征一一讀取到訓(xùn)練舉證,同時(shí)讀取每一個(gè)樣本數(shù)據(jù)中的標(biāo)簽,將其添加到標(biāo)簽矩陣。自此,已經(jīng)建立了訓(xùn)練數(shù)據(jù)。接著我們分析該矩陣的數(shù)據(jù)特點(diǎn)。
2.歸一化
由于blueTotalGold,blueAvgLevel,blueTotalExperience,blueTotalMinionsKilled,blueTotalJungleMinionsKilled,blueGoldDiff等幾個(gè)特征數(shù)值偏大,有的甚至是周?chē)档膸浊П?,不同指?biāo)往往具有不同的量綱和量綱單位,這樣的情況會(huì)影響到數(shù)據(jù)分析的結(jié)果,為了消除指標(biāo)之間的量綱影響,需要進(jìn)行數(shù)據(jù)標(biāo)準(zhǔn)化處理。在本文中,采取將數(shù)據(jù)做線性變換,使結(jié)果值映射到[0-1]之間。
經(jīng)過(guò)歸一化處理后,各指標(biāo)處于同一數(shù)量級(jí),便于綜合對(duì)比。同時(shí),求最優(yōu)解的過(guò)程會(huì)變得平緩,更容易正確收斂。即能提高梯度下降求最優(yōu)解時(shí)的速度,提高計(jì)算精度。此過(guò)程使用SK-Learn包中的preprocession函數(shù)完成。自此數(shù)據(jù)處理大致完成,如果還需要調(diào)整的話,可以根據(jù)實(shí)驗(yàn)最后的精度來(lái)做下一步分析。
預(yù)測(cè)模型
本文采用泛化程度較高的AdaBoost分類(lèi)器來(lái)完成預(yù)測(cè)工作。其偽代碼如下:
對(duì)每次迭代:
利用buildStump()函數(shù)找到最佳的單層決策樹(shù)
將最佳單層決策樹(shù)加入到單層決策樹(shù)組
計(jì)算alpha
計(jì)算新的權(quán)重向量D
更新累計(jì)類(lèi)別估計(jì)值
如果錯(cuò)誤率等于0,則退出循環(huán)
使用SK-Learn中的AdaBoost模型,分類(lèi)器選取DecisionTreeClassifier,最后,訓(xùn)練結(jié)果如圖所示:
結(jié)果解釋:可以看到使用AdaBoost模型,參數(shù)取以上值時(shí),通過(guò)交叉驗(yàn)證,最佳參數(shù)為,決策樹(shù)參數(shù)最高3層,其它參數(shù)由于樣本特征,均為默認(rèn)值,基分類(lèi)器提升(循環(huán))次數(shù)n_estimators為1000次,模型提升準(zhǔn)則選擇SAMME。AdaBoost其它參數(shù)均為默認(rèn)值。分類(lèi)器在訓(xùn)練集上的錯(cuò)誤率為26.26%,在測(cè)試集上錯(cuò)誤率為27.46%,可以看出并沒(méi)有過(guò)擬合,模型擬合效果比較合適。整體預(yù)測(cè)準(zhǔn)確率為72.5%。
在機(jī)器學(xué)習(xí)算法中,模型本身所需要的假設(shè)比較少,相應(yīng)地,對(duì)模型進(jìn)行評(píng)價(jià)的工具也不多,通常只能通過(guò)對(duì)模型的預(yù)測(cè)結(jié)果與真實(shí)結(jié)果進(jìn)行比較來(lái)判斷模型的預(yù)測(cè)精度。
在本文中,得分預(yù)測(cè)是屬于分類(lèi)問(wèn)題。對(duì)于分類(lèi)問(wèn)題,預(yù)測(cè)精度的評(píng)價(jià)指標(biāo)主要有查全率和查準(zhǔn)率,AUC值和F值。
混淆矩陣
模型的精度,即模型預(yù)測(cè)正確的個(gè)數(shù)/樣本的總個(gè)數(shù)
召回率,真正類(lèi)率,表示的是,模型預(yù)測(cè)為正類(lèi)的樣本的數(shù)量,占總的正類(lèi)樣本數(shù)量的比值:
一般情況下,Recall越高,說(shuō)明有更多的正類(lèi)樣本被模型預(yù)測(cè)正確,模型的效果越好。除了上述的評(píng)價(jià)指標(biāo),另一個(gè)用于度量分類(lèi)中的非均衡的工具是ROC曲線(ROC curve)。
本分類(lèi)器ROC曲線如下圖:
ROC曲線是從[0,0]到[1,1]的上凸曲線。ROC曲線越趨近于左上角的[0,1]點(diǎn),說(shuō)明分類(lèi)器的效果越好。ROC 曲線下方的面積稱為AUC值,AUC介于0到1之間,當(dāng)AUC小于0.5時(shí),說(shuō)明分類(lèi)器的效果不如隨機(jī)預(yù)測(cè)的效果; AUC 越接近于1,說(shuō)明分類(lèi)器的效果越好。本實(shí)驗(yàn)中,隨機(jī)將樣本集劃分6次,平均AUC值如圖所示,為0.81,證明模型能夠有效預(yù)測(cè)比賽勝負(fù)。
通過(guò)實(shí)驗(yàn),可以證明基于AdaBoost模型的某競(jìng)技游戲勝負(fù)分類(lèi)器是有效的,平均AUC為0.81左右,不同的訓(xùn)練模型對(duì)數(shù)據(jù)的擬合效果有時(shí)差距是非常大的,所以本文后續(xù)工作還可以應(yīng)用更加合適的模型來(lái)提高其精度,比如可以利用回歸分析,對(duì)特征相關(guān)度進(jìn)行分析,根據(jù)分析適當(dāng)增加或降低模型復(fù)雜度,可以提高分類(lèi)準(zhǔn)確率,本文由于篇幅有限,不再做贅述。
電子競(jìng)技是隨著行業(yè)越來(lái)越規(guī)范和飛速發(fā)展,無(wú)論是個(gè)人電腦端還是手機(jī)端,每天都有大量的數(shù)據(jù)產(chǎn)生,本文僅對(duì)其中游戲類(lèi)中的一個(gè)小方向做了簡(jiǎn)單分析。機(jī)器學(xué)習(xí),深度學(xué)習(xí),強(qiáng)化學(xué)習(xí)模型作為一種工具已經(jīng)在許多領(lǐng)域取得了良好的應(yīng)用效果,如語(yǔ)音,圖片識(shí)別,自然語(yǔ)言處理等領(lǐng)域中大放光彩。去年,騰訊AILab實(shí)驗(yàn)室研發(fā)的虛擬角色在2100場(chǎng)游戲?qū)怪校〉昧?9,8%的獲勝率,讓我們的認(rèn)知不僅僅停留在alphaGo大戰(zhàn)圍棋高手,而電子競(jìng)技作為一項(xiàng)體育運(yùn)動(dòng),不論在專業(yè)領(lǐng)域和普通玩家中,都深受喜愛(ài),從前文的報(bào)告中,在2020年,電競(jìng)整體規(guī)模有望達(dá)到1300億元,但是相關(guān)研究并沒(méi)有成型,希望本文是拋磚引玉,今后的學(xué)習(xí)中能夠有更多的研究應(yīng)用到電競(jìng)行業(yè)。最后,機(jī)器學(xué)習(xí)以及其后面一系列學(xué)習(xí)模型算法作為一種新興的預(yù)測(cè)模型,在電子競(jìng)技行業(yè)具有廣闊的應(yīng)用前景,對(duì)于提升用戶游戲體驗(yàn)度,增強(qiáng)用戶黏性,完善游戲內(nèi)部機(jī)制,改善游戲生態(tài)有著重要的應(yīng)用價(jià)值。