过拟合

机器学习(八)—GBDT 与 XGBOOST

帅比萌擦擦* 提交于 2020-04-27 02:42:57
  RF、GBDT和XGBoost都属于集成学习(Ensemble Learning),集成学习的 目的 是通过结合多个基学习器的预测结果来改善单个学习器的泛化能力和鲁棒性。   根据个体学习器的生成方式,目前的集成学习方法大致分为两大类:即个体学习器之间存在强依赖关系、必须串行生成的序列化方法,以及个体学习器间不存在强依赖关系、可同时生成的并行化方法;前者的代表就是Boosting,后者的代表是Bagging和“随机森林”(Random Forest)。 1、 GBDT和XGBoost区别    XGBOOST相比于GBDT有何不同?XGBOOST为什么快?XGBOOST如何支持并行? 传统的GBDT以CART树作为基学习器,XGBoost还支持线性分类器,这个时候XGBoost相当于L1和L2正则化的逻辑斯蒂回归(分类)或者线性回归(回归); 传统的GBDT在残差梯度方向拟合只用到一阶导数信息,XGBoost则对代价函数进行了二阶泰勒展开,得到 一阶和二阶导数 ,xgboost工具支持 自定义代价函数 ,只要函数可一阶和二阶求导; XGBoost在代价函数中 加入了正则项 ,用于控制模型的复杂度。从权衡方差偏差来看,它 降低了模型的方差 ,使学习出来的模型更加简单,放置过拟合,这也是XGBoost优于传统GBDT的一个特性;正则项里包含了树的叶子节点个数

集成学习之Xgboost

余生颓废 提交于 2020-04-26 15:32:13
XGBoost全名叫(eXtreme Gradient Boosting)极端梯度提升,或者叫极值梯度提升算法,经常被用在一些比赛中,其效果显著。它是大规模并行boosted tree的工具,它是目前最快最好的开源boosted tree工具包。XGBoost 所应用的算法就是 GBDT(gradient boosting decision tree)的改进,既可以用于分类也可以用于回归问题中。GBDT和xgboost在竞赛和工业界使用都非常频繁,GBDT是以决策树(CART)为基学习器的GB算法,xgboost扩展和改进了GDBT,xgboost算法更快,准确率也相对高一些。现在Kaggle 大赛的情况基本是这样的,凡是非结构化数据相关,比如语音、图像,基本都是深度学习获胜,凡是结构化数据上的竞赛,基本都是 XGBoost 获胜。Xgboost可以说集成思想达到顶峰的一个模型,至少目前是这样,所以学习机器学习算法,掌握这个是很有必要的。 学习Xgboost之前,需要了解决策树,集成学习,GBDT等算法的概念,会帮助更好的去理解Xgboost。 Gradient boosting回顾 机器学习中学习算法的目标是为了优化或者说最小化loss Function, Gradient boosting的思想是迭代生多个(M个)弱的模型,然后将每个弱模型的预测结果相加,后面的模型$F_{m

A CLOSER LOOK AT FEW-SHOT CLASSIFICATION

痞子三分冷 提交于 2020-04-26 07:46:08
一篇总结整理近来few-shot分类的文章(近来文章一些毛病:code实现细节很难说清真正的gain在哪,一些baseline被压得太低,base类和novel类之间的域差异不明显导致评估也不可能不太准)。作者复现了一下主要的几篇工作,然后总结如下: 更深的backbone在不同域上的表现对于不同方法差不多;整理了一个baseline并在mini-ImageNet和CUB数据上和当前的sota表现差不多(通过用基于距离的分类器来替代原有传统的线性分类器);提了一种新的设定来评估few-shot分类中corss-domain的泛化能力 。当backbone较浅的时候,减少类内方差是非常重要的,而更深的backbone则淡化了这种域影响,所以对于方法的选择不敏感了。 给定未知类的几个标签人类就可以轻松的记住这种新类,当其再次出现的时候,可以轻松识别。对于机器很难,这种任务就是few-shot classfication。已有的主要方法:元学习,即从一组任务中提取并传播可迁移的知识来避免过拟合,提高泛化能力。元学习方法主要分为: model initialization based methods、metric learning methods(本文所用)、hallucination based methods 。 如上图: 首先提出的是baseline: 就是常规的源域训练+目标域微调

《机器学习》西瓜书第五章神经网络

被刻印的时光 ゝ 提交于 2020-04-26 04:48:08
本章主要介绍了神经元模型、一些典型的神经网络算法等 5.1 神经元模型 “神经网络是由具有 适应性 的简单单元组成的 广泛并行互连 的网络,他的组织能够模拟生物神经系统对真实世界物体作出的交互反应” 神经网络中最基本的成分是神经元模型。沿用至今的“ M-P神经元模型 ”:神经元接收到来自n个其他神经元传递过来的输入信号,这些输入信号通过带 权重 的链接进行传递,神经元接受到的总输入值与神经元的阙值进行比较,然后通过“ 激活函数” 处理以产生神经元的输出。常用“Sigmoid函数”作为激活函数。许多这样的神经元按照一定的层次结构连接起来,就得到了神经网络。 5.2感知机与多层网络 感知机由 两层神经元 组成, 输入层 接受外界输入信号后传递给输出层, 输出层 是M-P神经元,亦称“阙值逻辑单元”。感知机能够很容易地实现逻辑与、或、非运算。 给定训练集,权重ω i 以及阙值θ可通过学习得到。阙值θ可看做一个固定输入为-1.0的“哑结点”,所对应的连接权重ω n+1 ,这样就统一为权重的学习。 感知机的学习规则:对训练样例( x ,y),若当前感知机输出为 y^,则感知机权重: ω i ← ωi +Δωi Δωi = η(y - y^)x i ;其中η属于(0,1)称为学习率。 感知机只有输出神经元进行激活函数处理,只拥有一层功能神经,学习能力非常有限。若两类模式线性可分

Boosting算法之Adaboost和GBDT

旧时模样 提交于 2020-04-24 23:04:33
  Boosting是串行式集成学习方法的代表,它使用加法模型和前向分步算法,将弱学习器提升为强学习器。Boosting系列算法里最著名的算法主要有AdaBoost和梯度提升系列算法(Gradient Boost,GB),梯度提升系列算法里面应用最广泛的是梯度提升树(Gradient Boosting Decision Tree,GBDT)。 一、Adaboost 1、Adaboost介绍   Adaboost算法通过在训练集上不断调整样本权重分布,基于不同的样本权重分布,重复训练多个弱分类器,最后通过结合策略将所有的弱分类器组合起来,构成强分类器。Adaboost算法在训练过程中,注重减少每个弱学习器的误差,在训练下一个弱学习器时,根据上一次的训练结果,调整样本的权重分布,更加关注那些被分错的样本,使它们在下一次训练中得到更多的关注,有更大的可能被分类正确。 Adaboost算法框架图 2、Adaboost算法过程 1)初始化样本权重,一共有n个样本,则每个样本的权重为1/n 2)在样本分布D t 上,训练弱分类器,for t=1,2,……T: a、训练分类器h t b、计算当前弱分类器的分类误差率 c、判断误差率是否小于0.5,是则继续,否则退出循环 d、计算当前弱分类器的权重系数alpha值 e、根据alpha值调整样本分布D t+1 如果样本被正确分类,则该样本的权重更改为

