用機器學習預測,手持98k化身吃雞大師

全文共4559字,預計學習時長9分鐘

clipboard.png

近日,《絕地求生》(PUBG)MET亞洲邀請賽中國兩個賽區的7支戰隊戰隊全部退賽的消息驚呆全網。

clipboard.png

原因很簡單:

“有人作弊了,官方卻不管。”

clipboard.png

《絕地求生》(PUBG)官方稍後也宣稱,因不能確保MET Asia Series:PUBG Classic的競技公平性的原因,特此聲明:取消MET亞洲邀請賽爲PGC輸送賽區席位的資格。

線上線下譁然一片。

clipboard.png

這是繼《絕地求生:刺激戰場》更名爲《和平精英》,世界觀大換血後又一圈內勁爆新聞,MET亞洲邀請賽爲PUBG官方授權,現場徇私舞弊,無人管制,無疑爲電子競技圈又一大污點,導致不良風氣亂心。

姑且不論主辦方消極怠工、疏忽職守,那些涉嫌作弊的隊伍和選手已然失去作爲一名優秀電子競技選手的驕傲。

clipboard.png

是生性如此,爲獲勝不擇手段?

還是擔心水平不夠,吃不到雞?

作爲普通玩家,我們又該怎樣預測吃雞玩家和比賽趨勢,提高吃雞概率?

下面小芯芯,將通過機器學習預測的方式,告訴大家如何在看比賽時成爲吃雞大師,以及更好更快地在絕地求生中吃雞成功。

clipboard.png

clipboard.png

知己知彼百戰不殆

《絕地求生》(PUBG)作爲一款現象級電腦遊戲,每月活躍玩家高達數百萬。

主要背景和規則是:每場競賽中,100名玩家乘坐飛機,被投送到一個海島上的不同地點。他們必須搜尋物資、武器並與其他玩家展開大逃殺,直至最後一人存活。每位玩家可以選擇與最多三名其他玩家組隊或單人遊戲。同時,玩家還必須在不斷縮小和移動的“毒圈”內部活動。

clipboard.png

接下來,我們將嘗試在機器學習中完成特徵工程,包括誤差分析、特徵空間評估、集成和調試處理,具體的實驗工具爲Weka和Lightside。

注意!這篇文章不會教授任何代碼,但可以展示一個機器學習過程的綜合案例,包括數據清理、數據集拆分、交叉驗證和特性設計。

注意!前方高能!

clipboard.png

第一步:數據收集

數據集傳送門:

https://www.kaggle.com/c/pubg...

Kaggle中的數據集爲本實驗提供了超過445萬個實例和28個特徵。其中有代表每局遊戲的匹配ID、代表每個隊伍的隊伍ID(從1到4不等)以及代表每個玩家的玩家ID。我們將數據格式化以確保一個實例僅統計一名玩家的賽後數據。特徵則包括玩家在遊戲中的表現,如扶起隊友的次數、擊殺次數、步行距離等。還有一些外部排名特徵來表示玩家在遊戲中的表現。每場遊戲的最終排名百分位數爲0-1(1表示第一名而0表示最後一名),我們將該百分位數重建爲最終預測類。

本文選擇“組隊”模式,玩家可以匹配一個1-4人的小隊與其他隊伍對抗,因爲數據集中的很多特徵都與隊伍表現有關。我們將代表每個玩家的實例轉換爲代表每個組的實例,並獲取特徵的平均值和一些標準偏差。每局遊戲都任意選取兩個隊伍,看看哪一隊排名更高。在訓練集和測試集中,將最終排名百分位數轉換爲“獲勝預測”,該值可以顯示排名較高的隊伍,以實現二元預測。

clipboard.png

另外還添加了一些有意義的特徵進行比較,將這些特徵的差異也作爲值,例如隊伍人數差異、擊殺等級差異、步行距離差異和裝備獲取數量差異。數據清理方面,刪除了不合理的數據,例如同一局遊戲中的重複玩家、負排名和人數大於4的隊伍。

同時還按照隨機順序拆分數據集,拆分比例如下:交叉驗證集70%,開發集20%,測試集10%。我們想預測的是,一局遊戲中隨機挑選兩個隊伍,哪個隊伍會獲勝,因此,該預測的分類是winnerPrediction。清理數據後,共有6576個實例,65個特徵。在獲勝預測中,“隊伍二”和“隊伍一”在每個拆分數據集中各佔大約50%。

clipboard.png

第二步:數據探索

首先對開發集進行了探索性數據分析,以更好地瞭解數據。以下是一些有趣的發現。

玩家更喜歡單排還是組隊?

隊伍規模的分佈非常相似,集中在1人小隊和2人小隊。看來大多數玩家更喜歡單排或雙排。

clipboard.png

剛槍的隊伍是否更有可能吃雞?

