前言
这是机器学习系列的第三篇文章,对于住房租金预测比赛的总结这将是最后一篇文章了,比赛持续一个月自己的总结竟然也用了一个月,牵强一点来说机器学习也将会是一个漫长的道路,后续机器学习的文章大多数以知识科普为主,毕竟自己在机器学习这个领域是个渣渣,自己学到的新知识点会分享给大家的。
前面的文章谈了谈这次比赛非技术方面的收获,对数据集的初步了解和特征工程的处理,今天主要介绍这次使用的模型--XGBOOST。
XGBOOST模型介绍
关于xgboost的原理网络上的资源很少,大多数还停留在应用层面,自己也是仅仅学习了一点应用,关于原理可以参考陈天奇博士的这篇文章
https://xgboost.readthedocs.io/en/latest/tutorials/model.html。
简单介绍:
XGBOOST是一个监督模型,xgboost对应的模型本质是一堆CART树。用一堆树做预测,就是将每棵树的预测值加到一起作为最终的预测值。下图就是CART树和一堆CART树的示例,用来判断一个人是否会喜欢计算机游戏:
第二张图明了如何用一堆CART树做预测,就是简单将各个树的预测分数相加。
参数介绍:
官方参数介绍看这里:https://xgboost.readthedocs.io/en/latest/parameter.html#general-parameters
比较重要的参数介绍:
“reg:linear”–线性回归。“reg:logistic”–逻辑回归。“binary:logistic”–二分类的逻辑回归问题,输出为概率。“binary:logitraw”–二分类的逻辑回归问题,输出的结果为wTx。
“count:poisson”–计数问题的poisson回归,输出结果为poisson分布。在poisson回归中,max_delta_step的缺省值为0.7。(usedtosafeguardoptimization)
“multi:softmax”–让XGBoost采用softmax目标函数处理多分类问题,同时需要设置参数num_class(类别个数)
“multi:softprob”–和softmax一样,但是输出的是ndata*nclass的向量,可以将该向量reshape成ndata行nclass列的矩阵。没行数据表示样本所属于每个类别的概率。
lambda[default=0]L2正则的惩罚系数alpha[default=0]L1正则的惩罚系数
lambda_bias在偏置上的L2正则。缺省值为0(在L1上没有偏置项的正则,因为L1时偏置不重要)
eta[default=0.3]为了防止过拟合,更新过程中用到的收缩步长。在每次提升计算之后,算法会直接获得新特征的权重。eta通过缩减特征的权重使提升计算过程更加保守。取值范围为:[0,1]
max_depth[default=6]数的最大深度。缺省值为6,取值范围为:[1,∞]
min_child_weight[default=1]孩子节点中最小的样本权重和。如果一个叶子节点的样本权重和小于min_child_weight则拆分过程结束。在现行回归模型中,这个参数是指建立每个模型所需要的最小样本数。该成熟越大算法越conservative取值范围为:[0,∞]
xgboost参数设置的代码示例:
1xgboost参数设置代码示例:23#划分数据集4X_train,X_test,y_train,y_test=train_test_split(X,y,test_size=0.01,random_state=1729)5print(X_train.shape,X_test.shape)67#模型参数设置8xlf=xgb.XGBRegressor(max_depth=10,9learning_rate=0.1,10n_estimators=10,11silent=True,12objective='reg:linear',13nthread=-1,14gamma=0,15min_child_weight=1,16max_delta_step=0,17subsample=0.85,18colsample_bytree=0.7,19colsample_byl