通俗地说逻辑回归【Logistic regression】算法(二)sklearn逻辑回归实战

試著忘記壹切 提交于 2020-04-24 23:00:16
前情提要: 通俗地说逻辑回归【Logistic regression】算法(一) 逻辑回归模型原理介绍 上一篇主要介绍了逻辑回归中,相对理论化的知识,这次主要是对上篇做一点点补充,以及介绍sklearn 逻辑回归模型的参数,以及具体的实战代码。 1.逻辑回归的二分类和多分类 上次介绍的逻辑回归的内容,基本都是基于二分类的。那么有没有办法让逻辑回归实现多分类呢?那肯定是有的,还不止一种。 实际上二元逻辑回归的模型和损失函数很容易推广到多元 逻辑回归。比如总是认为某种类型为正值,其余为0值。 举个例子,要分类为A,B,C三类,那么就可以把A当作正向数据,B和C当作负向数据来处理,这样就可以用二分类的方法解决多分类的问题,这种方法就是最常用的one-vs-rest,简称OvR。而且这种方法也可以方便得推广到其他二分类模型中(当然其他算法可能有更好的多分类办法)。 另一种多元逻辑回归的方法是Many-vs-Many(MvM),它会选择一部分类别的样本和另一部分类别的样本来做逻辑回归二分类。 听起来很不可思议,但其实确实是能办到的。比如数据有A,B,C三个分类。 我们将A,B作为正向数据,C作为负向数据,训练出一个分模型。再将A,C作为正向数据,B作为负向数据,训练出一个分类模型。最后B,C作为正向数据,C作为负向数据,训练出一个模型。 通过这三个模型就能实现多分类,当然这里只是举个例子

逻辑归回

