线性模型与树模型

置信区间

在这里插入图片描述
置信水平
90%:z=1.68
95%:z=1.96
99%:z=2.58

LR模型

LR模型是一种线性模型,即y = w*x+b,模型过程一般分为两步,第一步用最大似然法估计线性模型的参数,第二步是使用非线性函数,即sigmod函数,将一条直线转成曲线,输出二分类的概率
sigmod函数:
在这里插入图片描述
最大似然法推导过程:

在这里插入图片描述

在这里插入图片描述
极大似然估计,通俗理解来说,就是利用已知的样本结果信息,反推最具有可能(最大概率)导致这些样本结果出现的模型参数值,即产生分类结果的参数值。
其中,似然函数 l 这个函数形式这么写可以保证不管y=0或者y=1的情况下,另一个的指数都会变成0
最后,需要对对数似然函数求极大值。 L(w) 是关于 w 的高阶连续可导凸函数,根据凸优化理论,可采用梯度下降法等优化方法求解。

决策树

在介绍集成模型前,要知道单棵树是怎么操作

分类

根据给定的训练数据集构建一个决策树模型,使它能够对实例进行正确的分类。包括三个过程:特征选择、决策树生成和决策树剪枝
其中节点的划分,即特征选择主要靠信息熵、信息增益、增益率、基尼系数

信息熵公式

在这里插入图片描述
p_k: 当前样本集合 D 中属于第 k 类样本的非0概率。以2为底的对数函数是因为信息是用二进位编码的。

信息的大小跟随机事件的概率有关。越小概率的事情发生了产生的信息量越大,如湖南产生的地震了;越大概率的事情发生了产生的信息量越小,如太阳从东边升起来了(肯定发生嘛,没什么信息量)。这很好理解!

因此,信息量的公式
h ( x ) = − l o g 2 p ( x ) h(x) = -log_2p(x) h(x)=log2p(x)
加负号是因为p(x)是在[0,1],取对数后是负数,要保证它是正数

熵本身不是对信息量的一个度量,而是对事件不确定性的一个度量,而熵减才是对信息量的度量。当然如果某个输入的信息并没有减少熵,那么说明输入的可能是噪音。

这里我再说一个对信息熵的理解。信息熵还可以作为一个系统复杂程度的度量,如果系统越复杂,出现不同情况的种类越多,那么他的信息熵是比较大的。

信息增益公式(代表算法: ID3算法)

在这里插入图片描述
在这里插入图片描述
Dv/D: 比如色泽=白色占所有样本得比例
即在信息熵的基础上衡量哪个划分使得信息熵增加得更快

信息增益率公式(代表算法: C4.5算法)

在这里插入图片描述
如果某个属性本身有许多不同的值,用于划分的话会使信息增益的第二项为0,即信息增益非常大,例如身份证作为划分属性,这种划分的分类结果没有意义
信息增益率考虑到这一点,加入不同属性的对比,选属性中可能取值少的
公式中属性 a 的可能取值数目越多 (即 V 越大),则 IV(a) 的值通常就越大,这里IV(a)称之为属性a的固有值。

特征选择:先从候选划分属性中找出信息增益高于平均水平的,再从中选取增益率最高的

基尼系数公式(代表算法: CART算法)

在这里插入图片描述
属性 a 的基尼指数:

在这里插入图片描述
基尼系数反映了从 D 中随机抽取两个样例,其类别标记不一致的概率,p_k代表不同类别二的概率
选取规则:在候选属性集合中,选取那个使划分后基尼指数最小的属性

基尼系数相比以上两种,更容易计算

连续值划分

常用的是用二分法将连续值离散化
在这里插入图片描述
具体思路:m个样本的连续特征A有m个,从小到大排列a1,a2,…,am,则CART取相邻两样本值的平均数做划分点,一共取m-1个,其中第i个划分点Ti表示为:Ti = (ai + ai+1)/2。分别计算以这m-1个点作为二元分类点时的基尼系数。选择基尼系数最小的点为该连续特征的二元离散分类点。比如取到的基尼系数最小的点为at,则小于at的值为类别1,大于at的值为类别2,这样就做到了连续特征的离散化。

