数据:
这是一个足球网站的数据,每一行代表一个球员,分别对应二十多个属性。league该球员所在的联赛。已被编码。birth_date生日。格式为月/日/年。height_cm身高(厘米)weight_kg体重(公斤)nationality国籍。已被编码。potential球员的潜力。数值变量。pac球员速度。数值变量。sho射门(能力值)。数值变量。pas传球(能力值)。数值变量。dri带球(能力值)。数值变量。def防守(能力值)。数值变量。phy身体对抗(能力值)。数值变量。international_reputation国际知名度。数值变量。skill_moves技巧动作。数值变量。weak_foot非惯用脚的能力值。数值变量。work_rate_att球员进攻的倾向。分类变量,Low, Medium, High。work_rate_def球员防守的倾向。分类变量,Low, Medium, High。preferred_foot惯用脚。1表示右脚、2表示左脚。crossing传中(能力值)。数值变量。从crossing到gk_reflexes均表示具体的某项能力的数值。rw球员在右边锋位置的能力值。数值变量。rb球员在右后卫位置的能力值。数值变量。st球员在射手位置的能力值。数值变量。lw球员在左边锋位置的能力值。数值变量。cf球员在锋线位置的能力值。数值变量。cam球员在前腰位置的能力值。数值变量。cm球员在中场位置的能力值。数值变量。cdm球员在后腰位置的能力值。数值变量。cb球员在中后卫的能力值。数值变量。lb球员在左后卫置的能力值。数值变量。gk球员在守门员的能力值。数值变量。y该球员的市场价值(单位为万欧元)。这是要被预测的数值。
然而数据倒数第一列(A)和倒数(2,3,4,56)(B)之间有一个问题,A有值,B就是缺失值,B有值,A成了缺失值。
每隔10行左右会出现这样的情况。因此删失缺失值是行不通的。
结合数据变量的定义我决定用rw-lb的和的均值来替代gb,然后这几列只让gk进入模型。
看以看到用fillna函数来填充。然后删掉这几列。
然后对数据中的几列文本型离散变量替换成数值型。
分别对train 和test两个csv都处理。
这是最基本的几个函数,我就不细讲了。
接着对因变量y进行观测。
数据呈现明显的左偏分布。
数据峰度偏左,偏态分布。因此对y进行数学变换。ln变换。
通过对数变换,分布更接近正态了。
·检测y与各自变量的相关性。
可以看到这里降序输出了自变量与y的相关性,不过这里相关性是简单线性,变量之间可能不是简单的线性关系,所以要慎重。
现在数据是齐全了,按理可以用xgb直接进行预测。我试了一下,效果很差。
那么说明垃圾变量太多,或者变量之间存在多重共线性。
于是我决定用lasso来挑选特征。这个以前叫adaptivelasso。采用的是lasso最小角回归求解,但后来这个模型被删掉了,查官方文档,发现lasso下共有四个模型,lasso,lassolars,lassolarscv,和lassocv,而lars正是最小角回归。
那就开始做,
简单介绍一下这段代码,xy就是数据变量,转换为矩阵,然后是lassolarscv,coef则是输出权重系数,返回一个列表,对于剔除掉的变量系数为显示为0。
对列表内的权重系数进行不为0的判断,会返回一歌全是布尔值的列表。然后把x的列名称和布尔值列表作为筛选条件就会删去lassolarscv中系数权重为0的变量。
筛选完了,那么我们拿到xgb里跑就可以了。
这是对test的预测,MAE值为54.多。
当然这也是最简单的探索,后期要重新做更细致的特征工程。
最后提一下,MAE。就是用预测值-真实值,取绝对值,然后求means。
在拿模型在train排、跑肯定要比在test上效果要好一点。48.多。
版权声明
本文仅代表作者观点,不代表xx立场。
本文系作者授权xx发表,未经许可,不得转载。
评论列表
发表评论