選全明星哪家強,機器學習來幫忙
代碼鏈接:Jupyter Notebook Viewer
數據鏈接:lijin-THU/play-with-machine-learning
又到了一年一度NBA全明星賽投票的時刻。
老實說,真要在這麼多球員里找出兩支全明星隊來對抗,實在是有點難為我這個選擇困難症了。好在,我會那麼一點機器學習的小知識。所以,今年,我準備讓電腦來決定,我到底該選誰。
進入21世紀以來,從2000-2001賽季開始,NBA已經舉行了17屆全明星的比賽,有數據記錄的NBA球員有6850人次,而全明星只有396人次:
而在這17個賽季里,有機會成為全明星的球員共有1475人,而真正擁有全明星這塊招牌的球員則是118位:
而在這些摸到全明星正賽地板的球員中,有42位只在全明星賽曇花一現,除了少數全明星賽的常青樹,更多的人只能留下到此一游的傳說:
有四位參加了13次全明星正賽,分別是「石佛」鄧肯,「德國戰車」諾維斯基,」黑曼巴「科比以及小皇帝詹姆斯。
鄧肯同學已經退役回家釣魚參加」高考「:
老科剛剛退役了自己的兩件球衣:
諾天王還奮戰在NBA一線打怪升級:
唯一年輕的」三旬老漢「似乎沒有受到歲月的侵蝕,想必即將成為21世紀參加全明星次數最多的球員(之一):
緊隨其後的是11次的閃電俠」韋德「和退役的」狼王「加內特以及10次的甜瓜」安東尼「。
除了幾位已經退役的老哥,03一代也進入了老年人的階段,長江後浪推前浪,想必詹皇摸著年輕一代的頭,說出」未來是你的「的時候也不遠了。
廢話少說。為了預測今年全明星的陣容,首先,需要搞到各位球星的統計數據。
統計數據來自NBA官網:http://stats.nba.com/,自然,這些數據既包含各位球星大大的常規數據:得分、籃板、助攻、搶斷、蓋帽,也包含球隊的戰績,還包括命中率、正負值、各項數據排名等等。當然,本賽季的數據只能截止到12月底,因此,為了保持一致,需要將其他賽季的統計數據也截止到12月底,最後拿到的是各位球員在當賽季12月底的各項統計數據,共有173項:
AGE, GP, W, L, W_PCT, MIN, FGM, FGA, FG_PCT, FG3M, FG3A, FG3_PCT, FTM, FTA, FT_PCT, OREB, DREB, REB, AST, TOV, STL, BLK, BLKA, PF, PFD, PTS, PLUS_MINUS, NBA_FANTASY_PTS, DD2, TD3, GP_RANK, W_RANK, L_RANK, W_PCT_RANK, MIN_RANK, FGM_RANK, FGA_RANK, FG_PCT_RANK, FG3M_RANK, FG3A_RANK, FG3_PCT_RANK, FTM_RANK, FTA_RANK, FT_PCT_RANK, OREB_RANK, DREB_RANK, REB_RANK, AST_RANK, TOV_RANK, STL_RANK, BLK_RANK, BLKA_RANK, PF_RANK, PFD_RANK, PTS_RANK, PLUS_MINUS_RANK, NBA_FANTASY_PTS_RANK, DD2_RANK, TD3_RANK, PTS_OFF_TOV, PTS_2ND_CHANCE, PTS_FB, PTS_PAINT, OPP_PTS_OFF_TOV, OPP_PTS_2ND_CHANCE, OPP_PTS_FB, OPP_PTS_PAINT, PTS_OFF_TOV_RANK, PTS_2ND_CHANCE_RANK, PTS_FB_RANK, PTS_PAINT_RANK, OPP_PTS_OFF_TOV_RANK, OPP_PTS_2ND_CHANCE_RANK, OPP_PTS_FB_RANK, OPP_PTS_PAINT_RANK, OFF_RATING, DEF_RATING, NET_RATING, AST_PCT, AST_TO, AST_RATIO, OREB_PCT, DREB_PCT, REB_PCT, TM_TOV_PCT, EFG_PCT, TS_PCT, USG_PCT, PACE, PIE, FGM_PG, FGA_PG, OFF_RATING_RANK, DEF_RATING_RANK, NET_RATING_RANK, AST_PCT_RANK, AST_TO_RANK, AST_RATIO_RANK, OREB_PCT_RANK, DREB_PCT_RANK, REB_PCT_RANK, TM_TOV_PCT_RANK, EFG_PCT_RANK, TS_PCT_RANK, USG_PCT_RANK, PACE_RANK, PIE_RANK, FGM_PG_RANK, FGA_PG_RANK, PCT_FGA_2PT, PCT_FGA_3PT, PCT_PTS_2PT, PCT_PTS_2PT_MR, PCT_PTS_3PT, PCT_PTS_FB, PCT_PTS_FT, PCT_PTS_OFF_TOV, PCT_PTS_PAINT, PCT_AST_2PM, PCT_UAST_2PM, PCT_AST_3PM, PCT_UAST_3PM, PCT_AST_FGM, PCT_UAST_FGM, PCT_FGA_2PT_RANK, PCT_FGA_3PT_RANK, PCT_PTS_2PT_RANK, PCT_PTS_2PT_MR_RANK, PCT_PTS_3PT_RANK, PCT_PTS_FB_RANK, PCT_PTS_FT_RANK, PCT_PTS_OFF_TOV_RANK, PCT_PTS_PAINT_RANK, PCT_AST_2PM_RANK, PCT_UAST_2PM_RANK, PCT_AST_3PM_RANK, PCT_UAST_3PM_RANK, PCT_AST_FGM_RANK, PCT_UAST_FGM_RANK, PCT_FGM, PCT_FGA, PCT_FG3M, PCT_FG3A, PCT_FTM, PCT_FTA, PCT_OREB, PCT_DREB, PCT_REB, PCT_AST, PCT_TOV, PCT_STL, PCT_BLK, PCT_BLKA, PCT_PF, PCT_PFD, PCT_PTS, PCT_FGM_RANK, PCT_FGA_RANK, PCT_FG3M_RANK, PCT_FG3A_RANK, PCT_FTM_RANK, PCT_FTA_RANK, PCT_OREB_RANK, PCT_DREB_RANK, PCT_REB_RANK, PCT_AST_RANK, PCT_TOV_RANK, PCT_STL_RANK, PCT_BLK_RANK, PCT_BLKA_RANK, PCT_PF_RANK, PCT_PFD_RANK, PCT_PTS_RANK
至於這些數據具體代表什麼含義,各路大神自有分析,我在這裡就不班門弄斧了。
專業的籃球分析我也搞不懂,這裡主要靠機器學習跟大家忽悠忽悠了。
先看基本的數據統計情況。
數據不會說謊,全明星的平均常規數據和所有球員的平均數據相比,自然是高了一個檔次:
全明星:得分21.1,籃板7.2,蓋帽0.9,籃板4.5,搶斷1.3
全體球員:得分8.1,籃板3.6,蓋帽0.4,籃板1.8,搶斷0.6
在這17個賽季中,12月底前的得分王,只有一位沒有參加全明星,他就是09-10賽季的凱文馬丁,不過由於統計數據只有5場比賽,因此,不算特例。截止目前,NBA的得分王」鬍子哥「詹姆斯哈登,自然是鎖定了一個席位。
事實上,得分榜前10的球員,入選全明星的概率高達78%,而落選球員絕大多數的原因是因為受傷,因此,想必今年截止目前得分榜前十位的哈登、字母哥、詹姆斯、庫里、杜蘭特、考辛斯、奧拉迪波、利拉德、戴維斯和歐文,必然是當選的熱門人選。
然而,我卻並不能完全按照得分榜的順序去預測,比如,今年利拉德也許可能又要為沒有當選全明星,又在全明星賽後」爆發「一陣,畢竟瘋狂的轉會季為西部帶來了更多的全明星競爭者。
那麼,怎麼辦?上機器學習吧!
如果把每個球員當賽季的統計數據當做一條數據,並以是否參加全明星賽作為標記,那麼選全明星的問題可以被定義為:
給定一條球員的數據 ,通過某種方法,得到球員是否參加全明星的標記 ,其中1代表參加,0代表不參加。那麼,這就是一個通常的二分類問題。
而對於這個二分類問題,我所擁有的訓練集為從00-01賽季到16-17賽季所有球員在12月25日前的統計數據,而預測集為當前的17-18賽季所有球員在12月25日前的統計數據。
在解這個問題之前,為了更好地了解這些統計數據,我先用t-SNE將數據進行降維可視化,來觀察全明星與普通球員之間數據分布的差異:
藍色數據是全明星數據,而黃色則是非全明星的數據。可以看到,這應該是一個非線性二分類的問題,而SVM是解決這種問題的常用方法。
因此,在這組數據上,我可以通過訓練一個傳統的SVM分類器,實現對今年數據的預測。
利用現成的SVM工具包,訓練SVM模型並預測後,以下球員被分到了今年全明星組,他們分別是:
西部11位:戴維斯(鵜鶘)、保羅(火箭)、利拉德(開拓者)、考辛斯(鵜鶘)、哈登(火箭)、巴特勒(森林狼)、唐斯(森林狼)、湯普森(勇士)、杜蘭特(勇士)、阿爾德里奇(馬刺)、庫里(勇士)
東部10位:比爾(奇才)、德羅贊(猛龍)、阿德托昆博(雄鹿)、恩比德(76人)、沃爾(奇才)、樂福(騎士)、歐文(凱爾特人)、詹姆斯(騎士)、奧拉迪波(步行者)、波爾津吉斯(尼克斯)
其中,波爾津吉斯、奧拉迪波、恩比德是從未參加過全明星的新人。
當然我很好奇,為什麼SVM會覺得維斯布魯克不是一個全明星候選,不過,今年雷霆的戰績的確不太好,而三巨頭都未入SVM分類器的法眼,自然也解釋的通了。
雖說NBA隨著時間變化,戰術在變,潮流在變,球迷在變,然而選全明星的標準似乎並沒有變化多少,為此,接下來,我來使用K近鄰方法,預測今年的全明星名單。
K近鄰需要尋找已有數據點中,與當前數據點距離最近的K個點,然後按照這K個點的標記,決定最後數據點所屬的類別。換句話說,今年某個球員的數據與某年某全明星大神的數據十分接近,就認為這個球員會當選全明星。
衡量數據是否接近需要使用距離度量,在K近鄰中,最常用的距離度量自然是歐式距離,不過,對這組NBA統計數據直接使用歐式距離,顯然是一個不恰當的選擇。比如,場均得分相差0.5分與命中率相差50%在歐式距離上差距相同,但實際上差異非常大。
因此,在使用K近鄰前,為了使用歐式距離,我嘗試將數據進行了零均值單位方差的歸一化,並令K=1,即採用最近鄰的方法,得到以下球員將入選全明星:
西部13位:格里芬(快船)、考辛斯(鵜鶘)、格林(勇士)、哈登(火箭)、巴特勒(森林狼)、杜蘭特(勇士)、湯普森(勇士)、加索爾(灰熊)、約基奇(掘金)、喬治(雷霆)、米爾薩普(國王)、維斯布魯克(雷霆)、庫里(勇士)
東部13位:德拉蒙德(活塞)、拉塞爾(籃網)、德羅贊(猛龍)、施羅德(老鷹)、阿德托昆博(雄鹿)、沃爾(奇才)、沃克(黃蜂)、樂福(騎士)、米德爾頓(雄鹿)、洛瑞(猛龍)、歐文(凱爾特人)、詹姆斯(騎士)、奧拉迪波(步行者)
最近鄰給出的結果似乎更偏愛入選多年的老面孔,不過約基奇、米德爾頓、奧拉迪波是三個沒有全明星經歷的新人。
那麼,看來,奧拉迪波離開了威少,大有成為全明星的潛質。
最近鄰之後,接下來,我嘗試用樸素貝葉斯的方法,來處理這個分類問題。
樸素貝葉斯假設輸入數據的各個特徵獨立,顯然,NBA給定的統計數據不滿足這個假設,比如得分PTS和得分排名PTS_RANK顯然不是兩組獨立的特徵。
雖然如此,我們仍然可以按照樸素貝葉斯的方法去處理這個問題,在訓練集上訓練一個樸素貝葉斯模型,並預測得到全明星候選為:
西部:維金斯(森林狼)、格里芬(快船)、麥科勒姆(開拓者)、安東尼(雷霆)、保羅(火箭)、卡佩拉(火箭)、利拉德(開拓者)、戈登(火箭)、哈里斯(掘金)、巴恩斯(小牛)、哈登(火箭)、蒂格(森林狼)、巴特勒(森林狼)、努爾基奇(開拓者)、霍樂迪(鵜鶘)、唐斯(森林狼)、阿爾德里奇(馬刺)、杜蘭特(勇士)、湯普森(勇士)、加索爾(灰熊)、威廉姆斯(湖人)、約基奇(掘金)、喬治(雷霆)、米爾薩普(國王)、維斯布魯克(雷霆)、庫里(勇士)、沃倫(太陽)、埃文斯(灰熊)、巴頓(掘金)、蘭多夫(國王)
東部:戈登(魔術)、霍福德(凱爾特人)、德拉蒙德(活塞)、西蒙斯(76人)、比爾(奇才)、德羅贊(猛龍)、施羅德(老鷹)、霍華德(黃蜂)、布萊德索(雄鹿)、富尼耶(魔術)、阿德托昆博(雄鹿)、德拉季奇(熱火)、懷特塞德(熱火)、恩比德(76人)、沃克(黃蜂)、樂福(騎士)、米德爾頓(雄鹿)、歐文(凱爾特人)、詹姆斯(騎士)、波爾津吉斯(尼克斯)、洛瑞(猛龍)、米羅蒂奇(公牛)、武切維奇(魔術)、傑克遜(活塞)、哈達威(尼克斯)、哈里斯(活塞)、奧拉迪波(步行者)
拿到這個結果,說老實話,我是一臉懵逼的,這個與其說是預測結果,真不如說是大候選集,我猜想這跟技術統計數據不滿足獨立性應該是有一點關係的。不過,這也沒什麼關係,畢竟這些球員也是現在聯盟里中上游的球星,萬一誰被選上了,也不那麼稀奇。
另一個可以用來分類的方法是決策樹,決策樹有很多實現方式。這裡,對於我使用的決策樹,採用歸一化或非歸一化的統計數據作為輸入,可以給出以下兩組不同的結果。
歸一化:
西部16位:戴維斯(鵜鶘)、格里芬(快船)、麥科勒姆(開拓者)、安東尼(雷霆)、利拉德(開拓者)、喬丹(快船)、戈登(火箭)、巴恩斯(小牛)、哈登(火箭)、杜蘭特(勇士)、湯普森(勇士)、阿爾德里奇(馬刺)、維斯布魯克(雷霆)、約基奇(掘金)、喬治(雷霆)、埃文斯(灰熊)
東部15位:德拉蒙德(活塞)、西蒙斯(76人)、拉塞爾(籃網)、阿德托昆博(雄鹿)、林書豪(籃網)、恩比德(76人)、沃克(黃蜂)、米德爾頓(雄鹿)、歐文(凱爾特人)、詹姆斯(騎士)、波爾津吉斯(尼克斯)、洛瑞(猛龍)、武切維奇(魔術)、奧拉迪波(步行者)、考文頓(76人)
原始數據:
西部13位:格里芬(快船)、麥科勒姆(開拓者)、安東尼(雷霆)、利拉德(開拓者)、喬丹(快船)、戈登(火箭)、哈登(火箭)、杜蘭特(勇士)、湯普森(勇士)、阿爾德里奇(馬刺)、維斯布魯克(雷霆)、約基奇(掘金)、埃文斯(灰熊)
東部14位:德拉蒙德(活塞)、西蒙斯(76人)、拉塞爾(籃網)、阿德托昆博(雄鹿)、林書豪(籃網)、恩比德(76人)、沃克(黃蜂)、米德爾頓(雄鹿)、歐文(凱爾特人)、詹姆斯(騎士)、波爾津吉斯(尼克斯)、洛瑞(猛龍)、奧拉迪波(步行者)、考文頓(76人)
這個林書豪的入選實在讓我有點大跌眼鏡。莫非這個決策樹演算法也懂得中國市場的重要性?
最後,我選擇用神經網路作為本次預測全明星名單的終點。
神經網路,業界俗稱「煉丹」,是一門神秘的現代魔法師科學。本丹師道行尚淺,這裡只選擇了三種不同的網路結構,僅供參考,「仙丹」無效,概不負責。
對於這三種不同的網路結構,神經網路的輸入又分為原始特徵和歸一化特徵兩組。
先看原始特徵組的三種結構。
第一種,過一個兩層的200-tanh-dropout(0.5)-2-softmax的網路:
西部12位:戴維斯(鵜鶘)、格里芬(快船)、保羅(火箭)、利拉德(開拓者)、考辛斯(鵜鶘)、哈登(火箭)、巴特勒(森林狼)、唐斯(森林狼)、杜蘭特(勇士)、阿爾德里奇(馬刺)、維斯布魯克(雷霆)、庫里(勇士)
東部10位:比爾(奇才)、德羅贊(猛龍)、阿德托昆博(雄鹿)、恩比德(76人)、沃爾(奇才)、樂福(騎士)、波爾津吉斯(尼克斯)、歐文(凱爾特人)、詹姆斯(騎士)、奧拉迪波(步行者)
第二種,將球隊ID作為一個Embedding特徵,變成網路輸入的一部分:
西部13位:戴維斯(鵜鶘)、格里芬(快船)、保羅(火箭)、利拉德(開拓者)、考辛斯(鵜鶘)、哈登(火箭)、巴特勒(森林狼)、唐斯(森林狼)、杜蘭特(勇士)、阿爾德里奇(馬刺)、約基奇(掘金)、維斯布魯克(雷霆)、庫里(勇士)
東部10位:比爾(奇才)、德羅贊(猛龍)、阿德托昆博(雄鹿)、恩比德(76人)、沃爾(奇才)、樂福(騎士)、波爾津吉斯(尼克斯)、歐文(凱爾特人)、詹姆斯(騎士)、奧拉迪波(步行者)
第三種,將球隊ID和球員ID都作為Embedding特徵,變成網路輸入的一部分,與第一種相比沒有變化:
西部12位:戴維斯(鵜鶘)、格里芬(快船)、保羅(火箭)、利拉德(開拓者)、考辛斯(鵜鶘)、哈登(火箭)、巴特勒(森林狼)、唐斯(森林狼)、杜蘭特(勇士)、阿爾德里奇(馬刺)、維斯布魯克(雷霆)、庫里(勇士)
東部10位:比爾(奇才)、德羅贊(猛龍)、阿德托昆博(雄鹿)、恩比德(76人)、沃爾(奇才)、樂福(騎士)、波爾津吉斯(尼克斯)、歐文(凱爾特人)、詹姆斯(騎士)、奧拉迪波(步行者)
使用原始特徵,三種結構的差異並不大,不過,看起來還算靠譜。
再看使用歸一化特徵的結果:
第一種結構:
西部10位:戴維斯(鵜鶘)、利拉德(開拓者)、考辛斯(鵜鶘)、哈登(火箭)、巴特勒(森林狼)、唐斯(森林狼)、杜蘭特(勇士)、阿爾德里奇(馬刺)、維斯布魯克(雷霆)、庫里(勇士)
東部12位:霍福德(凱爾特人)、西蒙斯(76人)、比爾(奇才)、德羅贊(猛龍)、阿德托昆博(雄鹿)、恩比德(76人)、沃爾(奇才)、樂福(騎士)、波爾津吉斯(尼克斯)、歐文(凱爾特人)、詹姆斯(騎士)、奧拉迪波(步行者)
第二種結構,加進球隊ID的Embedding:
西部12位:戴維斯(鵜鶘)、利拉德(開拓者)、保羅(火箭)、考辛斯(鵜鶘)、哈登(火箭)、巴特勒(森林狼)、唐斯(森林狼)、杜蘭特(勇士)、阿爾德里奇(馬刺)、維斯布魯克(雷霆)、庫里(勇士)、喬治(雷霆)
東部11位:德拉蒙德(活塞)、比爾(奇才)、德羅贊(猛龍)、阿德托昆博(雄鹿)、恩比德(76人)、沃爾(奇才)、樂福(騎士)、波爾津吉斯(尼克斯)、歐文(凱爾特人)、詹姆斯(騎士)、奧拉迪波(步行者)
相對於第一種,保羅和德拉蒙德應該受益於當前球隊戰績較好,入圍了最終的結果。
第三種結構,再加進球員ID的Embedding:
西部14位:戴維斯(鵜鶘)、利拉德(開拓者)、格里芬(快船)、安東尼(雷霆)、保羅(火箭)、考辛斯(鵜鶘)、哈登(火箭)、巴特勒(森林狼)、唐斯(森林狼)、杜蘭特(勇士)、阿爾德里奇(馬刺)、維斯布魯克(雷霆)、庫里(勇士)、喬治(雷霆)
東部14位:德拉蒙德(活塞)、西蒙斯(76人)、比爾(奇才)、塔圖姆(黃蜂)、德羅贊(猛龍)、阿德托昆博(雄鹿)、恩比德(76人)、洛瑞(猛龍)、沃爾(奇才)、樂福(騎士)、波爾津吉斯(尼克斯)、歐文(凱爾特人)、詹姆斯(騎士)、奧拉迪波(步行者)
在加進球員ID後,幾個比較常入選的,包括格里芬和安東尼,被判斷為可以入選全明星的球員,這也符合我們的預期。
綜合以上結果,按照預測出現的次數進行投票,我可以大膽猜測,今年能進全明星的名單如下:
西部12位:哈登、庫里、杜蘭特(11,全中)、阿爾德里奇、利拉德、維斯布魯克(10)、巴特勒(9)、唐斯、考辛斯、戴維斯(8)、格里芬、保羅(7)
東部12位:歐文、詹姆斯、阿德托昆博、奧拉迪波(11,全中)、波爾津吉斯、恩比德(10)、樂福、德羅贊(9)、比爾、沃爾(8)、德拉蒙德(6)、洛瑞(5)
當然,以上分析純屬娛樂,各位看完可以一笑了之。
推薦閱讀:
※就是它了-結合自己興趣與事業發展的新方向
※SQL初級數據分析(基於Microsoft Access)
※R語言實戰—02-創建數據集
※數據篇(1):數據分析
※【數據分析】中文筆記翻譯計劃順利結束