Bagging和Boosting

两个都是集成学习方法

bagging

bagging是对数据进行采样,每次采样训练的结果为1个弱分类器,一共L个弱分类,当一个测试样本进入这L个分类,最多弱分类器选择的类别作为这个样本的预测类别,即voting
代表算法:随机森林

boosting

boosting也是有L个分类器,但是他会给每个分类器一个权重
代表算法:AdaBoost、GBDT、XGBoost
Adaboosting详细算法
参考链接:https://www.zybuluo.com/gump88/note/453214
在这里插入图片描述
在这里插入图片描述
指数损失函数的定义
在这里插入图片描述
其中y={-1,1},这样上述的推导公式才能拆分

GBDT模型

GBDT与Adaboost的不同在于Adaboost的权重更新是通过计算误差率得到的,而GBDT是通过对负梯度的拟合,最小化本次与上一次的损失函数,即第k棵树是预测第k-1棵树的残差

在这里插入图片描述
y是样本在k棵树结果总和,f_k(x)代表样本在第k棵树的输出
说是预测残差,但其实本质是用负梯度拟合,只不过GBDT的损失是均方差损失
在这里插入图片描述
因此,负梯度才等同于残差
在这里插入图片描述

XGBoost模型

与GBDT模型对比,XGBoost模型在损失函数loss引入泰勒展开的二阶项,使得梯度下降的更快,另外,XGBoost还能处理缺失值,但本质上,它还是GBDT
关于XGBoost的loss函数
在这里插入图片描述

关于树模型,可以参考这篇博客,写的非常好
https://blog.csdn.net/v_JULY_v/article/details/81410574

XGBoost与GBDT的不同

XGBoost和GBDT有什么不同?
1、GBDT 是机器学习算法,XGBoost 是该算法的工程实现。
2、在使用 CART 作为基础分类器时,XGBoost 显示地加入了正则项来控制模型的复
杂度,有利于防止过拟合,从而提高模型的泛化能力。正则项主要是为了控制loss,让他不一定要往梯度下降最快的方向去,因此可以防止过拟合
3、GBDT 在模型训练时只使用了损失函数的一阶导数信息,XGBoost 对代价函数进
行二阶泰克展开,可以同时使用一阶和二阶导数。
4、传统的 GBDT 采用 CART 作为基础分类器,XGBoost 支持多种类型的基础分类
器,比如线性分类器。
5、传统的 GBDT 在每轮迭代时使用全部的数据,XGBoost 则支持对数据进行采样。
6、传统的 GBDT 没有涉及对缺失值进行处理,XGBoost 能够自动学习出缺失值的处
理策略。
7、XGBoost 还支持并行计算,XGBoost 的并行是基于特征计算的并行,将特征列
排序后以 block 的形式存储在内存中,在后面的迭代中重复使用这个结构。

xgboost如何实现并行

注意XGBoost的并行不是tree粒度的并行,XGBoost也是一次迭代完才能进行下一次迭代的(第t次迭代的代价函数里包含了前面t-1次迭代的预测值)。XGBoost的并行是在特征粒度上的。我们知道,决策树的学习最耗时的一个步骤就是对特征的值进行排序(因为要确定最佳分割点),XGBoost在训练之前,预先对数据进行了排序,然后保存为block结构,后面的迭代中重复地使用这个结构,大大减小计算量。这个block结构也使得并行成为了可能,在进行节点的分裂时,需要计算每个特征的增益,最终选增益最大的那个特征去做分裂,那么各个特征的增益计算就可以开多线程进行。
具体地,通过顺序访问排序后的块遍历样本特征的特征值,方便进行切分点的查找。此外分块存储后多个特征之间互不干涉,可以使用多线程同时对不同的特征进行切分点查找,即特征的并行化处理。在对节点进行分裂时需要选择增益最大的特征作为分裂,这时各个特征的增益计算可以同时进行,这也是 XGBoost 能够实现分布式或者多线程计算的原因。
如果特征是连续值要怎么分区间做分裂呢?做等箱处理,每个箱子里的样本相等(或者其他)
举例来说,将样本“月收入”进行升序排列,5k、5.2k、5.3k、…、52k
分割线为“收入1”、“收入2”、…、“收入j”,满足(每个间隔的样本数的之和/总样本数的之和)为某个百分比(我这个是近似的说法),那么可以一共分成大约个分裂点。
在这里插入图片描述

