XGBoost学习:

集成学习将多个弱学习器结合起来,优势互补,可以达到强学习器的效果。要想得到最好的集成效果,这些弱学习器应当“好而不同”。

根据个体学习器的生成方法,集成学习方法可以分为两大类,序列化方法,并行化方法。序列化方法的代表就是Boosting方法,其中XGBoost和lightGBN都属于此类。

Boosting的方法是先从初始训练集训练出一个基学习器。然后再对训练样本的分布做一些调整,使得前一个学习器分类错误的样本得到更多的关注,再以此训练下一个基学习器。
依次类推,最后对多个基学习器做加权结合。

XGBoost 是 Extreme Gradient Boosting 的缩写,在此先介绍下Gradient Boosting。它的逻辑是:

先利用弱学习器训练 F(x) 。
再利用 F(x) 的残差作为目标,训练 h(x)。
利用 F(x)+h(x) 的残差作为目标,训练出 m(x),以此类推。
最后 F(x)+h(x)+m(x)+… 就是最终的强学习器模型。

比如算均方误差MSE, \(\mathrm{L(y, F(x))}=\frac{1}{n} \sum \left(y-F(x)\right)^{2}\),求导得:\(\frac{\partial L}{\partial F}=- \frac{2}{n} \sum (y-F)\),残差为\((y-F)\)

\(h(x) ≈ y−F(x) = - \frac{n}{2} \frac{\partial L}{\partial F} = - \lambda \frac{\partial L}{\partial F}\)

\(H(x) = F(x) - \lambda \frac{\partial L}{\partial F}\)

和梯度下降的公式是一样的。

对于分类/回归问题的一个简单实践案例(基于sklearn toy datasets)

之前几周的博客:

第一周:初次使用Google Colab,跑了下RManofCH分享的代码,看了下效果。

第二周:数据预处理,数据可视化(初步了解训练数据分布情况),tf-idf模型调参,ngram_range=(1,4)时效果不错。

第三周:tf-idf模型调参(min_df=1, max_df=1.0时效果最好,即取全集),数据可视化(计算了训练集与测试集的差异;得出单个api的类别及数量对文件类别影响不大的结论)

第四周:ngram模型调参(二、三元的拟合效果比较好,加上一、四、五、六元之后,效果都有提升;10折验证时效果最好)

代码阅读,调参经验总结:

阅读别人的代码,可以为自己提供一些其他思路,此外可以学习到一些实际编程的技能。
不过代码一般都是为解决具体问题编写的,自己用的时候还要根据环境,根据业务场景做一些适用性修改,而且参数要自己调一下。

调参的过程中,基本就是其他参数不变,专门调某一个参数,看看结果的变化趋势,是来回震荡还是有一个收敛点,找到一个比较好的局部最优的参数。

1 - 代码修改:

比如之前针对这个比赛做模型训练的时候,第一周跑了下的是先知论坛RMaoofCH的代码,但是遇到了一个Keras版本的问题'keras.backend' has no attribute 'tf' ,后来代码做了一些修改。

2 - 参数修改:

RMaoofCH的tf-idf模型的参数为ngram_range=(1, 5), min_df=3, max_df=0.9,做5折校验。

我调参的结果是,tf-idf模型ngram_range=(1, 4), min_df=1, max_df=1.0时效果最好。
此外比tf-idf更简单的ngram模型效果要优于tf-idf,Vectorizer由TfidfVectorizer改为了CountVectorizer。
而且,经过验证,10折校验比5折校验效果要好。

参数调过一轮之后,除了tf-idf模型的结果超过了RMaoofCH的tf-idf模型的结果,ngram单模型得到的结果甚至比RMaoofCH做的模型融合的结果还要好。

