PUBG_Mobile:隨機森林+邏輯回歸

項目描述:

kaggle上的絕地求生游戲數(shù)據(jù)氛堕,數(shù)據(jù)一共4446966條立肘,共計47965場比賽边坤,玩家ID沒有明確標(biāo)示,參與人數(shù)未知

分析可視化思路:

微信截圖_20230517222903.png

數(shù)據(jù)字典:

微信圖片_20230517224222.png

加載數(shù)據(jù)谅年,查看數(shù)據(jù)情況

data = pd.read_csv(r'.\PUBG_Mobile\data\train_V2.csv')
data.describe()
data.info()
微信截圖_20230517223225.png

共計29個字段茧痒,僅有一條缺失值
剔除可能開掛數(shù)據(jù),異常值

 # 剔除可能開掛的數(shù)據(jù),只有一條空數(shù)據(jù)融蹂,直接刪除
data.dropna(inplace=True)
# 殺敵數(shù)大于20
df1 = data[data.DBNOs<=20]
# 剔除在車上殺敵大于3人
df2 = df1[df1.roadKills<=3]
# 沒移動就完成擊殺
df3 = df2[~((df2.walkDistance==0)&(df2.DBNOs>0))]
# 剔除殺敵數(shù)大于3且爆頭率為1的數(shù)據(jù)
data_ed = df3[~((df3.kills>3)&(df3.kills==df3.headshotKills))]
# 玩家ID沒標(biāo)示
print(len(data_ed),data_ed['Id'].nunique(),data_ed.matchId.nunique())

具體分析思路旺订,從分布→排名→吃雞
1.在一局游戲中,玩家自己所受到的傷害

fig, (ax1, ax2) = plt.subplots(1, 2)
fig.set_figwidth(15)
sns.distplot(data_ed['damageDealt'], ax=ax1)
sns.boxplot(data_ed['damageDealt'], ax=ax2)
plt.show()
output_12_0.png

從上圖可以看出超燃,一局游戲一般玩家受到的傷害0-500
2.擊倒人數(shù)分布情況

plt.figure(dpi=300,figsize=(24,8))
plt.hist(data_ed.DBNOs)
plt.show()
output_7_0.png

哈哈区拳,大部分人都很善良,未曾擊倒1人
3.擊殺人數(shù)與玩家排名的關(guān)系

# 擊倒人數(shù)與當(dāng)場游戲排名的關(guān)系
plt.figure(figsize= (24, 8),dpi=300)
df4 = data_ed[['DBNOs', 'winPlacePerc']]
sns.set(style="darkgrid")
g = sns.relplot(data=df4,x="DBNOs", y="winPlacePerc",height=8,linewidth=2,aspect=1.3, kind="line")
plt.title('DBNOs / winPlacePerc', fontsize=15)
g.fig.autofmt_xdate()
output_11_1.png

4.擊倒人數(shù)與游戲排名

# 單變量分析:擊殺人數(shù)與玩家排名的關(guān)系
df4 = data_ed[['kills', 'rankPoints']]
plt.figure(figsize= (30, 10))
sns.set(style="darkgrid")
g = sns.relplot(data=df4,x="kills", y="rankPoints",height=8,linewidth=2,aspect=1.3, kind="line")
g.fig.autofmt_xdate()
output_9_1.png

ELo分1000為中間點意乓,得分達(dá)到1000以上樱调,同時擊殺人數(shù)需超過30人
5.每種組隊模式的獲勝概率(單排/雙排/四排)