用隊伍二的擊殺等級減去隊伍一的擊殺等級可以得出擊殺等級差異分佈,數據分析發現該差異呈正態分佈。因此,在下圖右側,Y軸爲正數時,隊伍二排名較低,下圖左側,Y軸爲負數時,隊伍二排名較高。紅色區域爲隊伍二獲勝,藍色區域則爲隊伍一獲勝。下圖表明,大多數情況下,擊殺等級高的隊伍更有可能吃雞。

clipboard.png

移動和隱蔽,哪種策略更好?

用隊伍二的步行距離減去隊伍一的步行距離可以得出步行距離差異分佈,同樣呈正態分佈。因此,圖的右側Y軸爲正數時,隊伍二的步行距離大於隊伍一,圖的左側Y軸爲負數時,隊伍二的步行距離小於隊伍一。紅色區域爲隊伍二獲勝,藍色區域則爲隊伍一獲勝。下圖表明,大多數情況下,移動距離更多的隊伍更有可能吃雞。

clipboard.png

clipboard.png

第三步:數據誤差分析和檢驗

我們選擇從邏輯迴歸開始,因爲所有的特徵都是數字數據,預測也是二進制的,權重模型會非常實用。而用樹狀模型分析65個特徵費時費力。分析的基線性能如下(準確率0.8905,kappa係數0.7809)。

  1. 水平差異分析

一些實例預測隊伍二會獲勝,但實際是隊伍一獲勝,首先檢查了這部分實例,即將水平差異由大到小排序,然後查看權重相對較大的特徵。我們發現,步行距離差異有較大的水平差異和特徵權重。步行距離差異是由同一場比賽中隊伍二的步行距離減去隊伍一的步行距離計算得出的,因此負數表示隊伍二走得較少,正數表示隊伍二走得較多。這意味着,步行距離越多就越有可能吃雞(這在遊戲中很重要,關乎玩家的生存時間)。但是也有例外,可能某個隊伍喜歡剛槍,經常在野外移動,導致很快就被淘汰,而另一組則打得更謹慎,大部分藏匿在一個地點,最終存活時間更長。

爲了進一步解決這個問題,我們還下載了CSV文件中的預測標籤,查看了那些預測隊伍二獲勝而實際隊伍一獲勝的實例,然後將步行距離差異從大到小排列,以便查看隊伍二步行距離更長卻輸掉遊戲的特例。

clipboard.png

我們發現有時隊伍二步行距離確實比隊伍一長,但隊伍一載具移動距離更長(在遊戲中,玩家可以選擇駕駛發現的載具)。如下圖標黃的實例所示,很多隊伍步行距離確實沒有其他隊伍長,但駕駛距離要長得多。同時,駕駛距離也是第二大水平特徵差異。因此,僅僅測量步行距離或駕駛距離都不能很好地表示總移動距離。這兩個特性似乎都存在一定問題,需要更合適的表示方法。

因此,我們結合步行距離和駕駛距離提出了3點新特徵:隊伍一、隊伍二的總移動距離以及兩隊之間的距離差異。

我們在開發集中測試了新的特徵空間,取得了一項不起眼的改進。雖然不起眼,預測隊伍二獲勝但實際隊伍一獲勝的實例減少了5個,並且預測結果更正爲隊伍一。

然而將其應用於交叉驗證集時,性能卻降低了。最合理的解釋就是這項改進在開發集中過度擬合,並且沒有推廣到新數據集中。

clipboard.png

  1. 垂直差異分析

緊接着,通過檢查垂直絕對差異進行另一項誤差分析。由於新的開發集會引入更多誤差,導致實例預測隊伍一獲勝但實際是隊伍二獲勝,我們的目標就是弄清楚,在這些實例中,隊伍一和隊伍二有何相似之處。擊殺排名第1的特徵垂直差異較小,但特徵權重較大。該排名僅反映隊伍一的擊殺量排名。隊伍一的獲勝平均擊殺排名是34,失敗平均擊殺排名是43。例外是,有時隊伍一的擊殺排名達到了34但仍輸了。前面已經提到了,有時候一個隊伍更喜歡剛槍,所以擊殺敵人更多,擊殺排名更高,但同時他們被擊殺的風險也就越大。

此處的啓示是,邏輯迴歸擅長全局分析,但也可能會受到一些極端情況的影響。因此需要一種可以忽略極端例外情況的算法,且一次僅查看一組較小的數據。決策樹是一個不錯的模型,但由於總共有68個數字數據特徵,所以決策樹需要花費大量時間來構建模型。但是,如果綜合決策樹和邏輯迴歸的優點呢?邏輯模型樹(LMT)是一個很好的選擇,因爲它可以捕獲非線性模式和更大的差異。於是我們開始嘗試LMT,並將結果與其他兩種算法的結果進行比較,最終發現開發集有了明顯的改進。

將該模型應用於交叉驗證集,同樣取得了顯著的改進。

clipboard.png

  1. 集成

