diff --git a/test.md b/test.md index 040ca66..7a87757 100644 --- a/test.md +++ b/test.md @@ -180,125 +180,3 @@ s.t. \, \,0 \leq\xi_i , \hat\xi_i ; \, \, -\epsilon - \hat\xi_i \leq y_i-(w - One Class SVM $$ \min\limits_{r,o} V(r,o)+ C \sum \xi_i\\ s.t. \,\, \|x_i-o\|\leq r+ \xi_i; \,\,\, \xi_i \geq0 $$ - 校准概率 (Calibrate Probability):在 score g(xi)基础上再训练一个 [0, 1] 之间的函数 (calibration regressor) 来表示xi被预测成1的校准概率。 - - - -### 决策树 - - -**构建决策树** - -- 选择最大的信息增益ID3/信息增益比C4.5/最小相对基尼指数的特征进行分裂 -- 用信息增益比代替是因为要排除那些提供很多信息但同时自身熵也很大的特征。比如取值非常多的特征,每个样本被该特征分裂成节点都是 1 个样本 -- 回归树 (regression tree),通过最小化平方误差来寻找最优特征和切分 -- 利用某叶结点对应的划分的子空间中样本个数/总样本,可以作为输入X的概率分布估计。 -- 决策树的优点:易于解释;不是很依赖于预处理;缺失值和异常点不敏感。 -- 决策树的缺点:计算量较大;连续特征类别化;样本扰动敏感;过拟合;特征选择一。对multicollinearity鲁棒;弱 interaction 的特征低效;不是概率模型 - - -**剪枝** - -- 预剪枝 (pre-pruning),以下值达到阙值:所有样本点属于类别个数;样本个数;树的深度;衡量指标的值 -- 后剪枝 (post-pruning) -- 代价函数 $ C_\alpha(T):=C(T)+\alpha |T| $ , $ C(T) $ 为决策树的叶节点熵加权和 -- $ C_\alpha(T-T_t)- C_\alpha(T)= C_\alpha(T_t^p) - C_\alpha(T_t) $ , $ T_t $ 为减掉的子树, $ T_t^p $ 为剪枝后的叶节点。等式说明子树代价函数的剪枝变化=整体树代价函数的剪枝变化 -- CART 剪枝,逐步减去使得 $ g(t) $ 最小的 $ t $ ,这里 $ g(t)=\frac{C(T_t^p)-C(T_t)}{|T_t|-1} $ ,构造决策树包含序列 $ T_{i+1} \subset T_i $ 。 满足性质:(1) $ \alpha_{i+1} \geq \alpha_i $ (2) $ \forall \alpha \in [\alpha_i, \alpha_{i+1}) $ $ T_i $ 是最优的。 - -**类别特征** -- 独热编码 (one-hot encoding)缺点:划分样本不平衡,某个划分几乎就是原始样本集;把样本划分到很多过分零散的小空间上。 - -### 提升方法 - -**AdaBoost** -- 步骤:1等权重初始化数据;2计算Gm的(加权)错误率 $ e_m $ ,选取错误最小的分类器作为m轮的基础分类器;3计算Gm的权重 $ \alpha_m =\frac{1}{2}\log\frac{1-e_m}{e_m} $ (为了最小化指数损失函数);5更新数据权重,误分类的样本点权值扩大,正确的减小。;6重复3-5;7得到最终分类器 $ f(x)=sign(\sum \alpha_m G_m(x)) $ 。 -- 加法模型 (additive model),通常使用向前分布算法 (forward stagewise algorithm) -- AdaBoost 算法是向前分步法的特例,逐步优化损失函数: $$ (\alpha_m,G_m) = \arg\min\limits_{\alpha,G} \sum\limits_{样本i} exp(-y_i (\sum\limits_{l=1}^{m-1}\alpha_lG_l(x_i) + \alpha G(x) ) ) $$ - -**GBDT 梯度提升树** -- 梯度提升树 (Gradient Boosting Decision Tree,GBDT): - - 初始化 $ f_0(x) $ 为一最优常数函数; - - 通过梯度计算残差 $ r_m^i=-\frac{\partial L(y_i,f)}{\partial f}|_{f=f_{m-1}(x_i)} $ ; - - 对数据集合 $ \{(x_i, r^i_m) \}_i $ 拟合出m轮基本树的叶节点划分(不需要每个学习器拟合太好来节省计算时间); - - 优化计算划分上的输出值(当损失函数是平方误差时,就是回归树里用的均值) - - 更新 $ f_m(x) = f_{m-1}(x)+ m轮拟合出的树 $ -- 每一轮拟合残差必须与原始的损失函数一致 -- 对于平方损失来说,梯度计算的“残差”=y − f(x) -- 分类问题的区别: $ P(Y=1|x)=\frac{1}{1+exp(-f_m(x))} $ ;损失函数是y的交叉熵;残差 $ r_m^i= y_i - \frac{1}{1+exp(-f_{m-1}(x_i))} $ -- AdaBoost每一轮没有在拟合残差,而是直接最小化指数损失;而梯度提升树在拟合残差。 - -**XGBoost** -- XGBoost叶节点划分:采用按层生长 (level(depth)-wise learning) 每一层的所有 leaf 都分裂,逐层往下分裂。对每个特征进行线性扫描找出Gain = Obj_unsplit − Obj_split最大的切分点,然后再遍历所有特征找出最大的特征分裂。 -- XGBoost优化计算划分上的输出值:最小化目标函数使用二阶的牛顿法,对损失函数 $ L(y_i, f) $ 在 $ f=f_{m-1}(x_i) $ 二阶Taylor展开。 -- 因为是按层生长,XGboost 通常会规定最大深度,然后从下往上后剪枝。这是因为分裂虽然是最优,但依然有可能Gain是负的。 -- 防止过拟合: - - shrinkage参数: $ f_m = f_{m−1} + ϵ Tree_m $ ; - - 列(特征)抽样 (column subsampling): 与随机森林类似, 每次随机地从所有特征中抽取少量的特征进行分裂。 -- XGBoost按层生长带来了很多没必要的开销。 LightGBM中我们采用leaf-wise learning -- DART (Dropouts meet Multiple Additive Regression Trees): 训练第m棵树时,随机丢弃前面m − 1棵树中的K棵。同时需要数乘正则化:。后面提到的随机森林就可以看做DART dropout 所有的树。 - -**LightGBM** -- XGBoost不足:预排序后需要保存特征值及排序后的索引,因此内存占用和计算消耗巨大,且最佳切分点容易过拟合;预排序后,特征对梯度的访问是一种随机访问,对内存 (cache) 不友好。 -- LightGBM (Light Gradient Boosting Machines) :更少的内存(直方图 (Histogram))、更少的样本 (GOSS)、更少的特征 (EFB)。 -- 直方图:将数据离散化成K个桶(bin),把数据放入对应的桶中,然后寻找K个桶的最佳切分点来近似以减少计算量。优势:简化了计算;不是很精确的分割起到了正则化的效果,同时提升也不需要单独学习器过高的精度;直方图差加速,分裂后左右子树需要重新计算直方图,但其中一个直方图确定时,另外一个可以由父直方图减去得到。 -- 直接丢掉小梯度数据可提高速度但是也降低精度。为了权衡这两,考虑单边梯度采样算法 (Gradient-based One-Side Sampling, GOSS): 保留前a × 100%大梯度数据同时,在抛弃的小梯度样本中再随机选取b × 100%。需要在后面取出的小梯度样本前面乘一个常数 (1 − a)/b, 以尽量保证它的原始分布。 -- 互斥特征合并 (Exclusive Feature Bundling, EFB):把互斥特征(即特征不会同时为非零值,像 one-hot)捆绑成一个特征来减少特征的维度。捆绑,把冲突样本总个数小于阙值的几个特征捆绑成一个bundle;合并,为了确保bundle中每个特征可以被区分开来,我们对特征进行平移,确保不同特征的值区间没有交集。 - -LightGBM还用到了以下技术 -- Leaf-wise(分裂):每次从当前所有叶子中找到 Gain 最大(一般也是数据量最大)的一个叶子进行分裂。优点:Leaf-wise 可以降低更多的误差,得到更好的精度。缺点:树的深度较深,产生过拟合。 -- 并行学习 (Parallel Learning):特征并行、数据并行? -- 顺序访问:LightGBM 因为是将样本投入 bin 中,所以是顺序访问,对 cache 比较友好。 -- 类别特征:LightGBM 按照某一特征类别的梯度统计排序以后,然后按照最优的切分分裂。 - -**CatBoost** -- CatBoost作用:处理 GBDT 中的类别特征;使用Ordered TS解决由类别特征编码造成的目标泄露 (Target Leakage)问题;用Ordered Boosting解决由梯度提升方法造成的预测偏移 (Prediction shift)问题。 -- one-hot编码面对大量类别会造成维度灾难。目标变量统计 (Target Statistics) 使用类别标签的统计量来数值化特征的类别。 - - Greedy TS: 使用所有相同类别对应的标签均值来数字化类别。就是目标 (自身标签) 泄露的由来。 - - Holdout TS: 训练集一分为二DTS ∪ Dtrain。用DTS来独立地计算训练集Dtrain中样本的TS。 但是却大大减少了训练样本的数量。 - - Leave-one-out TS: 训练集样本xi使用D/xi计算TS; 测试集样本使用训练集全样本计算TS。但两种类别的条件分布不一致。 -- CatBoost使用Ordered TS - - 对训练集样本随机排序; - - 对训练集样本xi使用它置换下前面的(历史)样本计算TS; - - 对测试集样本xi使用训练集全样本计算TS。 -- Ordered Boosting:希望m−1轮训练所用的样本和m轮计算残差所用的样本应该是各自独立采样,这样便可获得无偏残差 (Unshifted Residuals)。样本xi的m轮残差,只在它用历史样本训练的学习器fm-1上,来计算。 - -### 集成学习 - -**Bagging 随机森林** -- 集成学习(Ensemble learning)包括提、装袋(Bagging)、Stacking。 -- 如果装袋的弱分类器是决策树,则称为随机森林(Random Forest, RF): - - 自助法在训练数据中生成M组数据; - - 随机地从所有特征中抽取少量的特征(一般√特征总数)。在这特征子集中用决策树的方法生成节点,平行的训练多个弱分类器。(随机抽取的目的是避免某些信息增益比较高的特征频繁出现而使决策树之间相关度高); - - 对M个弱分类器的输出求平均(回归)或者取众数(分类)。 -- 提升是提高精度,降低偏置;装袋在不增加偏置的情况下降低方差。 -- 对于样本x, 装袋也可以把弱分类器的类别输出频率作为y=f(x)的概率分布估计。 -- 自助采样可以产近1/3的袋外样本没有被用到的, 可当做测试集来计算模型的袋外误差 (OOB Error)。 -- 特征个数越多,RF 树的个数也需要越多。因为足够多的树才能保证每个特征等概率被选上。 -- 增加RF树的个数不会overfitting, 但由于fully grown tree可能过拟合,增加这样的树就有可能过拟合。 - -RF在重要性选择的应用 - -- Gini Importance / Mean Decrease in Impurity (MDI):对于每棵树,计算每个特征在所有分裂节点上减少的Gini不纯度总和,然后将所有树的结果相加并除以树的总数。缺点:RF求平均稀释相关特征,导致所有的特征重要性都被低估。这一点 GBDT 就会选出其中一个而优于RF。 -- permutation Importance / Mean Decrease in Accuracy (MDA):在 OOB数据上计算OOB Error1; 随机打乱某特征取值得到OOB Error2。Error2-Error1越大说明该特征越重要。优点:避免过拟合对特征选择带来的 -偏差。缺点:当有相关特征存在时,MDA容易低估特征的重要性。 -- Boruta 对特征重要性的选择类似于filtering, 会保留所有相关的重要特征。 -- 决策树可由以下指标来选取特征重要性: - - weight: 特征被分裂次数。 - - cover: 被分割的样本数即用分裂样本数作为权重加权分裂次数。假设在某次分裂中,当前节点包含n个样本,那么这次分裂的样本数就是n。 - - gain: 由该特征分裂前后损失函数的减少总量。每次分裂前后损失函数(如均方误差、Gini不纯度等)的减少量之和。 -- 两样本近似性 $ Prox_{ij}:= $ 两样本被分到同一个叶节点的树的棵数/RF总棵数。作用: - - 找出异常点 (outlier location)。 $ OL_i = \frac{|D|}{\sum\limits_{x_k \in D}Prox_{ik}^2} $ ,越大说明xi与同类样本的近似性越小,就越有可能是异常点。 - - 聚类填补缺失值 (Missing value replacement),缺失xi情况:1用同类未缺失样本的众数(离散)或者中位数(连续)暴力填补;2建立RF,考虑没有缺失样本xj,Proxij作为权重来计算加权众数或者均值;3重复步骤2建立RF。 -- 孤立森林 (Isolation Forest, IForest)是无监督学习,它的思想是拥有异常点的样本训练树结构时,很快就会把异常点孤立地分配到一个叶节点中,异常点在树中深度很浅。为无监督学习,因此使用随机选取特征和最佳切分点。 -- IForest仅对全局稀疏点敏感,不擅长处理局部的相对稀疏点 -- 极限随机树(extremely randomized trees, ExtraTrees)。两种树都特征随机、模型随机。随机森林样本随机(自助法),最优分裂;极限随机树分裂随机,使用全样本。 - -**Stacking** -- Stacking步骤,数据集 $ T=\{(x_i,y_i)\} $ - - 训练集T上训练好 $ p_k $ ; - - $ z_i:= (p_1(x_i),...,p_K(x_i)) $ ; - - 元学习器 f 在 $ \{(z_i,y_i)\} $ 上学习; - - 预测 $ y=f(p_1(x),...,p_K(x)) $ . -- 直接用初级学习器的训练集来产生次级训练集,则过拟合风险会比较大。 -- 解决方法: $ T=T_1 \cup,...,\cup T_J $ ; $ T_j^C $ 训练p;p作用 $ T_j $ 产生 $ T_j^* $ ; $ T^*=T_1^* \cup,...,\cup T_J^* $ ;f 在 $ T^* $ 上学习。 - -