我是谁?雪拉比
![4d7245c506e11ec3afed38c75c6c33aa.png](https://i-blog.csdnimg.cn/blog_migrate/8ce70ef075f26671bad68fb702c9b745.jpeg)
模型保存
(1)Pickle保存
pickle.dump()保存模型,训练完的模型就可以进行保存。内部参数需要用到open函数
![1dabc13c2c63417c42b02db2ccf68e1f.png](https://i-blog.csdnimg.cn/blog_migrate/cc0927871560a0e5125a22e6c24039ce.png)
模型保存在当前目录下
![fad4d948520f7140c6e921ae45b3f1b6.png](https://i-blog.csdnimg.cn/blog_migrate/2a59edc20cbf7168d8b8ad3e80f3ba94.jpeg)
导入模型pickle.load,还是需要参数open
![11201df02bb18d36e9bf25a22730799b.png](https://i-blog.csdnimg.cn/blog_migrate/cc15739f179053aef074b935768578aa.jpeg)
模型预测结果与存储前模型预测结果将是一致的
![f475e909d5b910a60a5aee43df93222b.png](https://i-blog.csdnimg.cn/blog_migrate/883447d6d864f95fa1f9e1e61fb59454.png)
(2)Joblib保存
Joblib是SciPy生态系统中的一部分,为Python提供保存和调用管道和对象的功能,处理NumPy结构的数据尤其高效,对于很大的数据集和巨大的模型非常有用。
保存和读取依然是dump和load,但参数不需要用open函数了
![e82b025c959582fda4edc85221845294.png](https://i-blog.csdnimg.cn/blog_migrate/ba00aea76322f560241ccfda8556eb3e.jpeg)
结果与用pickle保存后读取的模型结果一模一样
![2db1b06e43ac8a0cd458e2d80d75b328.png](https://i-blog.csdnimg.cn/blog_migrate/831e3e006284e9b510de199a6cea62f3.png)
保存sklearnAPI的xgb,结果稍差一些
![6fee24f6ba28e373b236ecb4668dfbbe.png](https://i-blog.csdnimg.cn/blog_migrate/27546301e8f150c5849fdcca7cfe771b.jpeg)
![e493a83dfa22c1c1bce3603ae07431a0.png](https://i-blog.csdnimg.cn/blog_migrate/a8f77c85cf3f9c38be49a6ce55d04a0f.jpeg)
XGB中样本不均衡问题
在用xgb进行分类任务时,若是样本不均衡,可以用参数scale_pos_weight调节,一般输入的是负样本量与正样本量之比。
![363e7f1293e74f3f8b3798c9e368d7da.png](https://i-blog.csdnimg.cn/blog_migrate/3f14db07b3d9557ba09a8baab3c495f3.png)
构建一个不平衡的数据
![5ba3822f809d698cf8e8d0eaedf1697f.png](https://i-blog.csdnimg.cn/blog_migrate/6f997a54f28bba69e8465dd27f8b51e0.jpeg)
在不调节控制不均衡数据的参数时,召回率比较低
![138a962465a3f7d46c820e7bdd184a5f.png](https://i-blog.csdnimg.cn/blog_migrate/40dc801b117bc2b534eff05dc1b48a27.png)
调节控制不均衡的参数后,准确率和召回率升高,AUC略降低
![afb0ee8dd762b6241b8df2ad2bae088f.png](https://i-blog.csdnimg.cn/blog_migrate/5c0f6b3783dc969cba21281f13615687.png)
搜索参数后,发现30是最好的,虽然数据比例是10:1,但从结果上来看,参数调整成30结果最佳。
![95fcd65203b1b7f062a8e43ba571cd97.png](https://i-blog.csdnimg.cn/blog_migrate/73ace139a28484cd329318e9753db993.jpeg)
用xgb控制不平衡数据
xgb预测分类的结果是以概率值进行输出的
![ce514321abf2f32d49ef76cdfb929a17.png](https://i-blog.csdnimg.cn/blog_migrate/100c24d05a0c169dbd15b63f1a2b77f4.jpeg)
人为划分,按0.5
![a8373e1d57d3c9ae676a341dbea5df0c.png](https://i-blog.csdnimg.cn/blog_migrate/37cbe80db7ef3eb04bcffd004bcd4eb5.jpeg)
搜索不同scale_pos_weight下结果如何
![d865b386b073e1d8d78b1c3506a358c6.png](https://i-blog.csdnimg.cn/blog_migrate/20d4fe7841424372b7259538191901d6.jpeg)
可以发现,如果只看AUC指标的话,默认1的scale_pos_weight最好,如果需要考虑召回率和准确率则需要采用10。
![8dcbce101ff6162445bb0d9698b9e18a.png](https://i-blog.csdnimg.cn/blog_migrate/63dd6dbe4a289f807bdf7ba41ec105bd.png)
同时考虑scale_pos_weight和之前划分的阈值
![571816913200fde9a8b4eedc9531f0c7.png](https://i-blog.csdnimg.cn/blog_migrate/747612920e3330bcfca22aa5edb38b0d.jpeg)
![9ec0ee1498754661a31f34bcb8ee6c99.png](https://i-blog.csdnimg.cn/blog_migrate/dbead46a8a11314c7031f4af17136bd9.jpeg)
除了参数scale_pos_weight外,还有max_delta_step可以处理不均衡数据的问题,如果十分在意得到正确的预测概率,可以设置max_delta_step参数为一个有限的数(比如1)来帮助收敛。max_delta_step参数通常不进行使用,二分类下的样本不均衡问题是这个参数唯一的用途。
XGBoost类中的其他参数和功能
![e71667ac9717061e3be93e9d6f6a27ce.png](https://i-blog.csdnimg.cn/blog_migrate/efb1bc2c20bce5e3fa096568845a9820.jpeg)
n_jobs:输入整数表示使用的线程,输入-1表示使用计算机全部的计算资源。如果数据量很大,则需要这个参数来调用更多线程。
base_score:全局偏差,在分类问题中,有点像是先验概率。比如有1000个样本,300个正样本,700个负样本,则base_score就是0.3;回归中默认是0.5,其实比较合适的应该是标签的均值,通常不太适用,数据不平衡时考虑使用。
random_state:生成树的随机模式
missing:自动处理缺失值,默认会把所有缺失值当作稀疏矩阵中的0来进行处理,如果能手动填补自然最好。