集成学习

AdaBoost算法理解

会有一股神秘感。 提交于 2019-12-18 12:51:11
AdaBoost的前身和今世 强可学习和弱可学习 在概率近似正确(PAC)学习框架中, 一个类如果存在: 一个多项式复杂度的学习算法,正确率略大于随机猜测(例如二分类问题中大于1/2),称 弱可学习的 一个多项式复杂度的学习算法,并且正确率很高,称 强可学习的 Kearns和Valiant证明了强可学习和弱可学习是 等价 的 The Strength of Weak Learnability Adaboost算法就是将弱学习器组成强学习器的算法 Explaining AdaBoost 算法受到工业界和学术界的关注, 充分的理论研究 (统计学习方法证明) AdaBoost算法是为了证明弱可学习和强可学习算法等价而提出的 ,随后,人们发现该类集成算法能够有效的提升一个学习器的作用,基于AdaBoost演化出了诸多的算法,例如在各大数据挖掘上大放光彩的XGBoost,几乎霸占了诸多数据竞赛榜单的前几多年(从2017开始),在数据预处理上填充空值常用的随机森林算法等等。 随后,学术界纷纷把关注点投向了这个算法的理论证明。得到了该类算法的统计学派角度的证明, 即为AdaBoost是在指数损失函数、模型是加性模型、算法是前向分布算法 。进一步的,给出了学习算法的训练误差界,说明了其训练过程中的最坏情况,并且表明其训练误差是以指数级别下降的。在明白了AdaBoost的统计意义后

Prometheus学习系列(九)之Prometheus 存储

我与影子孤独终老i 提交于 2019-12-18 02:33:46
前言 本文来自 Prometheus官网手册 和 Prometheus简介 存储 Prometheus是一个本地磁盘时间序列数据库,但也可选择与远程存储系统集成,其本地时间序列数据库以自定义格式在磁盘上存储时间序列数据。 1.1 磁盘布局 采集的样本按每两个小时的时间段保存到一个目录,该目录包含一个或多个块文件,该文件包含该时间窗口的所有时间序列样本,以及元数据文件和索引文件(用于将度量名称和标签索引到块文件中的时间序列)。通过API删除系列时,删除记录存储在单独的逻辑删除文件中(而不是立即从块文件中删除数据) 当前传入样本的块保存在内存中,但尚未完全保留。通过预写日志(WAL)防止崩溃,可以在崩溃后重新启动Prometheus服务器时重放。预写日志文件以128MB段存储在wal目录中。这些文件包含尚未压缩的原始数据,因此它们比常规块文件大得多。 Prometheus将保留至少3个预写日志文件,但是高流量服务器可能会看到三个以上的WAL文件,因为它需要保留至少两个小时的原始数据。 Prometheus服务器的数据目录的目录结构如下所示: ./data ├── 01BKGV7JBM69T2G1BGBGM6KB12 │ └── meta.json ├── 01BKGTZQ1SYQJTR4PB43C8PD98 │ ├── chunks │ │ └── 000001 │ ├──

集成学习 - 决策树-随机森林

