鄒燕飛 劉淑英 錢紅琳
摘 要:本文將機器學習的思想應用到足球世界杯冠軍預測領域,選用近年來的足球世界杯小組賽數(shù)據(jù)作為實驗樣本,對樣本進行預處理后分為訓練樣本和測試樣本,采用機器學習的監(jiān)督學習算法,先對訓練樣本進行學習,然后利用學習到的分類器對測試樣本進行分類。
關鍵詞:機器學習;特征分類;logistic算法;足球世界杯
中圖分類號:TP391.9 文獻標識碼:A 文章編號:1671-2064(2019)22-0024-02
0 引言
本文主要是構(gòu)建2018年足球世界杯比賽預測的模型,預測關于整個世界杯比賽的小組賽結(jié)果,分別為模擬四分之一決賽、半決賽以及決賽。該模型的建立主要可分為四步,即數(shù)據(jù)采集、數(shù)據(jù)預處理、模型訓練、模型測試。
本模型使用的樣本數(shù)據(jù)截取自1930年第一屆以來入圍2018俄羅斯世界杯小組賽的球隊信息,將近40000行。該模型采用百分之八十的訓練集,百分之二十的測試機來進行模型訓練。模型具體實現(xiàn)分為五個步驟,分別是獲取數(shù)據(jù)、預處理、獲取模型、模型訓練及測試。下面來詳細介紹每個步驟的實現(xiàn)。
1 模型實現(xiàn)
1.1 獲取數(shù)據(jù)
我們通過pandas.read_csv函數(shù)實現(xiàn)我們所需數(shù)據(jù)的讀入,讀取方式見以下代碼,其中'C:/Users/Administrator/Desktop/FIFA/datasets/World Cup 2018 Dataset.csv'表示文件所在路徑,world_cup表示參加世界杯球隊的信息,results表示1872年到2018年足球比賽的結(jié)果通過pandas的read_csv()函數(shù)來加載數(shù)據(jù)集,返回DataFrame,它是二位標記數(shù)據(jù)結(jié)構(gòu),列可以是不同的數(shù)據(jù)類型,是最常用的pandas對象。
1.2 數(shù)據(jù)預處理
為了使預測的結(jié)果盡可能的準確,我們對加載的數(shù)據(jù)進行處理,通過主場和客場的勝球數(shù)相減得到目標差異和贏的隊伍。所以我們在結(jié)果數(shù)據(jù)集中添加兩個特征:平局和勝利、凈勝球數(shù)(目標差異)。
1.3 特征提取
數(shù)據(jù)非常龐大,我們做一個數(shù)據(jù)子集,僅包含尼日利亞的比賽,先注目在一個球隊上發(fā)現(xiàn)哪些特征對一個國家有效,然后推廣到所有參與世界杯的所有國家。我們可以利用seaborn來畫圖,seaborn是對matplotlib更高級的封裝。代碼如下:
import matplotlib.pyplot as plt
import seaborn as sns
fig, ax = plt.subplots(1)
fig.set_size_inches(10.7, 6.27)
sns.set(style='darkgrid')
sns.countplot(x='Nigeria_Results', data=winsdf)
1.4 獲取模型及訓練
經(jīng)過特征提取,發(fā)現(xiàn)比賽發(fā)生在哪個場館,并沒有對結(jié)構(gòu)有重大影響。所以縮小數(shù)據(jù)集,僅保留參賽隊。
df_teams_home = results[results['home_team'].isin(worldcup_teams)]
df_teams_away = results[results['away_team'].isin(worldcup_teams)]
df_teams = pd.concat((df_teams_home, df_teams_ away))
df_teams.drop_duplicates()
year = []
for row in df_teams['date']:
year.append(int(row[:4]))
df_teams['match_year'] = year
df_teams_1930 = df_teams[df_teams.match_year >= 1930]
df_teams_1930 = df_teams.drop(['date', 'home_score','away_score','tournament','city', 'country','goal_difference','match_year',axis=1)
用isin函數(shù)判斷這個隊伍是否是參加世界杯的隊伍。鎖定參加世界杯的隊伍,用concat重新整合我們的結(jié)果集表格,整合之后可能含有重復的隊伍,我們需要用drop_ duplicates()函數(shù)去掉重復的隊伍。用int(row[:4])把字符串前四個轉(zhuǎn)化成int型,和1930比較,篩選出1930年之后的隊伍。屬性特征過多,會造成維數(shù)災難問題,所以就需要去掉這些不相關特征,降低學習任務的難度。通過drop函數(shù)去掉1930年之前的比賽和不會影響到比賽結(jié)果的數(shù)據(jù)列,例如日期、主場進球數(shù)、客場進球數(shù)、錦標賽、城市、國家、目標差異和比賽年份。
為了簡化模型的處理,我們修改一下預測標簽。代碼如下所示。
df_teams_1930 = df_teams_1930.reset_index(drop= True)
df_teams_1930.loc[df_teams_1930.winning_ team==df_teams_1930.home_team,'winning_t-eam']=2
df_teams_1930.loc[df_teams_1930.winning_team == 'Draw','winning_team']=1
df_teams_1930.loc[df_teams_1930.winning_team= =df_teams_1930.away_team,'winning_t-eam']=0
用drop_index(drop=True)來改變index下標,因為我們winning_team這列都是字符,我們要把字符轉(zhuǎn)化成數(shù)字。如果主場隊伍獲勝,那么獲勝隊伍則顯示“2”,如果平局則顯示“1”,如果是客場隊伍獲勝則顯示“0”。
通過設置啞變量,將主場隊伍和客場隊伍從分類變量轉(zhuǎn)換成連續(xù)變量。這時就要運用get_dummies()函數(shù),這個函數(shù)它可以實現(xiàn)一種獨特的pandas編碼方式,它會將擁有不同值的變量轉(zhuǎn)換成一位有效值,以便將它們加載到Scikit-learn模型中。將使用邏輯回歸,因為邏輯回歸可以針對一組可以影響到結(jié)果的既定數(shù)據(jù)集嘗試預測結(jié)果輸贏。一次輸入一場比賽到算法中。然后模型就會學習輸入的每條數(shù)據(jù)對比賽結(jié)果產(chǎn)生了積極的效果還是消極的效果,以及影響的程度。經(jīng)過充分的(好)數(shù)據(jù)的訓練后,就可以得到能夠預測未來結(jié)果的模型。第一步導入模型,調(diào)用邏輯回歸LogisticRegression()函數(shù)。第二步Fit()訓練,調(diào)用fit(x,y)的方法來訓練模型,其中x為數(shù)據(jù)的屬性,y為所屬類型接下來,我們將數(shù)據(jù)按照80%的訓練數(shù)據(jù)集和20%的測試數(shù)據(jù)集分成X集和Y集進行學習和交叉驗證,第三步predict()預測。利用訓練得到的模型對數(shù)據(jù)集進行預測,返回預測結(jié)果。
利用訓練得到的模型對數(shù)據(jù)集進行預測,返回預測結(jié)果。具體實現(xiàn)代碼如下。
final=pd.get_dummies(df_teams_1930,prefix=['home_team','way_team'],columns=['home_team', 'away_team'])
X = final.drop(['winning_team'], axis=1)
y = final["winning_team"]
y = y.astype('int')
X_train, X_test, y_train, y_test = train_test_split(X, y, test_size=0.80, random_state=42)
logreg = LogisticRegression()
logreg.fit(X_train, y_train)
score = logreg.score(X_train, y_train)
score2 = logreg.score(X_test, y_test)
print("訓練集結(jié)果: ", '%.3f'%(score))
print("測試集結(jié)果: ", '%.3f'%(score2))
我們將這些數(shù)據(jù)傳遞到算法中,我們的訓練集結(jié)果是55.4%,測試集結(jié)果是53.8%,說明我們這個模型可行。
1.5 模型測試
這里我們獲取2018的國際足球聯(lián)盟排名數(shù)據(jù)fifa_ rankings.csv,和2018世界杯參賽隊伍信息fixtures.csv。在此數(shù)據(jù)上應用我們的訓練模型。
2 比賽結(jié)果及分析
根據(jù)所構(gòu)建的模型,應用到小組賽檢測中,檢測每一場比賽的輸贏概率。通過選擇贏的隊伍作為比賽勝利一方對小組賽出現(xiàn)隊伍進行預測。預測小組出線16支隊伍為:烏拉圭、葡萄牙、法國、克羅地亞、巴西、墨西哥、英格蘭、哥倫比亞、西班牙、俄羅斯、阿根廷、秘魯、德國、瑞士、波蘭、比利時,其中13支隊伍出線進入16強。預測的準確率是81.2%。這樣看來16強預測效果還是很不錯的。
3 結(jié)語
算法還有些待改進優(yōu)化的地方。一是因為足球不確定因素太多,如果僅根據(jù)往年輸贏來判斷的話,結(jié)果可能有些差異,所以可以通過國際足球聯(lián)盟比賽的數(shù)據(jù)來評估出關于每一個球員的水平,根據(jù)球員的水平作為參考。二是利用混淆矩陣,混淆矩陣是分析模型好壞的,它可以幫我們分析出模型預測中哪些有誤。三是為了提高模型預測的準確度,可以將多個模型組合在一起。
參考文獻
[1] 戴維.邏輯回歸解決文本分類問題[J].通訊世界,2018,25(08):266-267.
[2] 吳曉杰.基于多情境數(shù)據(jù)和半監(jiān)督代價敏感模型的場所個性化語義識別[D].杭州:浙江大學,2017.
[3] 黃輝.基于ReliefF的多標簽特征選擇算法研究[D].廣州:廣東工業(yè)大學,2018.
[4] 趙琰.第31屆奧運會女子足球比賽攻守轉(zhuǎn)換特征分析[D].新鄉(xiāng):河南師范大學,2018.
Soccer World Cup Champion Prediction Based on Machine Learning Algorithm Model research
ZOU Yan-fei,LIU Shu-ying,QIAN Hong-lin
(Computer College of Xianyang Normal University,Xianyang ?Shaanxi ?712000)
Abstract:In this paper,the idea of machine learning is applied to the prediction field of football World Cup champions. The data of recent football World Cup group matches are selected as experimental samples. After preprocessing, the samples are divided into training samples and test samples. The supervised learning algorithm of machine learning is used to learn the training samples first,and then the test samples are classified by the learned classifier.
Key words:Machine learning; Feature classification; Logistic algorithm; Football World Cup