# 查看每種組隊模式的獲勝概率(單排/雙排/四排)
df_matchType_no1 = data_ed[data_ed.winPlacePerc==1].groupby(['matchType']).agg('matchType','count')
df_matchType = data_ed.groupby(['matchType']).agg('matchType','count')
df_matchType_win = pd.merge(df_matchType,df_matchType_no1,left_index=True, right_index=True)
df_matchType_win['勝率'] = df_matchType_win['count']/df_matchType_win[count']
plt.figure(dpi=300,figsize=(24,8))
plt.bar(df_matchType_win.index,df_matchType_win['勝率'])
plt.xticks(rotation=30)
plt.show()
output_14_0.png

從結(jié)果來看,四排的吃雞概率是最高1.4%
6.步行距離與吃雞的關(guān)系

# 用步行距離與吃雞的關(guān)系walkDistance  /winPlacePerc
df_ride = data_ed[['walkDistance', 'winPlacePerc']]
labels=["0k-1k", "1k-2k", "2k-3k", "3k-4k","4k-5k", "5k-6k", "6k-7k", "7k-8k"]

df_ride['walkDistance_cut'] = pd.cut(df_ride['walkDistance'], 8, labels=labels) # pd.cut , 分割pandas 為10個等距子表
df_ride.groupby('walkDistance_cut').winPlacePerc.mean().plot.bar(rot=30, figsize=(24, 8))
plt.xlabel("walkDistance_cut")
plt.ylabel("winPlacePerc")
output_17_1.png

7.載具移動的距離與吃雞的關(guān)系

# 用載具移動的距離與吃雞的關(guān)系rideDistance /winPlacePerc 
df_ride = data_ed.loc[data_ed['rideDistance']<10000, ['rideDistance', 'winPlacePerc']]
labels=["0k-1k", "1k-2k", "2k-3k", "3k-4k","4k-5k", "5k-6k", "6k-7k", "7k-8k"]

df_ride['drive'] = pd.cut(df_ride['rideDistance'], 8, labels=labels) # pd.cut , 分割pandas 為10個等距子表
df_ride.groupby('drive').winPlacePerc.mean().plot.bar(rot=30, figsize=(24, 8))
plt.xlabel("rideDistance")
plt.ylabel("winPlacePerc")
output_16_1.png

8.增益物品與吃雞的關(guān)系

# 用增益物品與吃雞的關(guān)系boosts/winPlacePerc
df4 = data_ed[['boosts', 'winPlacePerc']]
plt.figure(figsize= (30, 10))
sns.set(style="darkgrid")
g = sns.relplot(data=df4,x="boosts", y="winPlacePerc",height=8,linewidth=2,aspect=1.3, kind="line")
g.fig.autofmt_xdate()
output_18_1.png

多變量相關(guān)性

#刪除與建模無關(guān)的字段Id groupId matchId matchType
data_m = data.drop(['Id', 'groupId', 'matchId', 'matchType'],axis=1)
matrix = data_m.corr()
cmap = sns.diverging_palette(250, 15, s=70, l=75, n=40, center="light", as_cmap=True)
plt.figure(figsize=(24, 12)) 
sns.heatmap(matrix,  center=0, annot=True,fmt='.2f', square=True, cmap=cmap)
output_20_1.png

以winplaceperc出發(fā)届良,相關(guān)性比較強的,玩家步行距離笆凌、使用增益物品的數(shù)量,與殺死玩家的數(shù)量為負(fù)相關(guān)
劃分?jǐn)?shù)據(jù)集

y = data_m['winPlacePerc'].values
x = data_m.drop(columns=['winPlacePerc']).values
xtrain,xtest,ytrain,ytest = train_test_split(x,y,test_size=0.3)

線性回歸

# 線性回歸
reg = LR().fit(xtrain,ytrain)
y_hat = reg.predict(xtest)

隨機森林

# 隨機森林
rfc = RandomForestClassifier(random_state=0)
rfc = rfc.fit(xtrain,ytrain.astype('int64'))
rfc_y_hat = rfc.predict(xtest)
# score_r = rfc.score(xtest,ytest.astype('int64'))

分別以RMSE士葫、MSE乞而、R方以及MAE,用以評估回歸模型的精度

# 線性回歸
MSE = metrics.mean_squared_error(ytest, y_hat)
RMSE = metrics.mean_squared_error(ytest, y_hat)**0.5
MAE = metrics.mean_absolute_error(ytest, y_hat)
MSE,RMSE,MAE,

mse=0.016028860503889776, rmse=0.126605136167099378,mae=0.09272709032057316

#隨機森林
MSE = metrics.mean_squared_error(ytest, rfc_y_hat)
RMSE = metrics.mean_squared_error(ytest, rfc_y_hat)**0.5
MAE = metrics.mean_absolute_error(ytest, rfc_y_hat)
MSE,RMSE,MAE,

mse=0.014725708056613685,rmse=0.12134952845649498, mae=0.08928706404803585

借鑒

https://codeantenna.com/a/Rn2nLom4jT
http://www.reibang.com/p/57c0f0266c10
https://www.heywhale.com/mw/project/63f19d69030c7011ddd54ab7

