首页 >> 大全

快来一起挖掘幸福感--新人实战--阿里云天池

2023-10-04 大全 25 作者:考证青年

学习内容概括:

本赛题尝试了幸福感预测这一经典课题,希望在现有社会科学研究外有其他维度的算法尝试,结合多学科各自优势,挖掘潜在的影响因素,发现更多可解释、可理解的相关关系。跟着赛事论坛中的完成比赛。

学习内容:

特征工程

模型训练

模型融合

特征工程:

数据来源:数据来自中国人民大学中国调查与数据中心主持之《中国综合社会调查(CGSS)》项目。感谢此机构及其人员提供数据协助。中国综合社会调查为多阶分层抽样的截面面访调查。

考虑到变量个数较多,部分变量间关系复杂,数据分为完整版和精简版两类。可从精简版入手熟悉赛题后,使用完整版挖掘更多信息。文件为变量完整版数据,abbr文件为变量精简版数据。

本次特征工程采用的是完整版数据。

对如下的变量,数据清洗和处理,如果值小于0的,进行填充0处理。

对如下变量,根据含义,如果值小于0的进行填充1处理。

对如下变量,根据含义,如果值小于0的进行填充2处理。

对如下变量,根据含义,如果值小于0的统一进行填充nan处理。

新增特征处理这里需要注意的是,调查问卷是2015年出的,计算出年龄,并且根据年龄分组计算个人、家庭等的平均收入作为新特征。

#调查年龄
data['survey_age'] = 2015-data['birth']

根据年龄分组如下:

data['age_income_mean'] = data.groupby(['survey_age'])['income'].transform('mean').values
data['age_family_income_mean'] = data.groupby(['survey_age'])['family_income'].transform('mean').values
data['age_equity_mean'] = data.groupby(['survey_age'])['equity'].transform('mean').values
data['age_depression_mean'] = data.groupby(['survey_age'])['depression'].transform('mean').values
data['age_floor_area_mean'] = data.groupby(['survey_age'])['floor_area'].transform('mean').values
data['age_edu_mean'] = data.groupby(['survey_age'])['edu'].transform('mean').values
data['age_health_mean'] = data.groupby(['survey_age'])['health'].transform('mean').values

根据年龄和性别同时分组取平均的个人、家庭等收入新增的特征如下:

data['age_gender_income_mean'] = data.groupby(['survey_age','gender'])['income'].transform('mean').values
data['age_gender_family_income_mean'] = data.groupby(['survey_age','gender'])['family_income'].transform('mean').values
data['age_gender_equity_mean'] = data.groupby(['survey_age','gender'])['equity'].transform('mean').values
data['age_gender_depression_mean'] = data.groupby(['survey_age','gender'])['depression'].transform('mean').values
data['age_gender_floor_area_mean'] = data.groupby(['survey_age','gender'])['floor_area'].transform('mean').values
data['age_gender_health_mean'] = data.groupby(['survey_age','gender'])['health'].transform('mean').values
data['age_gender_edu_mean'] = data.groupby(['survey_age','gender'])['edu'].transform('mean').values

模型训练:

本竞赛是连续性变量的预测,评测指标如下,测试值与真实值的偏差大小作为衡量标准。

尝试使用模型和模型。

是集合模型中的新进成员,由微软提供,它和一样是对GBDT的高效实现,原理上它和GBDT及类似,都采用损失函数的负梯度作为当前决策树的残差近似值,去拟合新的决策树。

from sklearn.metrics import roc_auc_score, roc_curve, mean_squared_error,mean_absolute_error, f1_score
import lightgbm as lgb
import xgboost as xgb
import os
from sklearn.linear_model import BayesianRidge
from sklearn.model_selection import  KFold, StratifiedKFold,GroupKFold, RepeatedKFold

在进行模型训练之前,需要对nan数据进行处理。

data.fillna(-1,inplace=True)
data.head()

快来一起挖掘幸福感--新人实战--阿里云天池_快来一起挖掘幸福感--新人实战--阿里云天池_

采用了10折叠的交叉验证

folds = KFold(n_splits=10, shuffle=True, random_state=1016)   #StratifiedKFold?   KFold

: 表示冗长的意思,很多模块都有类似名字的参数,eval是英文评估的缩写;所以在在这里就是表达是否要详细显示评估信息的参数。举个栗子,我将这个参数设置为10,那就则每隔10次迭代输出一次评估结果——评估结果就是正确率召回率这些指标。也可以给这个参数传True or False,比如,False,则评估结果不会输出。

s提供了一种自动查找()最佳值的方法。当验证分数停止改进时,过早地停止会导致模型还没达到就停止迭代。明智的做法是为()设置一个较大的值,然后使用s来找到停止迭代的最佳时间。

clf = lgb.train(param, trn_data, num_round, valid_sets = [trn_data, val_data], verbose_eval=200, early_stopping_rounds = 200)

clf = xgb.train(dtrain=trn_data, num_boost_round=20000, evals=watchlist, early_stopping_rounds=200, verbose_eval=100, params=xgb_params)

问题记录:

问题1.编程时遇到这样的问题,().mode().意思是剔除该列中含缺失值的行,并将该列中出现次数最多的值赋予大于6的那行,mode()函数就是取出现次数最多的元素。就是用众数替换。但是报错了。

查看().mode().返回的值,都是只有一个数的数组。所以按说不会出现 than the value的问题。可能是此版本的原因。

改为如下,返回众数的第一个元素值,不再是返回一个元素的数组,问题解决。

data.loc[data['public_service_'+str(i)]<0,'public_service_'+str(i)] = data['public_service_'+str(i)].dropna().mode()[0]

问题2.对于悠闲指数,满意指数,信任指数等特征,个人理解应该使用均值(mean)衡量而不是和(sum)衡量。

问题3.数据集中包含了受访者的身高与体重。只凭体重的名义数值是不能够判断一个人的胖瘦程度的。国际上常用BMI指数衡量人的胖瘦和健康程度,我们可以将数据集中的体重转换为BMI指数再做分析。

学习总结:

经过对特征的部分改动,分数稍高于的分数,但是仍有提升空间,包括特征的筛选后再训练。特征也有再进行处理的空间。也可尝试其他模型比如XGBT等训练尝试,再进行模型融合看是否还有提高。

关于我们

最火推荐

小编推荐

联系我们


版权声明:本站内容由互联网用户自发贡献,该文观点仅代表作者本人。本站仅提供信息存储空间服务,不拥有所有权,不承担相关法律责任。如发现本站有涉嫌抄袭侵权/违法违规的内容, 请发送邮件至 88@qq.com 举报,一经查实,本站将立刻删除。备案号:桂ICP备2021009421号
Powered By Z-BlogPHP.
复制成功
微信号:
我知道了