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


尝试使用模型和模型 。
是集合模型中的新进成员,由微软提供,它和一样是对GBDT的高效实现,原理上它和GBDT及类似,都采用损失函数的负梯度作为当前决策树的残差近似值,去拟合新的决策树 。
from sklearn.metrics import roc_auc_score, roc_curve, mean_squared_error,mean_absolute_error, f1_scoreimport lightgbm as lgbimport xgboost as xgbimport osfrom sklearn.linear_model import BayesianRidgefrom sklearn.model_selection importKFold, 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等训练尝试,再进行模型融合看是否还有提高 。