Boosting算法可以在迭代過程中對先前模型分類錯誤的實例進行專項檢查,因此在該研究中,Boosting是提高準確度的好方法。於是嘗試在開發集中使用配備了LMT分類器的AdaBoost,可是性能下降了。

由於特徵空間相對複雜,接下來試圖減少可能成爲壞指標的特徵。嘗試屬性選擇分類器並使用主體成分作爲屬性評估器,因爲主體成分可以減少特徵空間的維數,同時儘可能地保留信息。但最終性能還是下降了。

然後又嘗試了cfs子集評估器,因爲很多特徵都是相互關聯的(例如擊殺排名和擊殺得分)。該評估器可以有選擇性地保留特徵之間有用的關聯,防止特徵重複,但性能依然不及基線性能。

接下來又嘗試了另一個不錯的評估器——SVM屬性評估器,因爲它採用的是向後選擇法,適用於較大的特徵空間,但是Weka和Lightside不支持這種方法。

  1. 特徵空間評估

除了之前嘗試過的包裝器(wrapper)方法外,我們還想知道過濾器(filter)方法是否可以提升性能,因爲過濾器可以單獨選擇算法以外的特徵。

再次嘗試了屬性選擇評估器,同樣將主體成分作爲評估器。三種不同的空間分別爲原始特徵空間(68個特徵)、40個特徵和20個特徵,並且做了一個實驗來測試這三種特徵空間。但其他兩種新的特徵空間均降低了性能。我們又測試了其他評估器,結果不變,最後決定維持原特徵空間。

  1. 調試處理

我們想調試LMT算法中的兩個參數。實例最小數量的默認值是15,但我們想改成50,看看加入更多節點拆分的實例能否提升每個節點的準確性,從而提升整體性能。Boosting迭代的默認值是-1,這表明沒有迭代。我們想將默認值改爲3,測試一下是否能提升分類精確度。

因此,我們測試了以下四種設定:(1)節點拆分實例最小數量爲15,Boosting迭代值爲-1(即無迭代),(2)實例數量爲50,Boosting迭代值爲-1,(3)實例數量爲15,Boosting迭代值爲3,(4)實例數量爲50,Boosting迭代值爲3。注意,設定(1)爲默認設定。將精確度作爲性能的衡量標準。

階段1:

(1) 90.81 (2) 90.81 (3) 91.05(4) 91.05

設定(3)的精確度最高,且比設定(4)更加簡潔,因此設定(3)爲理想設定。

階段2:

clipboard.png

根據階段1的數據,設定(3)爲理想設定。在階段2中,依然將設定(3)作爲每一個fold函數的理想設定。在本例中,沒有進行任何重要的測試,也沒有證據證明這種優化是有價值的。

似乎各節點實例的最小權重對模型性能的影響並不大。但是,增加迭代次數可能會提高多次嘗試的準確性。

如果在一個全新的數據集中使用設定(3),我們估計最終性能的分類精度會在91.66左右,這是在5個fold函數中進行性能測試得出的平均精度。

clipboard.png

第四步:最終評估

最後,用LMT在交叉驗證集中訓練了一個模型,並使用了設定(3)。從誤差分析中添加了3個新特徵後,我們保持特徵空間不變。從最終測試集中得出的最終性能爲:精確度0.9179,接近調試處理中的估計值,而Kappa係數爲0.8359。

clipboard.png

樹狀圖

觀察上圖可以發現,模型的起始點是步行距離差異,從駕駛和移動距離差異的某個值開始分裂,這證明了我們在誤差分析中新增特徵的重要性。雖然一些節點僅與一個隊伍相關,例如2-killStreaks,但很多其他節點都共用了兩個隊伍的差異,甚至用到了winPoints的標準差。這也體現了保留原始特徵同時添加組合特徵的實用性。

clipboard.png

吾日三省吾身

縝密計算後,本次項目分析依然還存在一些缺陷:

第一,只測試了其中一種遊戲模式的數據,測試結果可能不適用於所有模式。

第二,沒有預測排名,而是將項目範圍轉換爲二進制分類。我們從一局遊戲中隨機選出兩個隊伍,嘗試預測哪個隊伍會獲勝。如此一來,就刪除了其他隊伍的表現,同時也就刪除了一些相關的差異和因素,這也可能會影響真實對戰中的結果預測。

綜上所述,我們通過機器學習預測的方式發現了一些影響遊戲結果的重要因素,並且可以用機器“快、狠、準”預測一局遊戲中的吃雞玩家和比賽趨勢,成爲名副其實的業內行家、吃雞大師。

clipboard.png

clipboard.png

留言 點贊 關注

我們一起分享AI學習與發展的乾貨

歡迎關注全平臺AI垂類自媒體 “讀芯術”

clipboard.png

(添加小編微信:dxsxbb,加入讀者圈,一起討論最新鮮的人工智能科技哦~

發表評論
所有評論
還沒有人評論,想成為第一個評論的人麼? 請在上方評論欄輸入並且點擊發布.
相關文章