XGBoost参数调优

params = {
    'booster':'gbtree',
    'min_child_weight': 100,
    'eta': 0.02,
    'colsample_bytree': 0.7,
    'max_depth': 12,
    'subsample': 0.7,
    'alpha': 1,
    'gamma': 1,
    'silent': 1,
    'objective': 'reg:linear',
    'verbose_eval': True,
    'seed': 12
}

参考文章:https://blog.csdn.net/u010657489/article/details/51952785
XGBoost的作者把所有的参数分成了三类:
1、通用参数:宏观函数控制。
2、Booster参数:控制每一步的booster(tree/regression)。
3、学习目标参数:控制训练目标的表现。

通用参数

1、booster[默认gbtree]
选择每次迭代的模型,有两种选择:
gbtree:基于树的模型
gbliner:线性模型
2、silent[默认0]
当这个参数值为1时,静默模式开启,不会输出任何信息。
一般这个参数就保持默认的0,因为这样能帮我们更好地理解模型。
3、nthread[默认值为最大可能的线程数]
这个参数用来进行多线程控制,应当输入系统的核数。
如果你希望使用CPU全部的核,那就不要输入这个参数,算法会自动检测它。

booster参数

尽管有两种booster可供选择,我这里只介绍tree booster,因为它的表现远远胜过linear booster,所以linear booster很少用到。

1、eta[默认0.3]
和GBM中的 learning rate 参数类似。
通过减少每一步的权重,可以提高模型的鲁棒性。
典型值为0.01-0.2。

2、min_child_weight[默认1]
决定最小叶子节点样本权重和。
和GBM的 min_child_leaf 参数类似,但不完全一样。XGBoost的这个参数是最小样本权重的和,而GBM参数是最小样本总数。
这个参数用于避免过拟合。当它的值较大时,可以避免模型学习到局部的特殊样本。
但是如果这个值过高,会导致欠拟合。这个参数需要使用CV来调整。

3、max_depth[默认6]
和GBM中的参数相同,这个值为树的最大深度。
这个值也是用来避免过拟合的。max_depth越大,模型会学到更具体更局部的样本。
需要使用CV函数来进行调优。
典型值:3-10

4、max_leaf_nodes
树上最大的节点或叶子的数量。
可以替代max_depth的作用。因为如果生成的是二叉树,一个深度为n的树最多生成n2个叶子。
如果定义了这个参数,GBM会忽略max_depth参数。

5、gamma[默认0]
在节点分裂时,只有分裂后损失函数的值下降了,才会分裂这个节点。Gamma指定了节点分裂所需的最小损失函数下降值。
这个参数的值越大,算法越保守。这个参数的值和损失函数息息相关,所以是需要调整的。

6、max_delta_step[默认0]
这参数限制每棵树权重改变的最大步长。如果这个参数的值为0,那就意味着没有约束。如果它被赋予了某个正值,那么它会让这个算法更加保守。
通常,这个参数不需要设置。但是当各类别的样本十分不平衡时,它对逻辑回归是很有帮助的。
这个参数一般用不到,但是你可以挖掘出来它更多的用处。

7、subsample[默认1]
和GBM中的subsample参数一模一样。这个参数控制对于每棵树,随机采样的比例。
减小这个参数的值,算法会更加保守,避免过拟合。但是,如果这个值设置得过小,它可能会导致欠拟合。
典型值:0.5-1

8、colsample_bytree[默认1]
和GBM里面的max_features参数类似。用来控制每棵随机采样的列数的占比(每一列是一个特征)。
典型值:0.5-1

9、colsample_bylevel[默认1]
用来控制树的每一级的每一次分裂,对列数的采样的占比。
我个人一般不太用这个参数,因为subsample参数和colsample_bytree参数可以起到相同的作用。但是如果感兴趣,可以挖掘这个参数更多的用处。