吃可爱长大的小学妹 提交于 2019-12-09 00:40:33
认识 我觉得决策树+ 随机森林 应该是 ML 中最为重要的算法之一了吧, 反正我是很喜欢用的. 算法难度低, 可解释性很强, 能可视化 能处理非线性, 可扩展为随机森林(集成学习) 建立决策树的判别依据有很多, 比较主流的有经典的 ID3 算法(熵), C4.5 , 基尼系数等. 我是这种基于熵的理解了, 上学时学过熵的概念, 在<> 和 <> 有讲到. 其余的也没仔细看, 暂时能深入理解一个就可以了. 信息熵 衡量信息的不确定性 或 混乱程度的指标 不确定性越大, 则熵值越大 直观认知 举几个栗子: a. 大海捞针: 几乎不可能, 熵值很大 b. 扔一次硬币: 不确定性也很大, 熵值很大 c. 詹姆斯强攻篮下: 进球概率大, 不确定性很小, 因此熵值小 d. 斗地主时我已经推出对方剩下的牌: 这个信息量就很大了, 对于局势不确定性减少, 则熵变小. 通过直观, 我们用 信息熵 这个概念来 衡量信息的不确定性大小 , 如何对这个概念直观定性呢? 信息量,感觉上跟 概率 有关系, 概率很多, 信息量就很多 信息量, 应该是可以 相加 的 信息量, 应该是一个 单调的 信息量, 应该 不能为负数 , 最多只能有, 最差情况是 没有信息含量 , 不能说负吧 理性认知 也可以从系统论的观点来认识 (系统 = 多个元素的 相互联系). 可以肯定一点, 既然跟概率有关, 那 概率取值是 [0

集成学习 - Bagging

心已入冬 提交于 2019-12-07 23:45:27
认识 Bagging 的全称为 (BootStrap Aggregation), 嗯, 咋翻译比较直观一点呢, 就 有放回抽样 模型训练? 算了, 就这样吧, 它的Paper是这样的: Algorithm Bagging: Let n be the number of bootstrap samples 这步非常关键: 对训练样本进行 有放回抽样 , 这样就可达到,将原来只有一个数据集,现在有n个数据集了. for i = 1 to n do: ​ 3. Draw bootstrip sample of size \(m, D_i\) \(D_i\) 表示第 i 个采样的数据集 Train base classifier \(h_i\) on \(D_i\) 与之前的 voting 不同在于, 这里 hi 算法没有变, 只是数据变了 \(\hat y = mode(h_1(X), h_2(X)..)\) mode 是众数的意思, 民主投票, 来确定最终结果 BootStrap 有放回采样 假设数据是均匀分布的, 然后我们有采样了一个样本 X, 假设有 n 条数据, 则每条数据, 被抽中的概率是均等的, 都是: $P(x_i) = \frac {1}{n} $ 没有被抽中的概率是: \(1-P(x_i) = 1-\frac {1}{n}\) 现在进行有放回抽样, 该条数据在

Prometheus学习系列(九)之Prometheus 存储

大兔子大兔子 提交于 2019-12-06 12:30:32
前言 本文来自 Prometheus官网手册 和 Prometheus简介 存储 Prometheus是一个本地磁盘时间序列数据库,但也可选择与远程存储系统集成,其本地时间序列数据库以自定义格式在磁盘上存储时间序列数据。 1.1 磁盘布局 采集的样本按每两个小时的时间段保存到一个目录,该目录包含一个或多个块文件,该文件包含该时间窗口的所有时间序列样本,以及元数据文件和索引文件(用于将度量名称和标签索引到块文件中的时间序列)。通过API删除系列时,删除记录存储在单独的逻辑删除文件中(而不是立即从块文件中删除数据) 当前传入样本的块保存在内存中,但尚未完全保留。通过预写日志(WAL)防止崩溃,可以在崩溃后重新启动Prometheus服务器时重放。预写日志文件以128MB段存储在wal目录中。这些文件包含尚未压缩的原始数据,因此它们比常规块文件大得多。 Prometheus将保留至少3个预写日志文件,但是高流量服务器可能会看到三个以上的WAL文件,因为它需要保留至少两个小时的原始数据。 Prometheus服务器的数据目录的目录结构如下所示: ./data ├── 01BKGV7JBM69T2G1BGBGM6KB12 │ └── meta.json ├── 01BKGTZQ1SYQJTR4PB43C8PD98 │ ├── chunks │ │ └── 000001 │ ├──

《集成学习》

喜你入骨 提交于 2019-12-05 18:07:08
介绍 Stacking 、 Bagging 和 Boosting 三种方式。 一、 Stacking 思想:由原始的训练集训练出若干个单模型,将单模型的输出结果作为样本特征进行整合,并把原始样本标记作为新数据样本标记,生成新的训练集。再根据训练集训练一个新模型,并对样本进行预测。 注意:模型训练时,如果直接使用一级模型对初始的训练样本进行预测来产生二级训练集,会产生较大的过拟合风险。因而,常采用 " 交叉验证法 " 或 " 留一法 " 来由一级模型未使用的样本产生二级模型的训练集。将样本划分为 K 份,选择 K-1 份作为 " 训练集 " ,剩余的一份作为 " 测试集 ", 因而总共有 K 种组合方式。每次使用一种方式来训练 T 个模型(模型可以是 " 异质的 " ,也可以是 " 同质的 " ),利用测试集产生一份训练数据作为样本特征,对应的原始测试集数据的样本标记被作为新数据样本标记来使用。最后,将由一级模型产生的 K 次结果组合到一起,作为二级模型的输入进行训练模型。 二、 Bagging 思想:对训练集进行有放回的抽样得到子训练集,比较著名的是 0.632 自助法。每个基学习器基于不同的子训练集进行训练,然后综合所有基学习器的预测值得到最终的预测结果。常采用 " 投票法 " ,即将票数最多的类别作为预测类别。 三、 Boosting 思想:模型的训练是按照顺序的

集成学习

人走茶凉 提交于 2019-12-05 11:43:49
集成学习基础 集成学习分类 Boosting 采用串行的方式,各个基学习器之间有依赖 基本思路:将基学习器层层叠加,每一层训练时,对前一层分错的样本,给予更高的权重。测试时,根据各层学习器的结果加权融合 AdaBoost Bagging 各基学习器之间无强依赖,可以并行训练 基于决策树基学习器的Random Forest 将训练集分为若干子集(训练集较小时可能有交集)训练基学习器 偏差和方差 定量描述模型的性能(欠拟合和过拟合) 偏差: 由所有采样得到的大小为 \(m\) 的训练数据集训练出来的所有模型的输出的平均值和真实模型输出之间的偏差 通常是由于对学习算法做了错误的假设导致,如真实模型是二次函数,我们假设是一次函数 偏差带来的误差通常在训练误差上体现出来 方差: 由所有采样得到大小为 \(m\) 的训练数据集训练出来的所有模型的输出的方差 通常是由于模型复杂度相对于训练样本数 \(m\) 过高导致的 方差带来的误差通常表现在测试误差相对于训练误差的增量上 二者矛盾统一,不能完全独立 集成学习偏差方差分析 基学习器的错误 偏差(欠拟合):由于分类器表达能力有限导致的系统性错误,表现为训练误差不收敛 方差(过拟合):由于分类器对于样本分布过于敏感,导致在训练样本较少时,产生过拟合 Boosting方法:通过逐步聚焦于基学习器分错的样本,减小集成学习器的偏差

shiro学习(四、shiro集成spring+springmvc)

只谈情不闲聊 提交于 2019-12-04 23:31:29
依赖:spring-context,spring-MVC,shiro-core,shiro-spring,shiro-web 实话实说:web.xml,spring,springmvc配置文件好难 大致效果 代码结构(使用web骨架构建) pom.xml <dependencies> <dependency> <groupId>junit</groupId> <artifactId>junit</artifactId> <version>4.11</version> <scope>test</scope> </dependency> <dependency> <groupId>org.springframework</groupId> <artifactId>spring-context</artifactId> <version>4.2.4.RELEASE</version> </dependency> <dependency> <groupId>org.springframework</groupId> <artifactId>spring-webmvc</artifactId> <version>4.2.4.RELEASE</version> </dependency> <dependency> <groupId>org.apache.shiro</groupId>

集成学习

徘徊边缘 提交于 2019-12-04 15:17:45
集成学习 集成学习通过构建并结合多个学习器来完成学习任务。 集成学习的思路是通过合并多个模型来提升机器学习性能,这种方法相较于当个单个模型通常能够获得更好的预测结果。这也是集成学习在众多高水平的比赛如奈飞比赛,KDD和Kaggle,被首先推荐使用的原因。 分类 用于减少方差的bagging 用于减少偏差的boosting 用于提升预测结果的stacking 集成学习方法也可以归为如下两大类: 1 串行集成方法,这种方法串行地生成基础模型(如AdaBoost)。串行集成的基本动机是利用基础模型之间的依赖。通过给错分样本一个较大的权重来提升性能。 2 并行集成方法,这种方法并行地生成基础模型(如Random Forest)。并行集成的基本动机是利用基础模型的独立性,因为通过平均能够较大地降低误差。 Bagging和Boosting的区别? 样本选择: Bagging: 训练集是在原始集中有放回选取的,从原始集中选出的各轮训练集之间是独立的。 Boosting:每一轮的训练集不变,只是训练集中每个样例在分类器中的权重发生变化。而权值是根据上一轮的分类结果进行调整。 样例权重: Bagging: 使用均匀取样,每个样例的权重相等。 Boosting:根据错误率不断调整样例的权值,错误率越大则权重越大。 预测函数: Bagging: 所有预测函数的权重相等。 Boosting

集成学习和代码实现

孤人 提交于 2019-12-04 04:26:52
从百度云课堂上截图的基础概念,如果之前不了解的可以先看一下这篇博客: https://blog.csdn.net/weixin_30708329/article/details/97262409 不同的数据集训练不同的模型,根据模型进行投票得到最终预测结果 多棵决策树组成森林,每个模型训练集不同和选择的决策属性不同是RF算法随机的最主要体现 adaboost算法不同模型之间会有影响 多层分类器进行结果的预测 bagging算法提高KNN和决策树算法精确度 1 # 导入算法包以及数据集 2 from sklearn import neighbors 3 from sklearn import datasets 4 from sklearn.ensemble import BaggingClassifier 5 from sklearn import tree 6 from sklearn.model_selection import train_test_split 7 import numpy as np 8 import matplotlib.pyplot as plt 9 iris = datasets.load_iris() 10 x_data = iris.data[:,:2] 11 y_data = iris.target 12 def plot(model): 13 #