萝らか妹 提交于 2020-04-24 13:19:33
1.用自己的话描述一下,什么是逻辑回归,与线性回归对比,有什么不同? 线性回归:   线性回归是一种回归分析技术.回归分析就是利用样本(已知数据),产生拟合方程,从而对未知数据进行预测,回归在于分析自变量与因变量之间的关系。线性回归属于有监督学习,因此方法和监督学习应该是一样的,先给定一个训练集,根据这个训练集学习出一个线性函数,然后测试这个函数训练的好不好,挑选出最好的函数即可 线性回归函数:y = ax + b, 其中a和b是待求参数。 逻辑回归:函数p = S(ax + b), 其中a和b是待求参数, S是逻辑斯蒂函数,然后根据p与1-p的大小确定输出的值,通常阈值取0.5,若p大于0.5则归为1这类。 可以认为逻辑回归的输入是线性回归的输出,将逻辑斯蒂函数作用于线性回归的输出得到输出结果。 线性回归与逻辑回归最大的区别就在于他们的因变量不同。 2.自述一下什么是过拟合和欠拟合? 欠拟合的根本的原因是特征维度过少,导致拟合的函数无法满足训练集,误差较大。可以通过增加特征维度来解决。 过拟合根本的原因则是特征维度过多,导致拟合的函数完美的经过训练集,但是对新数据的预测结果则较差。可以减少特征维度; 人工选择保留的特征,或者模型选择算法解决。或者将数据正则化; 保留所有的特征,通过降低参数θ的值。 3.思考一下逻辑回归的应用场景有哪些? (1)预测事件发生概率 (2

写给程序员的机器学习入门 (三)

依然范特西╮ 提交于 2020-04-24 13:10:10
生物神经元与人工神经元 在了解神经元网络之前,我们先简单的看看生物学上的神经元是什么样子的,下图摘自维基百科: (因为我不是专家,这里的解释只用于理解人工神经元模拟了生物神经元的什么地方,不一定完全准确) 神经元主要由细胞体和细胞突组成,而细胞突分为树突 (Dendrites) 和轴突 (Axon),树突负责接收其他神经元输入的电流,而轴突负责把电流输出给其他神经元。一个神经元可以通过树突从多个神经元接收电流,如果电流没有达到某个阈值则神经元不会把电流输出,如果电流达到了某个阈值则神经元会通过轴突的突触把电流输出给其他神经元,这样的规则被称为全有全无律。输入电流达到阈值以后输出电流的状态又称为到达动作电位,动作电位会持续 1 ~ 2 毫秒,之后会进入约 0.5 毫秒的绝对不应期,无论输入多大的电流都不会输出,然后再进入约 3.5 毫秒的相对不应期,需要电流达到更大的阈值才会输出,最后返回静息电位。神经元之间连接起来的网络称为神经元网络,人的大脑中大约有 860 亿个神经元,因为 860 亿个神经元可以同时工作,所以目前的计算机无法模拟这种工作方式 (除非开发专用的芯片),只能模拟一部分的工作方式和使用更小规模的网络。 计算机模拟神经元网络使用的是人工神经元,单个人工神经元可以用以下公式表达: 其中 n 代表输入的个数,你可以把 n 看作这个神经元拥有的树突个数,x

Bagging,stacking,blending

大城市里の小女人 提交于 2020-04-24 02:35:47
Bagging Bagging的代表算法是随机森林,简单说下随机森林的步骤: (1) 对训练样本进行bootstrap采样,即有放回的采样,获得M个采样集合; (2) 在这M个采样集合上训练处M个弱决策树。注意到,在决策树生成中还用到了列采样的技巧,原本决策树中节点分裂时,是选择当前节点中所有属性的最优属性进行划分的,但是列采样的技巧是在所有属性中的子集中选最优属性进行划分。这样做可以进一步降低过拟合的可能性; (3) 对这M个训练出来的弱决策树进行集成。 Stacking Stacking还没有代表性的算法,我姑且把它理解成一个集成的思想吧。具体做法是: (1) 先将训练集D拆成k个大小相似但互不相交的子集D1,D2,…,Dk; (2) 令Dj’= D - Dj,在Dj’上训练一个弱学习器Lj。将Dj作为测试集,获得Lj在Dj上的输出Dj’’; (3) 步骤2可以得到k个弱学习器以及k个相应的输出Dj’’,这个k个输出加上原本的类标构成新的训练集Dn; (4) 在Dn训练次学习器L,L即为最后的学习器。 Stacking是用新的模型(次学习器)去学习怎么组合那些基学习器,它的思想源自于 Stacked Generalization 这篇论文。如果把Bagging看作是多个基分类器的线性组合,那么Stacking就是多个基分类器的非线性组合。Stacking可以很灵活

线性回归原理小结

折月煮酒 提交于 2020-04-23 20:59:19
    线性回归可以说是机器学习中最基本的问题类型了,这里就对线性回归的原理和算法做一个小结。 1. 线性回归的模型函数和损失函数     线性回归遇到的问题一般是这样的。我们有m个样本,每个样本对应于n维特征和一个结果输出,如下:     \((x_1^{(0)}, x_2^{(0)}, ...x_n^{(0)}, y_0), (x_1^{(1)}, x_2^{(1)}, ...x_n^{(1)},y_1), ... (x_1^{(m)}, x_2^{(m)}, ...x_n^{(m)}, y_m)\)     我们的问题是,对于一个新的\((x_1^{(x)}, x_2^{(x)}, ...x_n^{(x)} \), 他所对应的\(y_x\)是多少呢? 如果这个问题里面的y是连续的,则是一个回归问题,否则是一个分类问题。     对于n维特征的样本数据,如果我们决定使用线性回归,那么对应的模型是这样的:     \(h_\theta(x_1, x_2, ...x_n) = \theta_0 + \theta_{1}x_1 + ... + \theta_{n}x_{n}\), 其中\(\theta_i \) (i = 0,1,2... n)为模型参数,\(x_i \) (i = 0,1,2... n)为每个样本的n个特征值。这个表示可以简化,我们增加一个特征\(x_0 = 1 \