【新人赛】阿里云恶意程序检测 -- 实践记录11.10 - XGBoost学习 / 代码阅读、调参经验总结的更多相关文章

  1. 【新人赛】阿里云恶意程序检测 -- 实践记录 11.24 - word2vec模型 + xgboost

    使用word2vec训练词向量 使用word2vec无监督学习训练词向量,输入的是训练数据和测试数据,输出的是每个词的词向量,总共三百个词左右. 求和:然后再将每行数据中的每个词的词向量加和,得到每行 ...

  2. 【新人赛】阿里云恶意程序检测 -- 实践记录11.3 - n-gram模型调参

    主要工作 本周主要是跑了下n-gram模型,并调了下参数.大概看了几篇论文,有几个处理方法不错,准备下周代码实现一下. xgboost参数设置为: param = {'max_depth': 6, ' ...

  3. 【新人赛】阿里云恶意程序检测 -- 实践记录10.13 - Google Colab连接 / 数据简单查看 / 模型训练

    1. 比赛介绍 比赛地址:阿里云恶意程序检测新人赛 这个比赛和已结束的第三届阿里云安全算法挑战赛赛题类似,是一个开放的长期赛. 2. 前期准备 因为训练数据量比较大,本地CPU跑不起来,所以决定用Go ...

  4. 【新人赛】阿里云恶意程序检测 -- 实践记录10.20 - 数据预处理 / 训练数据分析 / TF-IDF模型调参

    Colab连接与数据预处理 Colab连接方法见上一篇博客 数据预处理: import pandas as pd import pickle import numpy as np # 训练数据和测试数 ...

  5. 【新人赛】阿里云恶意程序检测 -- 实践记录10.27 - TF-IDF模型调参 / 数据可视化

    TF-IDF模型调参 1. 调TfidfVectorizer的参数 ngram_range, min_df, max_df: 上一篇博客调了ngram_range这个参数,得出了ngram_range ...

  6. 阿里云小程序云应用环境DIY,延长3倍免费期

    阿里云清明节前刚刚推出了小程序云应用扶持计划一期活动 (活动链接见文章底部).假期研究了下以后,发觉不太给力.基本上就是给了2个月的免费测试环境,和平均2个月的基础版生产环境.而如果选用标准版生产环境 ...

  7. 【¥200代金券、iPad等您来拿】 阿里云9大产品免费公测#10月9日-11月6日#

    #10.09-11.06#200元代金券.iPad大奖, 9大产品评测活动! 亲爱的阿里云小伙伴们: 云产品的多样性(更多的云产品)也是让用户深度使用云计算的关键.今年阿里云产品线越来越丰富,小云搜罗 ...

  8. Android手机安全软件的恶意程序检测靠谱吗--LBE安全大师、腾讯手机管家、360手机卫士恶意软件检测方法研究

    转载请注明出处,谢谢. Android系统开放,各大论坛活跃,应用程序分发渠道广泛,这也就为恶意软件的传播提供了良好的环境.好在手机上安装了安全软件,是否能有效的检测出恶意软件呢?下边针对LBE安全大 ...

  9. 阿里云centos安装docker-engine实践

    近日在阿里云ECS服务器(centos系统)中安装docker,参考官方指南 https://docs.docker.com/engine/installation/linux/centos/  大概 ...

随机推荐

  1. Java类加载器和双亲委派机制

    前言 之前详细介绍了Java类的整个加载过程(类加载机制详解).虽然,篇幅较长,但是也不要被内容吓到了,其实每个阶段都可以用一句话来概括. 1)加载:查找并加载类的二进制字节流数据. 2)验证:保证被 ...

  2. CCF_ 201409-3_字符串匹配

    水. #include<cstdio> #include<iostream> #include<cstring> using namespace std; int ...

  3. HDU 1005 Number Sequence(矩阵快速幂,快速幂模板)

    Problem Description A number sequence is defined as follows: f(1) = 1, f(2) = 1, f(n) = (A * f(n - 1 ...

  4. C# WinForm 使用SMTP协议发送QQ邮箱验证码

    文章来自:https://blog.csdn.net/IT_xiao_guang_guang/article/details/104336604 前言   在程序设计中,发送验证码是常见的一个功能,用 ...

  5. window10 vs2013 SIFTGPU

    碰到的问题: 1.一大推语法错误: 所有For_EACH_OCTAVE的地方都出现了语法错误.后来查找了一下For_EACH_OCTAVE是个啥,发现是一个宏定义,也不知道宏定义定义的好好的,为啥会编 ...

  6. python笔记22(面向对象课程四)

    今日内容 讲作业 栈 顺序查找 可迭代对象 约束 + 异常 反射 内容详细 1.作业 1.1 代码从上到下执行 print('你好') def func(): pass func() class Fo ...

  7. python中调用函数时,参数顺序与参数赋值问题

    设置类和函数如下:class MM(): def ff(self,url(1),method(2),data=None(3),cookie=None(4)): if method.lower()==& ...

  8. 开源堡垒机jumpserver的安装

    开源跳板机jumpserver安装 简介 Jumpserver 是全球首款完全开源的堡垒机, 使用GNU GPL v2.0 开源协议, 是符合4A 的专业运维审计系统 Jumpserver 使用Pyt ...

  9. shell 颜色输出

    #!/bin/bash function display_method(){ clearDisplayMetho=0 if [ $displayMethod -eq 0 ]; then echo -e ...

  10. CentOS6.5下部署SVN

    查看系统版本,安装SVN软件及创建目录 [root@A-linux ~]# uname -r 2.6.32-431.el6.x86_64 [root@A-linux ~]# cat /etc/redh ...