10、lambda[默认1]
权重的L2正则化项。(和Ridge regression类似)。
这个参数是用来控制XGBoost的正则化部分的。虽然大部分数据科学家很少用到这个参数,但是这个参数在减少过拟合上还是可以挖掘出更多用处的。

11、alpha[默认1]
权重的L1正则化项。(和Lasso regression类似)。
可以应用在很高维度的情况下,使得算法的速度更快。

12、scale_pos_weight[默认1]
在各类别样本十分不平衡时,把这个参数设定为一个正值,可以使算法更快收敛。

学习目标参数

这个参数用来控制理想的优化目标和每一步结果的度量方法。

1、objective[默认reg:linear]
这个参数定义需要被最小化的损失函数。最常用的值有:
binary:logistic 二分类的逻辑回归,返回预测的概率(不是类别)。
multi:softmax 使用softmax的多分类器,返回预测的类别(不是概率)。
在这种情况下,你还需要多设一个参数:num_class(类别数目)。
multi:softprob 和multi:softmax参数一样,但是返回的是每个数据属于各个类别的概率。

2、eval_metric[默认值取决于objective参数的取值]
对于有效数据的度量方法。
对于回归问题,默认值是rmse,对于分类问题,默认值是error。
典型值有:
rmse 均方根误差
mae 平均绝对误差
logloss 负对数似然函数值
error 二分类错误率(阈值为0.5)
merror 多分类错误率
mlogloss 多分类logloss损失函数
auc 曲线下面积

3、seed(默认0)
随机数的种子
设置它可以复现随机数据的结果,也可以用于调整参数

SVM模型

先介绍一个线性不可分的概念,如果用一条直线去分割两类数据,但是不管怎么画这条直线,总会把一些类别的数据错误划分。这种情况下,不存在一条直线将两类数据完美分开。这种数据叫做线性不可分。
下图就是一个例子在这里插入图片描述
SVM模型的insight主要是从一个更高维的空间去看待这个问题,上图在二维上需要用一个非线性函数才能分类,但可能在高维空间上,用线性函数也可以划分,如下图,可能在三维空间上,用一个线性平面是可以划分的。
在这里插入图片描述
SVM公式:
在这里插入图片描述
其中k()是核函数,将低维空间的数据映射到高维空间

在这里插入图片描述

超平面概念

在这里插入图片描述

SVM 的目标

https://www.cnblogs.com/jermmyhsu/p/8467848.html?ivk_sa=1024320u
SVM 的目的其实就是找一个区分数据最合适的超平面,超平面一侧是正样本,另一侧是负样本。我们应该能隐约感觉到:最合适的平面就在正负样本「最中间」的位置。换句话说,就是找一个间距最大的超平面。这样找到的超平面也将在正负样本的最中间,因为如果超平面离任何样本太近,间距都会变小,因此为了保证间距最大,就必须与所有正负样本都足够的远。
在这里插入图片描述
在这里插入图片描述

在这里插入图片描述

FM模型

在这里插入图片描述
FM相比于SVM不同的地方在于交叉特征是可以互相影响的,SVM模型的交叉特征是各分配一个权重,例如:对于特征i,j,k,i和j的权重是wij,i和k的权重是wik。但是在FM模型中,i和j的权重是vif * vjf,i和k的权重是vif * vkf,其交叉特征的权重是会通过vif互相影响的,这在实际情况下也是说得通的。

FM公式:
在这里插入图片描述
在这里插入图片描述
模型的其中一个亮点就是降低算法的复杂度,交叉项推导如下:
在这里插入图片描述

NFM模型

在这里插入图片描述
在这里插入图片描述

AFM模型

在这里插入图片描述
在这里插入图片描述

  • 0
    点赞
  • 3
    收藏
    觉得还不错? 一键收藏
  • 0
    评论

“相关推荐”对你有帮助么?

  • 非常没帮助
  • 没帮助
  • 一般
  • 有帮助
  • 非常有帮助
提交
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值