?著作權(quán)歸作者所有,轉(zhuǎn)載或內(nèi)容合作請聯(lián)系作者
  • 序言:七十年代末慢显,一起剝皮案震驚了整個濱河市爪模,隨后出現(xiàn)的幾起案子,更是在濱河造成了極大的恐慌荚藻,老刑警劉巖呻右,帶你破解...
    沈念sama閱讀 222,183評論 6 516
  • 序言:濱河連續(xù)發(fā)生了三起死亡事件,死亡現(xiàn)場離奇詭異鞋喇,居然都是意外死亡声滥,警方通過查閱死者的電腦和手機,發(fā)現(xiàn)死者居然都...
    沈念sama閱讀 94,850評論 3 399
  • 文/潘曉璐 我一進(jìn)店門,熙熙樓的掌柜王于貴愁眉苦臉地迎上來落塑,“玉大人纽疟,你說我怎么就攤上這事『读蓿” “怎么了污朽?”我有些...
    開封第一講書人閱讀 168,766評論 0 361
  • 文/不壞的土叔 我叫張陵,是天一觀的道長龙考。 經(jīng)常有香客問我蟆肆,道長,這世上最難降的妖魔是什么晦款? 我笑而不...
    開封第一講書人閱讀 59,854評論 1 299
  • 正文 為了忘掉前任炎功,我火速辦了婚禮,結(jié)果婚禮上缓溅,老公的妹妹穿的比我還像新娘蛇损。我一直安慰自己,他們只是感情好坛怪,可當(dāng)我...
    茶點故事閱讀 68,871評論 6 398
  • 文/花漫 我一把揭開白布淤齐。 她就那樣靜靜地躺著,像睡著了一般袜匿。 火紅的嫁衣襯著肌膚如雪更啄。 梳的紋絲不亂的頭發(fā)上,一...
    開封第一講書人閱讀 52,457評論 1 311
  • 那天居灯,我揣著相機與錄音祭务,去河邊找鬼。 笑死穆壕,一個胖子當(dāng)著我的面吹牛待牵,可吹牛的內(nèi)容都是我干的其屏。 我是一名探鬼主播喇勋,決...
    沈念sama閱讀 40,999評論 3 422
  • 文/蒼蘭香墨 我猛地睜開眼,長吁一口氣:“原來是場噩夢啊……” “哼偎行!你這毒婦竟也來了川背?” 一聲冷哼從身側(cè)響起,我...
    開封第一講書人閱讀 39,914評論 0 277
  • 序言:老撾萬榮一對情侶失蹤蛤袒,失蹤者是張志新(化名)和其女友劉穎熄云,沒想到半個月后,有當(dāng)?shù)厝嗽跇淞掷锇l(fā)現(xiàn)了一具尸體妙真,經(jīng)...
    沈念sama閱讀 46,465評論 1 319
  • 正文 獨居荒郊野嶺守林人離奇死亡缴允,尸身上長有42處帶血的膿包…… 初始之章·張勛 以下內(nèi)容為張勛視角 年9月15日...
    茶點故事閱讀 38,543評論 3 342
  • 正文 我和宋清朗相戀三年,在試婚紗的時候發(fā)現(xiàn)自己被綠了。 大學(xué)時的朋友給我發(fā)了我未婚夫和他白月光在一起吃飯的照片练般。...
    茶點故事閱讀 40,675評論 1 353
  • 序言:一個原本活蹦亂跳的男人離奇死亡矗漾,死狀恐怖,靈堂內(nèi)的尸體忽然破棺而出薄料,到底是詐尸還是另有隱情敞贡,我是刑警寧澤,帶...
    沈念sama閱讀 36,354評論 5 351
  • 正文 年R本政府宣布闲勺,位于F島的核電站乱凿,受9級特大地震影響穷娱,放射性物質(zhì)發(fā)生泄漏。R本人自食惡果不足惜蛔垢,卻給世界環(huán)境...
    茶點故事閱讀 42,029評論 3 335
  • 文/蒙蒙 一、第九天 我趴在偏房一處隱蔽的房頂上張望歌懒。 院中可真熱鬧啦桌,春花似錦、人聲如沸及皂。這莊子的主人今日做“春日...
    開封第一講書人閱讀 32,514評論 0 25
  • 文/蒼蘭香墨 我抬頭看了看天上的太陽验烧。三九已至板驳,卻和暖如春,著一層夾襖步出監(jiān)牢的瞬間碍拆,已是汗流浹背若治。 一陣腳步聲響...
    開封第一講書人閱讀 33,616評論 1 274
  • 我被黑心中介騙來泰國打工, 沒想到剛下飛機就差點兒被人妖公主榨干…… 1. 我叫王不留感混,地道東北人端幼。 一個月前我還...
    沈念sama閱讀 49,091評論 3 378
  • 正文 我出身青樓,卻偏偏與公主長得像弧满,于是被迫代替她去往敵國和親婆跑。 傳聞我的和親對象是個殘疾皇子,可洞房花燭夜當(dāng)晚...
    茶點故事閱讀 45,685評論 2 360

推薦閱讀更多精彩內(nèi)容