足球运动员身价估计(随机森林)

背景介绍
每个足球运动员在转会市场都有各自的价码。本次数据练习的目的是根据球员的各项信息和能力值来预测该球员的市场价值。
数据来源
下载源(数据经过脱敏加工)以及变量说明

  • train.csv 训练集,文件大小 2.20mb
  • test.csv 预测集, 文件大小 1.44kb
  • sample_submit.csv 提交示例 文件大小 62kb

评价方法
评价标准为MAE(Mean Absolute Error)。
比如若真实值为y=(y1,y2,⋯,yn),模型的预测值为y=(y1,y2,⋯,yn),那么该模型的MAE计算公式为
MAE=(∑ni=1|yi−y^i|)/n.
例如,真实值y=(15,20,12),预测值y^=(17,24,9),那么这个预测结果的MAE为
MAE=(|15−17|+|20−24|+|12−9|)/3=3
MAE越小,说明模型预测得越准确。

门将和非门将随机森林

import numpy as np
import pandas as pd
from datetime import date
from pandas import Series,DataFrame
from sklearn.ensemble import RandomForestRegressor


#读取数据
train=pd.read_csv('data/train.csv')
print(train.head())
test=pd.read_csv('data/test.csv')
sample_submit=pd.read_csv('data/sample_submit.csv')


#获得球员年龄
today=date(2019,4,24)
# print(today.year)
# print(train.columns)
#转换时间格式   10/4/96--》1996-10-04
train['birth_date']=pd.to_datetime(train['birth_date'])
train['age'] = (today.year- train['birth_date'].apply(lambda x: x.year))
# print(train['age'].head())
test['birth_date']=pd.to_datetime(test['birth_date'])
test['age'] = (today.year- test['birth_date'].apply(lambda x: x.year))
# print(test['age'].head())


#获得球员最擅长位置的评分
positions = ['rw', 'rb', 'st', 'lw', 'cf', 'cam', 'cm', 'cdm', 'cb', 'lb', 'gk']
train['best_pos']=train[positions].max(axis=1)#横向运算
test['best_pos']=test[positions].max(axis=1)
print(train[positions].head())
print(train["best_pos"].head())


#计算球员的身体脂量指数(BMI)
train['BMI']=10000*train['weight_kg']/(train['height_cm']**2)
test['BMI']=10000*test['weight_kg']/(test['height_cm']**2)
print(train['BMI'].head())


#判断一个球员是不是守门员
train['is_gk']=train['gk']>0
test['is_gk']=train['gk']>0
print(train['is_gk'].head())


#用多个变量准备随机森林训练
test['pred']=0
cols = ['height_cm', 'weight_kg','age', 'best_pos','potential', 'BMI', 'pac',
        'phy', 'international_reputation']


#用非守门员数据训练随机森林
reg_ngk = RandomForestRegressor(random_state=100)
reg_ngk.fit(train[train['is_gk'] == False][cols], train[train['is_gk'] == False]['y'])

preds = reg_ngk.predict(test[test['is_gk'] == False][cols])
test.loc[test['is_gk'] == False, 'pred'] = preds
print(preds)


#用守门员数据训练随机森林
reg_gk = RandomForestRegressor(random_state=100)
reg_gk.fit(train[train['is_gk'] == True][cols], train[train['is_gk'] == True]['y'])

preds = reg_gk.predict(test[test['is_gk'] == True][cols])
test.loc[test['is_gk'] == True,'pred'] = preds#  .loc先行后列   对数据进行切割

#输出预测值
sample_submit['y']=np.array(test['pred'])
sample_submit.to_csv('data/my_RF_prediction.csv',index=False)


评论 1
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值