cat 订阅
CAT鞋也叫catfootwear。公司成立于1904年,出产工业制造工具和全世界闻名的CAT品牌各类休闲衣服与鞋业。CAT制造登山鞋,休闲运动鞋已经有着很长的历史,其执著与粗犷的风格品味,可以做为登山和休闲两者兼得效果的专业设计,所以更受年轻一族的喜爱,经久耐穿用料的选择 和制作工艺,即使是对一双鞋,也像对待机械设备一样,充满细节的考究和对人的呵护。鞋侧有推土机凹印为CAT商标注册。1994年Caterpill.ar和世界最大的鞋类生产厂Wolverine(狐狼)签署了5年授权协议,1994年1月生效开始了Wolverine 4000万美元营销项目。 展开全文
CAT鞋也叫catfootwear。公司成立于1904年,出产工业制造工具和全世界闻名的CAT品牌各类休闲衣服与鞋业。CAT制造登山鞋,休闲运动鞋已经有着很长的历史,其执著与粗犷的风格品味,可以做为登山和休闲两者兼得效果的专业设计,所以更受年轻一族的喜爱,经久耐穿用料的选择 和制作工艺,即使是对一双鞋,也像对待机械设备一样,充满细节的考究和对人的呵护。鞋侧有推土机凹印为CAT商标注册。1994年Caterpill.ar和世界最大的鞋类生产厂Wolverine(狐狼)签署了5年授权协议,1994年1月生效开始了Wolverine 4000万美元营销项目。
信息
品    牌
CAT工程机械
别    名
catfootwear
生产厂商
美国卡特公司
引擎类型
柴油机
cat品牌历程
1990年开始特制一系列耐用、保护力强舒适安全的工业皮靴,以配合工程师和技工的需要,其后掀起一股工作服潮。1994年Caterpillar和世界最大的鞋类生产厂Wolverine(狐狼)签署了5年授权协议, 1994年 1月生效,开始了Wolverine4000万美元营销项目,这个项目堪称缔造品牌的模范。Wolverine(狐狼)公司命令有创造力一名设计师和两名工程师到工地。他们以Caterpillar设备的履带和轨道拍照。然后画出仿轮胎模式的鞋底草图。他们回去后造了一种新款,它能唤起类似拖拉机形象并带有机织的类Cat品牌名:T- 3Cat。他们为Catwork 靴设计了一种肋状垫子,即在普通的鞋的中空部分嵌入一个垫子。内 鞋底在承受步行压力时压缩,这样就减少外鞋底的损耗。这款鞋称为“隐蔽履带”,外层鞋底嵌上透明橡胶,这样消费者就能看见内中乾坤。在便鞋方面,穿鞋带的鞋孔被设计成Caterpillar的螺母。为进一步影响这个牌子,每一款鞋都对Caterpillar 的推土机有一定程度的仿效。质量对于极重声名的Caterpillar公司和想取得好价钱的Wolverine公司同样重要。质 量控制总监约翰.伯什对每款鞋的模型进行测试。将近六个月里,伯什每天将款式说明书和鞋底模送往台湾的实 验室。在那儿,鞋模被锯成两半,鞋和皮革都要经测试,以确保它们达到质量标准。设计出来的每100种草图和原型,只有7款最后投入生产。首批Cat的28款鞋共150,0000双于1994年春上市。到 1995年底Cat鞋的全球销量由1994年底的190万双上升到 320万双(批发价值为 1.44亿美元)。1997年Wolverine在109个国家售出近8百万对Cat牌鞋,在所有Caterpilliar授权商家总共8亿美 元的销售总额中占超过一半。1998年推出Technifiex科技,令鞋底于穿着时更具弯曲性及大大增加前掌灵活程度。2004年承前启后首创及推出iTECH科技系列,揉合运动鞋舒适性与工装鞋的坚固性。2007年音应潮流趋势,推出Women`S Collection系列,令时尚与科技再一次得到融合与升华。从此,热爱时尚的女性为自己的双脚找到一双能24小时候穿着的全天候Cat鞋。2008年全球500大品牌排名68,Caterpillar已成为世界畅销轻便鞋的十大品牌之一,已成为人类有史以来100个最受推崇最受认可的品牌。2009年Cat鞋在迪拜开设旗舰店,进驻阿拉伯联合酋长国市场。2010年经典工装黄靴Colorado诞生20周年纪念,Colorado有“穿在脚下的机器”的美誉,以其硬朗的风格,耐穿的品质持续风靡消费者市场。2011年首创及推出CODE系列,CODE系列的开发灵感源于60年代Caterpollar在全球高速发展时期,该系列的鞋款设计富有创新性及原创合作。 [1] 
收起全文
精华内容
下载资源
问答
  • 用于解决老版本的程序移植到新平台的问题 压缩包中包含TwinCAT2转换TwinCAT3的详细说明,以及一个样例
  • 倍福PLC的最新版本 TwinCAT 3 安装包 版本3.1.4024.11,官方安装包 为什么要大于50个字 倍福PLC的最新版本 TwinCAT 3 安装包 版本3.1.4024.11,官方安装包
  • TwinCAT3 教程

    2018-01-15 13:45:44
    倍福TwinCAT3软件的安装使用教程。包含以下主要内容 一、 TwinCAT3安装 二、 TwinCAT3的授权激活 三、 TwinCAT3扫描IO变量连接 四、 TwinCAT3编程语言的IEC61131-3标准 五、 TwinCAT3 PLC简单程序编写与调试 六...
  • TwinCAT 3 介绍

    2019-01-16 08:52:02
    前段时间参加培训所用资料,详细介绍倍福PLC TwinCAT3的特点
  • TwinCAT2入门教程

    2018-11-14 11:51:10
    TwinCAT PLC入门教程,V2.3版本,2018年更新。图片和说明比较详细
  • TwinCAT3.1-入门手册

    2017-09-15 11:28:27
    TwinCAT3.1-入门手册 适合初次接触倍福PLC ****************************************************************************************************************
  • TwinCat3入门教程

    2018-03-01 09:15:42
    本文是倍福控制器的开发软件TwinCat3的入门教材,对于初次使用倍福控制器的技术人员可以有很好的指导作用
  • TWINCAT3项目实例

    2018-05-15 16:58:14
    BECKHOFF TWINCAT3项目实例,VS2013编写,带FESTO伺服驱动。
  • srec_cat—bin转hex工具

    2018-08-29 22:31:35
    工具srec_cat, 可将bin转换为hex, 命令格式如下:srec_cat blob -Binary -Output blob.hex -Motorola 另该工具也支持hex转bin
  • TWINCAT V3.1安装及使用教程,利用TwinCAT3搭建EtherCAT主站环境流程
  • Twincat2软件安装包64位

    热门讨论 2018-01-24 17:00:14
    Twincat2软件安装包64位,亲测可以使用,安装后直接使用,需不需要任何破解,倍福PLC的twincat2是可以一直使用的,没有30天试用
  • Twincat2软件32位

    2018-01-25 08:55:42
    Twincat2软件32位最新安装包,亲测可以用。没有30天试用限制,可以一直使用。
  • TwinCAT3从入门教程

    2017-10-25 08:28:04
    TwinCAT3从入门教程对于机器人控制有及其强大的功能
  • TWINCAT31-Full-Setup.3.1.4022.4
  • 倍福TwinCAT3上位机与PLC通信测试(ADS通信) 包含C#和C++代码 程序介绍:https://www.cnblogs.com/JiYF/p/7780948.html 最底部有下载连接,不需要在这里下载 本次测试需要环境: VS2013,TwinCAT3(本人...
  • TwinCAT 2 注册机

    热门讨论 2016-04-20 12:30:03
    Beckhoff TwinCAT注册机
  • 倍福TwinCAT的库说明文档的中文chm手册,官方infosys文件为英文,不太容易看。希望该文档能有助于大家学习TwinCAT
  • 倍福PLC的最新版本TwinCAT_2.11.2302 兼容Win10 64位 百度网盘分享链接和提取码
  • 深入理解CatBoost

    千次阅读 多人点赞 2020-02-11 15:18:09
    CatBoost是一种基于对称决策树(oblivious trees)为基学习器实现的参数较少、支持类别型变量和高准确性的GBDT框架,主要解决的痛点是高效合理地处理类别型特征,这一点从它的名字中可以看出来,CatBoost是由...

    本文主要内容概览:
    在这里插入图片描述

    1.CatBoost简介

    CatBoost是俄罗斯的搜索巨头Yandex在2017年开源的机器学习库,是Boosting族算法的一种。CatBoost和XGBoost、LightGBM并称为GBDT的三大主流神器,都是在GBDT算法框架下的一种改进实现。XGBoost被广泛的应用于工业界,LightGBM有效的提升了GBDT的计算效率,而Yandex的CatBoost号称是比XGBoost和LightGBM在算法准确率等方面表现更为优秀的算法。

    CatBoost是一种基于对称决策树(oblivious trees)为基学习器实现的参数较少、支持类别型变量和高准确性的GBDT框架,主要解决的痛点是高效合理地处理类别型特征,这一点从它的名字中可以看出来,CatBoost是由Categorical和Boosting组成。此外,CatBoost还解决了梯度偏差(Gradient Bias)以及预测偏移(Prediction shift)的问题,从而减少过拟合的发生,进而提高算法的准确性和泛化能力。

    与XGBoost、LightGBM相比,CatBoost的创新点有:

    • 嵌入了自动将类别型特征处理为数值型特征的创新算法。首先对categorical features做一些统计,计算某个类别特征(category)出现的频率,之后加上超参数,生成新的数值型特征(numerical features)。
    • Catboost还使用了组合类别特征,可以利用到特征之间的联系,这极大的丰富了特征维度。
    • 采用排序提升的方法对抗训练集中的噪声点,从而避免梯度估计的偏差,进而解决预测偏移的问题。
    • 采用了完全对称树作为基模型。

    2. 类别型特征

    2.1 类别型特征的相关工作

    所谓类别型特征,即这类特征不是数值型特征,而是离散的集合,比如省份名(山东、山西、河北等),城市名(北京、上海、深圳等),学历(本科、硕士、博士等)。在梯度提升算法中,最常用的是将这些类别型特征转为数值型来处理,一般类别型特征会转化为一个或多个数值型特征。

    如果某个类别型特征基数比较低(low-cardinality features),即该特征的所有值去重后构成的集合元素个数比较少,一般利用One-hot编码方法将特征转为数值型。One-hot编码可以在数据预处理时完成,也可以在模型训练的时候完成,从训练时间的角度,后一种方法的实现更为高效,CatBoost对于基数较低的类别型特征也是采用后一种实现。

    显然,在高基数类别型特征(high cardinality features) 当中,比如 user ID,这种编码方式会产生大量新的特征,造成维度灾难。一种折中的办法是可以将类别分组成有限个的群体再进行One-hot编码。一种常被使用的方法是根据目标变量统计(Target Statistics,以下简称TS)进行分组,目标变量统计用于估算每个类别的目标变量期望值。甚至有人直接用TS作为一个新的数值型变量来代替原来的类别型变量。重要的是,可以通过对TS数值型特征的阈值设置,基于对数损失、基尼系数或者均方差,得到一个对于训练集而言将类别一分为二的所有可能划分当中最优的那个。在LightGBM当中,类别型特征用每一步梯度提升时的梯度统计(Gradient Statistics,以下简称GS)来表示。虽然为建树提供了重要的信息,但是这种方法有以下两个缺点:

    • 增加计算时间,因为需要对每一个类别型特征,在迭代的每一步,都需要对GS进行计算;
    • 增加存储需求,对于一个类别型变量,需要存储每一次分离每个节点的类别;

    为了克服这些缺点,LightGBM以损失部分信息为代价将所有的长尾类别归为一类,作者声称这样处理高基数类别型特征时比One-hot编码还是好不少。不过如果采用TS特征,那么对于每个类别只需要计算和存储一个数字。

    因此,采用TS作为一个新的数值型特征是最有效、信息损失最小的处理类别型特征的方法。TS也被广泛应用在点击预测任务当中,这个场景当中的类别型特征有用户、地区、广告、广告发布者等。接下来我们着重讨论TS,暂时将One-hot编码和GS放一边。

    2.2 目标变量统计(Target Statistics)

    CatBoost算法的设计初衷是为了更好的处理GBDT特征中的categorical features。在处理 GBDT特征中的categorical features的时候,最简单的方法是用 categorical feature 对应的标签的平均值来替换。在决策树中,标签平均值将作为节点分裂的标准。这种方法被称为 Greedy Target-based Statistics , 简称 Greedy TS,用公式来表达就是:

    x ^ k i = ∑ j = 1 n [ x j , k = x i , k ] ⋅ Y i ∑ j = 1 n [ x j , k = x i , k ] \hat{x}_k^i=\frac{\sum_{j=1}^{n}[x_{j,k}=x_{i,k}]\cdot Y_i}{\sum_{j=1}^{n}[x_{j,k}=x_{i,k}]} \\ x^ki=j=1n[xj,k=xi,k]j=1n[xj,k=xi,k]Yi

    这种方法有一个显而易见的缺陷,就是通常特征比标签包含更多的信息,如果强行用标签的平均值来表示特征的话,当训练数据集和测试数据集数据结构和分布不一样的时候会出条件偏移问题。

    一个标准的改进 Greedy TS的方式是添加先验分布项,这样可以减少噪声和低频率类别型数据对于数据分布的影响:

    x ^ k i = ∑ j = 1 p − 1 [ x σ j , k = x σ p , k ] Y σ j + a ⋅ p ∑ j = 1 p − 1 [ x σ j , k = x σ p , k ] + a \hat{x}_k^i=\frac{\sum_{j=1}^{p-1}{[x_{\sigma_{j,k}}=x_{\sigma_{p,k}}]}Y_{\sigma_{j}}+a\cdot p}{\sum_{j=1}^{p-1}{[x_{\sigma_{j,k}}=x_{\sigma_{p,k}}]}+a} \\ x^ki=j=1p1[xσj,k=xσp,k]+aj=1p1[xσj,k=xσp,k]Yσj+ap

    其中 p p p 是添加的先验项, a a a 通常是大于 0 0 0 的权重系数。添加先验项是一个普遍做法,针对类别数较少的特征,它可以减少噪声数据。对于回归问题,一般情况下,先验项可取数据集label的均值。对于二分类,先验项是正例的先验概率。利用多个数据集排列也是有效的,但是,如果直接计算可能导致过拟合。CatBoost利用了一个比较新颖的计算叶子节点值的方法,这种方式(oblivious trees,对称树)可以避免多个数据集排列中直接计算会出现过拟合的问题。

    当然,在论文《CatBoost: unbiased boosting with categorical features》中,还提到了其它几种改进Greedy TS的方法,分别有:Holdout TS、Leave-one-out TS、Ordered TS。我这里就不再翻译论文中的这些方法了,感兴趣的同学可以自己翻看一下原论文。

    2.3 特征组合

    值得注意的是几个类别型特征的任意组合都可视为新的特征。例如,在音乐推荐应用中,我们有两个类别型特征:用户ID和音乐流派。如果有些用户更喜欢摇滚乐,将用户ID和音乐流派转换为数字特征时,根据上述这些信息就会丢失。结合这两个特征就可以解决这个问题,并且可以得到一个新的强大的特征。然而,组合的数量会随着数据集中类别型特征的数量成指数增长,因此不可能在算法中考虑所有组合。为当前树构造新的分割点时,CatBoost会采用贪婪的策略考虑组合。对于树的第一次分割,不考虑任何组合。对于下一个分割,CatBoost将当前树的所有组合、类别型特征与数据集中的所有类别型特征相结合,并将新的组合类别型特征动态地转换为数值型特征。CatBoost还通过以下方式生成数值型特征和类别型特征的组合:树中选定的所有分割点都被视为具有两个值的类别型特征,并像类别型特征一样被进行组合考虑。

    2.4 CatBoost处理Categorical features总结

    • 首先会计算一些数据的statistics。计算某个category出现的频率,加上超参数,生成新的numerical features。这一策略要求同一标签数据不能排列在一起(即先全是 0 0 0之后全是 1 1 1这种方式),训练之前需要打乱数据集。
    • 第二,使用数据的不同排列(实际上是 4 4 4个)。在每一轮建立树之前,先扔一轮骰子,决定使用哪个排列来生成树。
    • 第三,考虑使用categorical features的不同组合。例如颜色和种类组合起来,可以构成类似于blue dog这样的特征。当需要组合的categorical features变多时,CatBoost只考虑一部分combinations。在选择第一个节点时,只考虑选择一个特征,例如A。在生成第二个节点时,考虑A和任意一个categorical feature的组合,选择其中最好的。就这样使用贪心算法生成combinations。
    • 第四,除非向gender这种维数很小的情况,不建议自己生成One-hot编码向量,最好交给算法来处理。
      在这里插入图片描述

    3. 克服梯度偏差

    对于学习CatBoost克服梯度偏差的内容,我提出了三个问题:

    • 为什么会有梯度偏差?
    • 梯度偏差造成了什么问题?
    • 如何解决梯度偏差?

    CatBoost和所有标准梯度提升算法一样,都是通过构建新树来拟合当前模型的梯度。然而,所有经典的提升算法都存在由有偏的点态梯度估计引起的过拟合问题。在每个步骤中使用的梯度都使用当前模型中的相同的数据点来估计,这导致估计梯度在特征空间的任何域中的分布与该域中梯度的真实分布相比发生了偏移,从而导致过拟合。为了解决这个问题,CatBoost对经典的梯度提升算法进行了一些改进,简要介绍如下。

    许多利用GBDT技术的算法(例如,XGBoost、LightGBM),构建下一棵树分为两个阶段:选择树结构和在树结构固定后计算叶子节点的值。为了选择最佳的树结构,算法通过枚举不同的分割,用这些分割构建树,对得到的叶子节点计算值,然后对得到的树计算评分,最后选择最佳的分割。两个阶段叶子节点的值都是被当做梯度或牛顿步长的近似值来计算。在CatBoost中,第一阶段采用梯度步长的无偏估计,第二阶段使用传统的GBDT方案执行。既然原来的梯度估计是有偏的,那么怎么能改成无偏估计呢?

    F i F_{i} Fi 为构建 i i i 棵树后的模型, g i ( X k , Y k ) g^i(X_k,Y_k) gi(Xk,Yk) 为构建 i i i 棵树后第 k k k 个训练样本上面的梯度值。为了使得 g i ( X k , Y k ) g^i(X_k,Y_k) gi(Xk,Yk) 无偏于模型 F i F_{i} Fi,我们需要在没有 X k X_k Xk 参与的情况下对模型 F i F_{i} Fi 进行训练。由于我们需要对所有训练样本计算无偏的梯度估计,乍看起来对于 F i F_{i} Fi 的训练不能使用任何样本,貌似无法实现的样子。我们运用下面这个技巧来处理这个问题:对于每一个样本 X k X_k Xk,我们训练一个单独的模型 M k M_k Mk ,且该模型从不使用基于该样本的梯度估计进行更新。我们使用 M k M_k Mk 来估计 X k X_{k} Xk 上的梯度,并使用这个估计对结果树进行评分。用伪码描述如下,其中 L o s s ( y j , a ) Loss(y_{j},a) Loss(yj,a) 是需要优化的损失函数, y y y 是标签值, a a a 是公式计算值。
    在这里插入图片描述

    4. 预测偏移和排序提升

    4.1 预测偏移

    对于学习预测偏移的内容,我提出了两个问题:

    • 什么是预测偏移?
    • 用什么办法解决预测偏移问题?

    预测偏移(Prediction shift)是由梯度偏差造成的。在GDBT的每一步迭代中, 损失函数使用相同的数据集求得当前模型的梯度, 然后训练得到基学习器, 但这会导致梯度估计偏差, 进而导致模型产生过拟合的问题。 CatBoost通过采用排序提升 (Ordered boosting) 的方式替换传统算法中梯度估计方法,进而减轻梯度估计的偏差,提高模型的泛化能力。下面我们对预测偏移进行详细的描述和分析。

    首先来看下GBDT的整体迭代过程:

    GBDT算法是通过一组分类器的串行迭代,最终得到一个强学习器,以此来进行更高精度的分类。它使用了前向分布算法,弱学习器使用分类回归树(CART)。

    假设前一轮迭代得到的强学习器是 F t − 1 ( x ) F^{t−1}(x) Ft1(x) , 损失函数是 L ( y , F t − 1 ( x ) ) L(y,{F^{t - 1}}(x)) L(y,Ft1(x)) ,则本轮迭代的目的是找到一个CART回归树模型的弱学习器 h t {h^t} ht ,让本轮的损失函数最小。式(1)表示的是本轮迭代的目标函数 h t {h^t} ht

    h t = arg ⁡ min ⁡ h ∈ H E L ( ( y , F t − 1 ( x ) + h ( x ) ) ) (1) {h^t} = \mathop {\arg \min }\limits_{h \in H} EL\left( {\left( {y,{F^{t - 1}}\left( x \right) + h\left( x \right)} \right)} \right) \tag{1} ht=hHargminEL((y,Ft1(x)+h(x)))(1)

    GBDT使用损失函数的负梯度来拟合每一轮的损失的近似值,式(2)中 g t ( x , y ) {g^t}(x,y) gt(x,y) 表示的是上述梯度。

    g t ( x , y ) = ∂ L ( y , s ) ∂ s ∣ s = F t − 1 ( x ) (2) {g^t}(x,y) = \frac{{\partial L(y,s)}}{{\partial s}}{|_{s = {F^{t - 1}}(x)}} \tag{2} gt(x,y)=sL(y,s)s=Ft1(x)(2)

    通常用式(3)近似拟合 h t {h^t} ht

    h t = arg ⁡ min ⁡ h ∈ H E ( − g t ( x , y ) − h ( x ) ) 2 (3) {h^t} = \mathop {\arg \min }\limits_{h \in H} E{( - {g^t}(x,y) - h(x))^2} \tag{3} ht=hHargminE(gt(x,y)h(x))2(3)

    最终得到本轮的强学习器,如式(4)所示:

    F t ( x ) = F t − 1 ( x ) + h t (4) {F^t}(x) = {F^{t - 1}}(x) + {h^t} \tag{4} Ft(x)=Ft1(x)+ht(4)

    在这个过程当中,偏移是这样发生的:

    根据 D \ { X k } \mathbb{D} \backslash \{X_k\} D\{Xk} 进行随机计算的条件分布 g t ( X k , y k ) ∣ X k g^t(X_k,y_k)|X_k gt(Xk,yk)Xk 与测试集的分布 g t ( X , y ) ∣ X g^t(X,y)|X gt(X,y)X 发生偏移,这样由公式(3)定义的基学习器 h t h^t ht 与公式(1)定义的产生偏差,最后影响模型 F t F^t Ft 的泛化能力。

    4.2 排序提升

    为了克服预测偏移问题,CatBoost提出了一种新的叫做Ordered boosting的算法。
    在这里插入图片描述
    由上图的Ordered boosting算法可知,为了得到无偏梯度估计, CatBoost对每一个样本 x i {x_i} xi 都会训练一个单独的模型 M i {M_i} Mi ,模型 M i {M_i} Mi 由使用不包含样本 x i {x_i} xi的训练集训练得到。我们使用 M i {M_i} Mi 来得到关于样本的梯度估计,并使用该梯度来训练基学习器并得到最终的模型。

    Ordered boosting算法好是好,但是在大部分的实际任务当中都不具备使用价值,因为需要训练 n n n 个不同的模型,大大增加的内存消耗和时间复杂度。在CatBoost当中,我们以决策树为基学习器的梯度提升算法的基础上,对该算法进行了改进。

    前面提到过,在传统的GBDT框架当中,构建下一棵树分为两个阶段:选择树结构和在树结构固定后计算叶子节点的值。CatBoost主要在第一阶段进行优化。在建树的阶段,CatBoost有两种提升模式,Ordered和Plain。Plain模式是采用内建的ordered TS对类别型特征进行转化后的标准GBDT算法。Ordered则是对Ordered boosting算法的优化。两种提升模式的具体介绍可以翻看论文《CatBoost: unbiased boosting with categorical features》。

    5. 快速评分

    CatBoost使用对称树(oblivious trees)作为基预测器。在这类树中,相同的分割准则在树的整个一层上使用。这种树是平衡的,不太容易过拟合。梯度提升对称树被成功地用于各种学习任务中。在对称树中,每个叶子节点的索引可以被编码为长度等于树深度的二进制向量。这在CatBoost模型评估器中得到了广泛的应用:我们首先将所有浮点特征、统计信息和独热编码特征进行二值化,然后使用二进制特征来计算模型预测值。

    6. 基于GPU实现快速训练

    • 密集的数值特征。 对于任何GBDT算法而言,最大的难点之一就是搜索最佳分割。尤其是对于密集的数值特征数据集来说,该步骤是建立决策树时的主要计算负担。CatBoost使用oblivious 决策树作为基模型,并将特征离散化到固定数量的箱子中以减少内存使用。就GPU内存使用而言,CatBoost至少与LightGBM一样有效。主要改进之处就是利用了一种不依赖于原子操作的直方图计算方法。
    • 类别型特征。 CatBoost实现了多种处理类别型特征的方法,并使用完美哈希来存储类别型特征的值,以减少内存使用。由于GPU内存的限制,在CPU RAM中存储按位压缩的完美哈希,以及要求的数据流、重叠计算和内存等操作。通过哈希来分组观察。在每个组中,我们需要计算一些统计量的前缀和。该统计量的计算使用分段扫描GPU图元实现。
    • 多GPU支持。 CatBoost中的GPU实现可支持多个GPU。分布式树学习可以通过数据或特征进行并行化。CatBoost采用多个学习数据集排列的计算方案,在训练期间计算类别型特征的统计数据。

    7. CatBoost的优缺点

    7.1 优点

    • 性能卓越: 在性能方面可以匹敌任何先进的机器学习算法;
    • 鲁棒性/强健性: 它减少了对很多超参数调优的需求,并降低了过度拟合的机会,这也使得模型变得更加具有通用性;
    • 易于使用: 提供与scikit集成的Python接口,以及R和命令行界面;
    • 实用: 可以处理类别型、数值型特征;
    • 可扩展: 支持自定义损失函数;

    7.2 缺点

    • 对于类别型特征的处理需要大量的内存和时间;
    • 不同随机数的设定对于模型预测结果有一定的影响;

    8. CatBoost实例

    本篇文章所有数据集和代码均在我的GitHub中,地址:https://github.com/Microstrong0305/WeChat-zhihu-csdnblog-code/tree/master/Ensemble%20Learning/CatBoost

    8.1 安装CatBoost依赖包

    pip install catboost
    

    8.2 CatBoost分类

    (1)数据集

    这里我使用了 2015 年航班延误的 Kaggle 数据集,其中同时包含类别型变量和数值变量。这个数据集中一共有约 500 万条记录,我使用了 1% 的数据:5 万行记录。数据集官方地址:https://www.kaggle.com/usdot/flight-delays#flights.csv 。以下是建模使用的特征:

    • 月、日、星期: 整型数据
    • 航线或航班号: 整型数据
    • 出发、到达机场: 数值数据
    • 出发时间: 浮点数据
    • 距离和飞行时间: 浮点数据
    • 到达延误情况: 这个特征作为预测目标,并转为二值变量:航班是否延误超过 10 分钟

    实验说明: 在对 CatBoost 调参时,很难对类别型特征赋予指标。因此,同时给出了不传递类别型特征时的调参结果,并评估了两个模型:一个包含类别型特征,另一个不包含。如果未在cat_features参数中传递任何内容,CatBoost会将所有列视为数值变量。注意,如果某一列数据中包含字符串值,CatBoost 算法就会抛出错误。另外,带有默认值的 int 型变量也会默认被当成数值数据处理。在 CatBoost 中,必须对变量进行声明,才可以让算法将其作为类别型变量处理。

    (2)不加Categorical features选项的代码

    import pandas as pd, numpy as np
    from sklearn.model_selection import train_test_split, GridSearchCV
    from sklearn import metrics
    import catboost as cb
    
    # 一共有约 500 万条记录,我使用了 1% 的数据:5 万行记录
    # data = pd.read_csv("flight-delays/flights.csv")
    # data = data.sample(frac=0.1, random_state=10)  # 500->50
    # data = data.sample(frac=0.1, random_state=10)  # 50->5
    # data.to_csv("flight-delays/min_flights.csv")
    
    # 读取 5 万行记录
    data = pd.read_csv("flight-delays/min_flights.csv")
    print(data.shape)  # (58191, 31)
    
    data = data[["MONTH", "DAY", "DAY_OF_WEEK", "AIRLINE", "FLIGHT_NUMBER", "DESTINATION_AIRPORT",
                 "ORIGIN_AIRPORT", "AIR_TIME", "DEPARTURE_TIME", "DISTANCE", "ARRIVAL_DELAY"]]
    data.dropna(inplace=True)
    
    data["ARRIVAL_DELAY"] = (data["ARRIVAL_DELAY"] > 10) * 1
    
    cols = ["AIRLINE", "FLIGHT_NUMBER", "DESTINATION_AIRPORT", "ORIGIN_AIRPORT"]
    for item in cols:
        data[item] = data[item].astype("category").cat.codes + 1
    
    train, test, y_train, y_test = train_test_split(data.drop(["ARRIVAL_DELAY"], axis=1), data["ARRIVAL_DELAY"],
                                                    random_state=10, test_size=0.25)
    
    cat_features_index = [0, 1, 2, 3, 4, 5, 6]
    
    
    def auc(m, train, test):
        return (metrics.roc_auc_score(y_train, m.predict_proba(train)[:, 1]),
                metrics.roc_auc_score(y_test, m.predict_proba(test)[:, 1]))
    
    
    # 调参,用网格搜索调出最优参数
    params = {'depth': [4, 7, 10],
              'learning_rate': [0.03, 0.1, 0.15],
              'l2_leaf_reg': [1, 4, 9],
              'iterations': [300, 500]}
    cb = cb.CatBoostClassifier()
    cb_model = GridSearchCV(cb, params, scoring="roc_auc", cv=3)
    cb_model.fit(train, y_train)
    # 查看最佳分数
    print(cb_model.best_score_)  # 0.7088001891107445
    # 查看最佳参数
    print(cb_model.best_params_)  # {'depth': 4, 'iterations': 500, 'l2_leaf_reg': 9, 'learning_rate': 0.15}
    
    # With Categorical features,用最优参数拟合数据
    clf = cb.CatBoostClassifier(eval_metric="AUC", depth=4, iterations=500, l2_leaf_reg=9,
                                learning_rate=0.15)
    
    clf.fit(train, y_train)
    
    print(auc(clf, train, test))  # (0.7809684655761157, 0.7104617034553192)
    

    (3)有Categorical features选项的代码

    import pandas as pd, numpy as np
    from sklearn.model_selection import train_test_split, GridSearchCV
    from sklearn import metrics
    import catboost as cb
    
    # 读取 5 万行记录
    data = pd.read_csv("flight-delays/min_flights.csv")
    print(data.shape)  # (58191, 31)
    
    data = data[["MONTH", "DAY", "DAY_OF_WEEK", "AIRLINE", "FLIGHT_NUMBER", "DESTINATION_AIRPORT",
                 "ORIGIN_AIRPORT", "AIR_TIME", "DEPARTURE_TIME", "DISTANCE", "ARRIVAL_DELAY"]]
    data.dropna(inplace=True)
    
    data["ARRIVAL_DELAY"] = (data["ARRIVAL_DELAY"] > 10) * 1
    
    cols = ["AIRLINE", "FLIGHT_NUMBER", "DESTINATION_AIRPORT", "ORIGIN_AIRPORT"]
    for item in cols:
        data[item] = data[item].astype("category").cat.codes + 1
    
    train, test, y_train, y_test = train_test_split(data.drop(["ARRIVAL_DELAY"], axis=1), data["ARRIVAL_DELAY"],
                                                    random_state=10, test_size=0.25)
    
    cat_features_index = [0, 1, 2, 3, 4, 5, 6]
    
    
    def auc(m, train, test):
        return (metrics.roc_auc_score(y_train, m.predict_proba(train)[:, 1]),
                metrics.roc_auc_score(y_test, m.predict_proba(test)[:, 1]))
    
    
    # With Categorical features
    clf = cb.CatBoostClassifier(eval_metric="AUC", one_hot_max_size=31, depth=4, iterations=500, l2_leaf_reg=9,
                                learning_rate=0.15)
    clf.fit(train, y_train, cat_features=cat_features_index)
    
    print(auc(clf, train, test))  # (0.7817912095285117, 0.7152541135019913)
    

    8.3 CatBoost回归

    from catboost import CatBoostRegressor
    
    # Initialize data
    
    train_data = [[1, 4, 5, 6],
                  [4, 5, 6, 7],
                  [30, 40, 50, 60]]
    
    eval_data = [[2, 4, 6, 8],
                 [1, 4, 50, 60]]
    
    train_labels = [10, 20, 30]
    # Initialize CatBoostRegressor
    model = CatBoostRegressor(iterations=2,
                              learning_rate=1,
                              depth=2)
    # Fit model
    model.fit(train_data, train_labels)
    # Get predictions
    preds = model.predict(eval_data)
    print(preds)
    

    9. 关于CatBoost若干问题思考

    9.1 CatBoost与XGBoost、LightGBM的联系与区别?

    (1)2014年3月XGBoost算法首次被陈天奇提出,但是直到2016年才逐渐著名。2017年1月微软发布LightGBM第一个稳定版本。2017年4月Yandex开源CatBoost。自从XGBoost被提出之后,很多文章都在对其进行各种改进,CatBoost和LightGBM就是其中的两种。

    (2)CatBoost处理类别型特征十分灵活,可直接传入类别型特征的列标识,模型会自动将其使用One-hot编码,还可通过设置 one_hot_max_size参数来限制One-hot特征向量的长度。如果不传入类别型特征的列标识,那么CatBoost会把所有列视为数值特征。对于One-hot编码超过设定的one_hot_max_size值的特征来说,CatBoost将会使用一种高效的encoding方法,与mean encoding类似,但是会降低过拟合。处理过程如下:

    • 将输入样本集随机排序,并生成多组随机排列的情况;
    • 将浮点型或属性值标记转化为整数;
    • 将所有的类别型特征值结果都根据以下公式,转化为数值结果;

    a v g _ t a r g e t = c o u n t I n C l a s s + p r i o r t o t a l C o u n t + 1 avg\_target = \frac{countInClass + prior}{totalCount + 1} \\ avg_target=totalCount+1countInClass+prior

    其中 countInClass 表示在当前类别型特征值中有多少样本的标记值是 1 1 1;prior 是分子的初始值,根据初始参数确定。totalCount 是在所有样本中(包含当前样本)和当前样本具有相同的类别型特征值的样本数量。

    LighGBM 和 CatBoost 类似,也可以通过使用特征名称的输入来处理类别型特征数据,它没有对数据进行独热编码,因此速度比独热编码快得多。LighGBM 使用了一个特殊的算法来确定属性特征的分割值。

    train_data = lgb.Dataset(data, label=label, feature_name=['c1', 'c2', 'c3'], categorical_feature=['c3'])
    

    注意,在建立适用于 LighGBM 的数据集之前,需要将类别型特征变量转化为整型变量,此算法不允许将字符串数据传给类别型变量参数。

    XGBoost 和 CatBoost、 LighGBM 算法不同,XGBoost 本身无法处理类别型特征,而是像随机森林一样,只接受数值数据。因此在将类别型特征数据传入 XGBoost 之前,必须通过各种编码方式:例如,序号编码、独热编码和二进制编码等对数据进行处理。

    10. Reference

    CatBoost论文解读:

    【1】Prokhorenkova L, Gusev G, Vorobev A, et al. CatBoost: unbiased boosting with categorical features[C]//Advances in Neural Information Processing Systems. 2018: 6638-6648.
    【2】Dorogush A V, Ershov V, Gulin A. CatBoost: gradient boosting with categorical features support[J]. arXiv preprint arXiv:1810.11363, 2018.
    【3】机器学习算法之Catboost,地址:https://www.biaodianfu.com/catboost.html
    【4】oblivious tree在机器学习中有什么用? - 李大猫的回答 - 知乎 https://www.zhihu.com/question/311641149/answer/593286799
    【5】CatBoost算法梳理,地址:http://datacruiser.io/2019/08/19/DataWhale-Workout-No-8-CatBoost-Summary/

    CatBoost算法讲解:

    【6】catboost完全指南,地址:https://zhuanlan.zhihu.com/p/102570430
    【7】CatBoost原理及实践 - Dukey的文章 - 知乎 https://zhuanlan.zhihu.com/p/37916954
    【8】 22(7).模型融合—CatBoost,地址:https://www.cnblogs.com/nxf-rabbit75/p/10923549.html#auto_id_0
    【9】catboost对类别特征处理的简单总结,地址:https://blog.csdn.net/weixin_42944192/article/details/102463796
    【10】Python3机器学习实践:集成学习之CatBoost - AnFany的文章 - 知乎 https://zhuanlan.zhihu.com/p/53591724

    CatBoost实战:

    【11】Catboost 一个超级简单实用的boost算法,地址:https://www.jianshu.com/p/49ab87122562
    【12】苗丰顺, 李岩, 高岑, 王美吉, 李冬梅. 基于CatBoost算法的糖尿病预测方法. 计算机系统应用, 2019, 28(9): 215-218.http://www.c-s-a.org.cn/1003-3254/7054.html
    【13】Battle of the Boosting Algos: LGB, XGB, Catboost,地址: https://www.kaggle.com/lavanyashukla01/battle-of-the-boosting-algos-lgb-xgb-catboost
    【14】Simple CatBoost,地址:https://www.kaggle.com/nicapotato/simple-catboost
    【15】CatBoost Usage examples,地址:https://catboost.ai/docs/concepts/python-usages-examples.html

    CatBoost的若干思考:

    【16】入门 | 从结构到性能,一文概述XGBoost、Light GBM和CatBoost的同与不同,地址:https://mp.weixin.qq.com/s/TD3RbdDidCrcL45oWpxNmw

    展开全文
  • TWINCAT软件

    热门讨论 2014-01-25 06:37:12
    TWINCAT x64软件,找了好久才找到的,学习用。
  • 大众点评CAT监控解析

    热门讨论 2014-06-03 11:39:37
    描述大众点评的CAT监控系统,包括了其设计与技术实现方案,以及图表展示示例
  • C#与TwinCAT通讯实例

    2015-02-08 10:02:01
    通过这篇文档,你可以全方位的掌握如何利用C#与TWINCAT之间的通讯。
  • CAT分布式监控系统(二):CAT埋点方案 项目接入CAT监控说明 本文概要: 前面《CAT监控功能介绍》已经介绍了CAT监控系统是什么、能做什么; 而本文主要是基于自己编写的CAT采集端埋点SDK,来说明CAT埋点方案...

     CAT分布式监控系统(二):CAT埋点方案  项目接入CAT监控说明

     

    本文概要:

                 前面《CAT监控功能介绍》已经介绍了CAT监控系统是什么、能做什么;

                 而本文主要是基于自己编写的CAT采集端埋点SDK,来说明CAT埋点方案,以及项目中如何接入CAT监控。

     

    1、配置/data/appdatas/cat/client.xml

        说明:
                client.xml是配置CAT服务端地址的,这样监控数据才能发送到服务端。

                如果该配置文件不存在,(就算配置了后面的配置项)CAT监控不会启用,会打印出warn级别的日志:

                        CAT Monitor Disabled: CAT client configuration file does not exist!


                
        LINUX环境下:
                创建目录,并分配权限:
                        [root@tjy ~]# mkdir -p /data/appdatas/cat
                        [root@tjy ~]# chmod 777 /data/ -R
                配置client.xml文件:
                        [root@tjy ~]# ll /data/appdatas/cat/client.xml 
                        -rw-r--r-- 1 root root 360 7月  26 16:06 /data/appdatas/cat/client.xml
                        [root@tjy ~]#
                        [root@tjy ~]# cat !$
                        cat /data/appdatas/cat/client.xml
                        <?xml version="1.0" encoding="utf-8"?>

                        <config mode="client" xmlns:xsi="http://www.w3.org/2001/XMLSchema" xsi:noNamespaceSchemaLocation="config.xsd">
                            <servers>
                                <server ip="cat.xxx.cn" port="2250" http-port="8250"/>
                                <server ip="cat.xxx.cn" port="2251" http-port="8251"/>
                                <server ip="cat.xxx.cn" port="2252" http-port="8252"/>
                            </servers>
                        </config>
        
        WINDOWS环境下:
                同样的,在程序运行盘下创建盘下的/data/appdatas/cat目录,目录中配置client.xml。
                注意:如果tomcat安装D盘,eclipse安装F盘,在eclipse中用tomcat运行程序,应该创建F:/data/appdatas/cat
        
        配置可以加入CAT的开关,用于关闭CAT消息发送,将enabled改为false,如下表示将gc-pay这个项目关闭:
              <config mode="client">
                <servers>
                    <server ip="cat.xxx.cn" port="2250" http-port="8250"/>
                    <server ip="cat.xxx.cn" port="2251" http-port="8251"/>
                    <server ip="cat.xxx.cn" port="2252" http-port="8252"/>
                </servers>
                <domain id="gc-pay" enabled="false"/>
            </config>   

    2、pom.xml引入CAT客户端SDK依赖

                <dependency>
                  <groupId>com.tjy</groupId>
                  <artifactId>my-cat-client</artifactId>
                  <version>1.1.0</version>
                </dependency>
        
        说明:
                my-cat-client是我们自己编写的SDK,版本可能会变化,查看最新版本:
                         my-cat-client版本说明
                
                my-cat-client SDK依赖了原CAT客户端cat-client,关于cat-client下载仓库:
                        公司私有仓库已有:Index of /groups/public/com/dianping/cat/cat-client/2.0.0
                                cat-client-2.0.0.jar
                                是基于Build-Jdk: 1.7.0_71
                                
                        如需要公有云仓库,cat提供的公有云仓库配置:
                              <repositories>
                                <repository>
                                   <id>central</id>
                                   <name>Maven2 Central Repository</name>
                                   <layout>default</layout>
                                   <url>http://repo1.maven.org/maven2</url>
                                </repository>
                                <repository>
                                   <id>unidal.releases</id>
                                   <url>http://unidal.org/nexus/content/repositories/releases/</url>
                                </repository>
                             </repositories>
                             <pluginRepositories>
                                <pluginRepository>
                                   <id>central</id>
                                   <url>http://repo1.maven.org/maven2</url>
                                </pluginRepository>
                                <pluginRepository>
                                   <id>unidal.releases</id>
                                   <url>http://unidal.org/nexus/content/repositories/releases/</url>
                                </pluginRepository>
                             </pluginRepositories>         

    3、配置domain

        说明:
                也就是应用的名称,当有监控数据上传到CAT后,一会就可以在CAT页面上看到该名称的应用。
                当在CAT页面选择该应用后,就可以看到该应用所有服务实例的监控数据。
                因为跟踪ID的前缀就是配置的domain。
        
        配置:
              在项目工程里resources资源文件META-INF下,注意是src/main/resources/META-INF/文件夹,而不是webapps下的那个META-INF,添加app.properties文件;
              app.properties文件里配置domain,如:
                        app.name=my-project-name

    4、开启CAT监控–@EnableCatClient

            在Spring容器能扫描到的地方配置注解@EnableCatClient,开启CAT监控。
            如Spring Boot程序,可以在如下配置:
                    @SpringBootApplication
                    @EnableCatClient
                    public class ServiceRibbonApplication {
                        ......
                    }
            
            CAT监控延时初始化说明:
                    @EnableCatClient默认禁用CAT监控延时初始化,即在程序启动时初始化。
                    因为延时初始化可能会在第一次监控请求时触发初始化,导致该请求响应时间大大增加。
                    
                    建议保持默认禁用该功能。
                    如果启用请配置:
                            @EnableCatClient(lazyInit=true)

    5、跨服务全链路跟踪功能

            @EnableCatClient开启CAT监控后,会有跨服务全链路跟踪功能。
            暂时支持该功能的通信组件如下:
                    Spring Cloud Ribbon、Spring Cloud Feign(不兼容Sleuth)、Dubbo RPC

    6、Servlet容器HTTP访问监控功能

            @EnableCatClient开启CAT监控后,默认启用对Servlet容器(Tomcat)的HTTP URL访问监控功能。
            用来记录外部的URL访问。
            
            禁用配置:
                建议默认开启该功能。
                如果没有用到Servlet容器(如tomcat)运行应用程序,或应用程序对外不提供URL访问,可以禁用该功能,只需要配置:
                        @EnableCatClient(enableCatFilter=false)

    7、方法调用监控

            @EnableCatClient开启CAT监控后,可以用以下两种方法来指定需要监控的方法调用。

            7-1、包路径方法监控

                    @EnableCatClient提供methodMonitorPackages参数来设置包路径方法监控。
                    可设置多个包路径,如:
                            @EnableCatClient(methodMonitorPackages={"com.tjy.test.web", "com.tjy.test.service"})
                            
                            "com.tjy.test.web"和"com.tjy.test.service"包路径及其子包路径中的所有公开(public)方法将获得监控。
                    
                    默认值为一个无效的包路径,即默认不设置的情况下,不监控任何方法。

     

                   另外,方法调用异常时,仅记录异常状态(名称),不记录详细的异常信息。

                    如果需要记录异常堆栈信息,可以用下面的注解方法监控。

            

            7-2、注解方法监控

                    @CatMethodMonitor注解可标识指定目标方法进行监控。
                    @CatMethodMonitor可以标注在实现类上,或实现类的方法上;暂时不支持标注在接口及其方法上的监控。
                    
                    @CatMethodMonitor有一个参数isRecordException,用来指示是否记录方法抛出的异常堆栈信息。
                    默认仅记录异常状态(名称),不记录详细的异常信息。
                    如果不配置Servlet容器HTTP访问监控功能的情况下,建议在外部访问的Controller层启用该参数,以记录抛出的异常堆栈信息:
                            @CatMethodMonitor(isRecordException=true)

    8、SQL执行监控

           从my-cat-client V1.0.0版本开始支持Mybatis3执行SQL(时间、异常)情况的监控。

           只要配置提供的Mybtis插件:

                  com.tjy.monitor.catclient.mybatis.CatMybatisSqlMonitorPlugin

            

           配置参考:

                  1、Spring Boot方式(Java配置)

                         推荐使用这种集成方式:

                                Spring Boot + Mybatis + Druid(数据库连接池)

                                注意:

                                       这种方式必须引用mybatis-spring-boot-starter,才能使用下面的配置类直接返回插件拦截器,否则不生效。

                                       这种方式可以不用配置Mybitas SqlSessionFactory;

                                       也可以不配置DataSource,但建议另外引用配置Druid。

                         配置类:

                                @Configuration

                                public class CatMonitorConfiguration {

                                    @Bean

                                     public Interceptor paginationInterceptor() {

                                          CatMybatisSqlMonitorPlugin plugin = new CatMybatisSqlMonitorPlugin();

                                          return plugin;

                                     }

                                }               

                  2、XML文件(mybatis-conf.xml)配置方式

                            <!-- CAT监控插件 -->

                            <plugins>

                              <plugin interceptor="com.tjy.monitor.catclient.mybatis.CatMybatisSqlMonitorPlugin">

                              </plugin>

                            </plugins>             

                  3、Mybitas SqlSessionFactory配置方式

                         如果没有mybatis-conf.xml配置文件,可以把插件配置到Mybitas SqlSessionFactory里。

                         XML配置如下:

                                <!-- 配置mybitas SqlSessionFactory Bean -->

                                <bean id="sqlSessionFactory" class="org.mybatis.spring.SqlSessionFactoryBean">

                                    ......(dataSource配置等等)

                                    <!-- CAT监控插件 -->

                                    <property name="plugins">

                                        <array>

                                            <bean class="com.tjy.monitor.catclient.mybatis.CatMybatisSqlMonitorPlugin">

                                            </bean>

                                        </array>

                                    </property>

                                </bean>

                         Java配置如下:

                                 @Bean

                                 public SqlSessionFactoryBean createSqlSessionFactory() {

                                     SqlSessionFactoryBean sqlSessionFactoryBean = new SqlSessionFactoryBean();

                                     ......(dataSource配置等等)

                                     // CAT监控插件

                                     Interceptor[] plugins = { new CatMybatisSqlMonitorPlugin() };

                                     sqlSessionFactoryBean.setPlugins( plugins );

                                     return sqlSessionFactoryBean;

                                 }

    9、配置日志框架

            CAT支持Log4j、Log4j2、Logback的集成。
            属于可选功能,即对logger.xxx()有效,不影响CAT埋点API。
            
            功能说明:
                        1、仅上传包含异常的ERROR级别日志
                                ERROR级别,且需要包含异常堆栈信息,即Throwable对象,否则CAT不上传;
                                如这API打印的错误信息:
                                       org.slf4j.Logger.error(String msg, Throwable t)                
                              
                        
                        2、在一个messageTree内部,cat内部会针对同样的异常,如果连续调用两次logError(e),仅仅会上报第一份exception。
                                注意框架打印了一个Exception,如果业务包装此异常为new BizException(e),这样仍旧算两次异常,上报两份。        
                        
            测试:
                        如下在启动时打印日志测试:
                                logger.error("produce-01 error test...", new RuntimeException("need ThrowableInformation"));
                                Cat.getManager().setTraceMode(true);
                                logger.info("produce-01 starting...");
                        
                        CAT页面会看到如下信息
                                t10:19:26.145    System    MergeTree        
                                  E10:19:26.145    RuntimeException    java.lang.RuntimeException    ERROR    produce-01 error test... java.lang.RuntimeException: need ThrowableInformation
                                                                                                                                                                        at com.test.producer.Produce1.main(Produce1.java:19)
                                T10:19:26.155    System    MergeTree         10ms         

            9-1、Log4j集成

                说明:
                        cat-client提供继承了Log4j.AppenderSkeleton的CatAppender,用来监控上传程序中log4j打印的日志。
                
                配置:            
                        在Log4j的配置文件中配置CatAppender;
                        
                        如上面说明中,没有开启traceMode的情况下,只记录包含异常堆栈信息的ERROR级别日志;
                        这样的话,建议在Root节点中添加此Appendar,业务程序的所有异常都通过记录到CAT中,方便看到业务程序的问题。
                        
                        如果需要info/warn级别的日志(开启traceMode),或需要控制ERROR日志;
                        可自定义细粒度控制,把catAppender添加到具体路径即可,下面只作参考。
                        
                        xml文件配置方式:
                            <appender name="catAppender" class="com.dianping.cat.log4j.CatAppender"></appender>
                                
                                <!--细粒度控制包的日志级别(参考) -->
                                <logger name="com.test" additivity="false">
                                    <level value="debug" />
                                    <appender-ref ref="log.console" />
                                    <appender-ref ref="catAppender" />
                                </logger>
                                
                                <!--全局日志(参考) -->
                                <root>
                                    <level value="info" />
                                    <appender-ref ref="log.console" />
                                    <appender-ref ref="catAppender"/>
                                </root>     
                        
                        properties文件配置方式:
                                log4j.appender.catAppender = com.dianping.cat.log4j.CatAppender
                                
                                #参考
                                log4j.logger.com.tjy.service = info,catAppender            

            9-2、Logback集成

                说明:
                        cat-client 2.0.0版本并没有支持,需要用master代码来编译;
                        但现在master代码的CatLogbackAppender,和log4j的CatAppender行为不一致(行为是指上面的"说明")。

                        所以,应该使用我们自己封装的SDK(gc-cat-client) 里的CatLogbackAppender,以获得一致的行为,类名如下:
                                com.tjy.monitor.catclient.logback.CatLogbackAppender
                
                配置:
                        有关说明同log4j。
                        
                        xml文件配置方式:
                            <appender name="CatAppender" class="com.tjy.monitor.catclient.logback.CatLogbackAppender"></appender>

                            <root level="info">
                                <appender-ref ref="CatAppender" />
                            </root>


    10、页面配置

            对项目进行了以上配置,部署(测试)后就会有监控数据上传到我们的CAT服务器集群。
            这时需要对CAT服务页面上进行一些配置,以便我们能看到自己项目的监控数据、报表。
            
            访问地址:
                    实时:http://192.168.1.52:8888/cat/r/t
                    文档:http://192.168.1.52:8888/cat/r/home
                    配置(帐号/密码都为admin):http://192.168.1.52:8888/cat/s/config
                    全局报表:http://192.168.1.52:8888/cat/r/overload

           10-1、“项目基本信息”配置

                    前面"配置domain"也说过,当项目刚开始接入有监控数据上传到CAT后,会在CAT“项目基本信息”配置页面上看到该名称的应用。
                    “项目基本信息”配置页面配置页面:http://192.168.1.52:8888/cat/s/config?op=projects
                        注意:
                                直接在搜索框输入配置的项目domain的前面几个字符,应该可以在下拉框看到完整的项目domain,直接选择就可以了。
                                如果下拉框没有出现项目domain,说明接入配置有问题。

                                如下图所示:


                    
                    “项目基本信息”配置可以按页面上的说明填写,后期也可以更改的。        

            10-2、“项目分组配置”配置

                    这里需要添加配置好的项目,否则在后面的“应用监控配置”-》“业务监控配置”页面就没无法选择自己的项目进行配置了。

            10-3、其他配置

                    其他配置就看着配置吧,不太重要。
            
            页面配置好后,进入实时数据页面:http://192.168.1.52:8888/cat/r/t
            点击最上面的“全部”按键,出现的下拉框就会看到配置的所有项目。(也可以在输入框直接输入项目名称)

            如下图所示:


            
            当在选择自己的项目后,就可以看到该项目所有服务实例的监控数据了。
            更多功能说明请参考前面的《CAT监控功能介绍》。              

    展开全文
  • TWINCAT 2.11 2230 64位

    热门讨论 2014-10-14 16:50:56
    TWINCAT 2.11 2230 64位
  • Cat.1、Cat.4、4G之间的区别

    千次阅读 2021-08-31 15:13:26
    什么是Cat.1? Ca...

    什么是Cat.1?

    Cat.1的全称是LTEUE-Category1,其中UE指的是用户设备,它是LTE网络下用户终端设备的无线性能的分类。根据3GPP的定义,UE类别以1-15分为15个等级。Cat.1,可以称为“低配版”的 4G 终端,上行峰值速率5Mbit/s,下行峰值速率10Mbit/s,属于蜂窝物联网,是广域网 。Cat.1的最终目标是服务于物联网并实现低功耗和低成本LTE连接的目的,这对物联网的发展具有重要意义。

    什么是Cat.4?

    Cat.4的全称是LTE UE-Category 4,也就是LTE的ue-Category设置为4。而ue-Category指的是UE的接入能力等级,也就是UE能够支持的传输速率的等级。 

    什么是4G?

    4G是指第四代移动通信技术(缩写为“4G”)。4102“4G”包括TD-LTE和FDD-LTE。这是3G技术的更好改进。与3G通信技术相比,它具有更大的优势。它是WLAN技术和3G通信技术的完美结合,可以使图像传输速度更快。使传输的图像质量和图像看起来更清晰。4G通信技术在智能通信设备中的应用使用户的互联网速度更快,速度可高达100Mbps。

    Cat.1和Cat.4的区别

    要区别Cat.1和Cat.4,首先我们要知道Cat是什么。Cat 是 Category 的缩写,中文意思是“类别,种类”。Cat 后面的数字即代表不同的种类,3GPP 将不同种类的网络用 “Cat.X” 格式命名。根据 3GPP Release 定义,Cat.X 是用来描述用户终端的能力等级,根据终端通讯速率来划分。 

    Cat.1Cat.4参数对比

    up-31f5e4810a83e725d4cde2d29622de55553.png

    Cat.1Cat.4应用场景对比

    up-dcac1c73a022905a0004063c64b43c43d81.png

    Cat.1和4G之间的区别

    Cat.1属于4G系列,可以完全重用现有的4G资源。尽管4g模块主要使用Cat.4,下载速率可以达到150m,但是大多数IoT场景并没有如此高的速率要求。随着成熟的4G产业链的发展,Cat.1作为4G的低端版本,只需要对现有4G产品进行少量改动,就可以迅速推向市场并降低成本,达到行业预期范围。Cat.1是配置为最低版本参数的用户终端级别,可让业界以低成本设计低端4G终端。

    当然,“低版本”4G终端Cat.1在行业中也起着重要作用。例如,一些手机制造商考虑使用Cat.1芯片来发布4G老年人智能手机,因为许多老年人机器仅需要基本通话和数据。Cat.1功能支持低成本的VoLTE和低速率数据,为移动电话制造商提供了新的选择。但是,Cat.1在物联网领域的重要性可能更为重要。

    与NB-IoT和2G模块相比,Cat.1在网络覆盖范围,速度和延迟方面具有优势。与传统的Cat.4模块相比,它具有成本低,功耗低的优点。同时,Cat.1适用于当前的家用4G网络,非常适合需要成本性能,延迟,覆盖范围和通信速度的应用场景。

    Cat.1的发展前景

    在蜂窝物联网连接的代际迁移过程中,原始2G/3G连接只能由NB-IoT和4G进行。其中,低频,小分组,低移动性,低延迟敏感性,高成本敏感性的场景可以通过NB-IoT进行;中等速率,对延迟和移动性的某些要求,对语音和成本的支持具有一定承受能力的方案可以通过Cat.1进行。

    4GIoT连接具有明显的结构特征,其中Cat.1是值得关注的分支。从蜂窝物联网的当前发展趋势来看,Cat.1承担起4GIoT连接主要角色的时机已经打开。

    Cat.1模块自身的优势

    Cat.1支持高达10Mbps的终端下行链路速率,从而能够以更低的功耗和更低的成本IoT设备连接到LTE网络。由于世界各地的4GLTE运营商均基于最低3GPPRelease8协议版本进行部署,因此运营商无需升级网络,仅需要简单的参数配置即可允许Cat.1终端访问网络。

    成熟的网络覆盖

    根据工业和信息化部的最新数据,到2019年底,4G基站的数量已超过500万。基于这种成熟的LTE网络部署,无需重新铺设网络即可完成Cat1的升级。互联网速度高于2/3G,2/3G网络在静态物联网市场中拥有巨大的市场,但不适用于诸如实时语音之类的业务场景。Cat1产品的最大下行速率为10Mbps,最大上行速率为5Mbps。

    市场优势

    在未来的数百亿个IoT连接中,网络容量要求将有所不同。根据业界的说法,10%的节点需要高带宽和高速通信技术,例如高速4G,5G等。30%的节点需要中速传输技术,主要技术是Cat.1和eMTC;60%的节点需要低速连接技术,例如NB-IoT,LoRa等。

    成本低于4G

    尽管Cat4及更高版本的解决方案支持高速率,但对于物联网行业而言,其成本价格通常相对较高,并且Cat1的高度集成为客户提供了最佳的性价比。

    Cat.1与其他技术相比的优势

    与NB-IoT,eMTC和Cat.4相比,Cat.1具有以下优势:

    1、与NB-IoT相比,Cat.1在通信功能上具有更明显的优势。NB-IoT适用于仅传输少量数据且处于固定状态的场景。典型的情况是三米(水表,电表,煤气表)。Cat.1不仅可以传输更大的数据,而且具有良好的移动性和语音功能。

    2、与eMTC相比,Cat.1的最大优势在于其较低的网络成本。Cat.1可以无缝访问现有LTE网络,而无需升级基站的硬件和软件。并且信号保证,有Cat.1的地方有4G信号。

    3、与Cat.4相比Cat.1更具成本优势:例如网络建设上,现在LTE Cat.1可以无缝接入现有LTE网络当中,无需针对基站进行软硬件的升级,网络覆盖成本很低。芯片成本上,经过系统优化后,集成度更高,模组的硬件架构更简单,外围硬件成本更低。Cat.1与Cat.4比较,在速率、时延和移动性方面,具有相同的优势拥有跟LTE Cat.4相同的毫秒级传输时延,以及支持100KM/H以上的移动速度。Cat.1更具应用优势:由于Cat.1隶属于4G系列,完全可以直接复用4G现有资源。Cat.4迁移至Cat.1,收益明显。例如对讲机、玩具机器人等采用4G做语音交互的场景,之前用Cat.4完全可以转用Cat.1。许多在语音功能以及中速率连接的场景,都将有Cat.1的发挥之处。这些场景包括了共享、金融支付、工业控制、车载支付、公网对讲、pos等等。

    Cat.1、Cat.4应用场景

    1、Cat.1的应用场景:穿戴式设备、智能家电、工业传感器、水文水利的检测、港口物流跟踪。共享支付类。对于宽带速率要求不高,同时又对是电池供电。对功耗与数据传输稳定性要求都很高。

    2、Cat.4的应用场景:车联网,智能电网、4G无线路由、视频安防、商显设备、4G执法仪。视频直播设备。等对于宽带速率要求非常高。同时对稳定性要求更高。

    为什么Cat.1这么火?

    1、2G/3G 退网的必然:随着2G、3G的退网成为必然选择,基于4G/5G(NB-IoT+4G+5GNR)的物联网技术将担当起开启万物互联的大任。

    2、5G 的建设,以及更好地利用频带:手机等移动终端最终会迁移到 4G/5G 及以上网络,2G/3G 频带被闲置,4G 频带被 5G 分担,为了更好的利用频谱资源,那么需要将网络接入能力开发给有网络需求的众多物联网设备。

    3、NB-IOT 无法满足中速率及移动特性需求。

    4、Cat.4 大材小用,成本高。

    5、Cat.1 自身的优势。

    6、常见的LTE Cat.4无法满足部分物联网设备通信需求:LTE在最初设计时是为了解决一个最主要的需求——它必须足够快。尽管该技术可以满足移动宽带通讯的需求,但是它无法在一些应用产品中得到很好的运用,比如穿戴式设备、工业传感器、家用电器等。而这类设备的特点是尺寸小,电池供电,而且经常会被放在诸如地下室等网络覆盖不好或者甚至无信号的地方。

    展开全文
  • 驱动签名及创建cat文件

    热门讨论 2014-05-28 10:23:27
    windows驱动文件.sys和.inf文件如何创建cat文件及签名的方法流程。当然,前提需要有一个微软的证书。
  • catboost原理

    千次阅读 多人点赞 2020-02-20 21:32:24
    文章目录概述原理类别型特征类别型特征的相关工作目标变量统计(Target Statistics)CatBoost处理Categorical features总结梯度偏差/预测偏移为什么会有梯度偏差?梯度偏差造成了什么问题?如何解决梯度偏差/预测...

    概述

    CatBoost是俄罗斯的搜索巨头Yandex在2017年开源的机器学习库,是Boosting族算法的一种。CatBoost和XGBoost、LightGBM并称为GBDT的三大主流神器,都是在GBDT算法框架下的一种改进实现。XGBoost被广泛的应用于工业界,LightGBM有效的提升了GBDT的计算效率,而Yandex的CatBoost号称是比XGBoost和LightGBM在算法准确率等方面表现更为优秀的算法。

    CatBoost是一种基于对称决策树(oblivious trees)为基学习器实现的参数较少、支持类别型变量和高准确性的GBDT框架,主要解决的痛点是高效合理地处理类别型特征,CatBoost是由Categorical和Boosting组成。此外,CatBoost还解决了梯度偏差(Gradient Bias)及预测偏移(Prediction shift)的问题,从而减少过拟合的发生,进而提高算法的准确性和泛化能力。

    与XGBoost、LightGBM相比,CatBoost的创新点有:

    • 嵌入了自动将类别型特征处理为数值型特征的创新算法。首先对categorical features做一些统计,计算某个类别特征(category)出现的频率,之后加上超参数,生成新的数值型特征(numerical features)。
    • Catboost还使用了组合类别特征,可以利用到特征之间的联系,这极大的丰富了特征维度。
    • 采用ordered boost的方法避免梯度估计的偏差,进而解决预测偏移的问题。
    • 采用了完全对称树作为基模型。

    原理

    类别型特征

    类别型特征的相关工作

    所谓类别型特征,即这类特征不是数值型特征,而是离散的集合,比如省份名(山东、山西、河北等),城市名(北京、上海、深圳等),学历(本科、硕士、博士等)。在梯度提升算法中,最常用的是将这些类别型特征转为数值型来处理,一般类别型特征会转化为一个或多个数值型特征。

    • 如果某个类别型特征基数比较低(low-cardinality features),即该特征的所有值去重后构成的集合元素个数比较少,一般利用One-hot编码方法将特征转为数值型。One-hot编码可以在数据预处理时完成,也可以在模型训练的时候完成,从训练时间的角度,后一种方法的实现更为高效,CatBoost对于基数较低的类别型特征也是采用后一种实现。

    • 高基数类别型特征(high cardinality features) 当中,比如 user ID,这种编码方式会产生大量新的特征,造成维度灾难。一种折中的办法是可以将类别分组成有限个的群体再进行One-hot编码。上述方法的一种常用解决方法是根据目标变量统计(Target Statistics,以下简称TS)进行分组,目标变量统计用于估算每个类别的目标变量期望值。甚至有人直接用TS作为一个新的数值型变量来代替原来的类别型变量

      重要的是,可以通过对TS数值型特征的阈值设置,基于对数损失、基尼系数或者均方差,得到一个对于训练集而言将类别一分为二的所有可能划分当中最优的那个,即对于不同的损失函数,使用TS数据能获得最有解。在LightGBM当中,类别型特征用每一步梯度提升时的梯度统计(Gradient Statistics,以下简称GS)来表示。虽然为建树提供了重要的信息,但是这种方法有以下两个缺点:

      • 增加计算时间,因为需要对每一个类别型特征,在迭代的每一步,都需要对GS进行计算;
      • 增加存储需求,对于一个类别型变量,需要存储每一次分离每个节点的类别;

      为了克服这些缺点,LightGBM以损失部分信息为代价将所有的长尾类别归为一类,作者声称这样处理高基数类别型特征时比One-hot编码还是好不少。另外对于采用TS特征,仅仅为每个类别计算和存储一个数字。

      采用TS作为一个新的数值型特征是最有效、信息损失最小的处理类别型特征的方法。TS也被广泛应用在点击预测任务当中,这个场景当中的类别型特征有用户、地区、广告、广告发布者等。

    目标变量统计(Target Statistics)

    1. CatBoost算法的设计初衷是为了更好的处理GBDT特征中的categorical features。在处理 GBDT特征中的categorical features的时候,最简单的方法是用 categorical feature 对应的标签的平均值来替换。在决策树中,标签平均值将作为节点分裂的标准。这种方法被称为 Greedy Target-based Statistics , 简称 Greedy TS,用公式来表达就是:
      x i , k = ∑ j = 1 n [ x j , k = x i , k ] ⋅ Y j ∑ j = 1 n [ x j , k = x i , k ] x_{i,k} = \frac{\sum\limits_{j=1}^n[x_{j,k}=x_{i,k}]\cdot Y_j}{\sum\limits_{j=1}^n[x_{j,k}=x_{i,k}]} xi,k=j=1n[xj,k=xi,k]j=1n[xj,k=xi,k]Yj
      这种方法有一个显而易见的缺陷,就是通常特征比标签包含更多的信息,如果强行用标签的平均值来表示特征的话,当训练数据集和测试数据集数据结构和分布不一样的时候会出条件偏移问题。

    2. 一个标准的改进 Greedy TS的方式是添加先验分布项,这样可以减少噪声和低频率类别型数据对于数据分布的影响
      x i , k = ∑ j = 1 p − 1 [ x σ j , k = x σ p , k ] ⋅ Y j + a ⋅ p ∑ j = 1 p − 1 [ x σ j , k = x σ p , k ] + a x_{i,k} = \frac{\sum\limits_{j=1}^{p-1}[x_{\sigma_{j,k}}=x_{\sigma_{p,k}}]\cdot Y_j + a\cdot p}{\sum\limits_{j=1}^{p-1}[x_{\sigma_{j,k}}=x_{\sigma_{p,k}}] + a} xi,k=j=1p1[xσj,k=xσp,k]+aj=1p1[xσj,k=xσp,k]Yj+ap

    其中p是添加的先验项,a通常是大于0的权重系数。添加先验项是一个普遍做法,针对类别数较少的特征,它可以减少噪声数据。。对于回归问题,一般情况下,先验项可取数据集label的均值。对于二分类,先验项是正例的先验概率。
    当然,在论文《CatBoost: unbiased boosting with categorical features》中,还提到了其它几种改进Greedy TS的方法,分别有:Holdout TS、Leave-one-out TS、Ordered TS。我这里就不再翻译论文中的这些方法了,感兴趣的同学可以自己翻看一下原论文。

    1. Ordered TS
      它是catboost的主要思想,依赖于排序,受online learning algorithms的启发得到,对于某一个样本,TS的值依赖于观测历史,为了在离线的数据上应用该思想,我们将数据随机排序,对于每一个样本,利用该样本之前数据计算该样本类别值的TS值。如果仅仅使用一个随机序列,那么计算得到值会有较大的方差,因此我们使用不同的随机序列来计算。

    CatBoost处理Categorical features总结

    • 首先会计算一些数据的statistics。计算某个category出现的频率,加上超参数,生成新的numerical features。这一策略要求同一标签数据不能排列在一起(即先全是之后全是这种方式),训练之前需要打乱数据集。
    • 第二,使用数据的不同排列。在每一轮建立树之前,先扔一轮骰子,决定使用哪个排列来生成树。
    • 第三,考虑使用categorical features的不同组合。例如颜色和种类组合起来,可以构成类似于blue dog这样的特征。当需要组合的categorical features变多时,CatBoost只考虑一部分combinations。在选择第一个节点时,只考虑选择一个特征,例如A。在生成第二个节点时,考虑A和任意一个categorical feature的组合,选择其中最好的。就这样使用贪心算法生成combinations。
    • 第四,除非向gender这种维数很小的情况,不建议自己生成One-hot编码向量,最好交给算法来处理。

    梯度偏差/预测偏移

    1. 为什么会有梯度偏差?
    2. 梯度偏差造成了什么问题?
    3. 如何解决梯度偏差?

    为什么会有梯度偏差?

    CatBoost和所有标准梯度提升算法一样,都是通过构建新树来拟合当前模型的梯度。然而,所有经典的提升算法都存在由有偏的点态梯度估计引起的过拟合问题。在每个步骤中使用的梯度都使用当前模型中的相同的数据点来估计,这导致估计梯度在特征空间的任何域中的分布与该域中梯度的真实分布相比发生了偏移。

    梯度偏差造成了什么问题?

    模型过拟合,预测发生偏移。另外预测偏移还有当我们利用TS来处理类别特征时,引起的target leak的问题。

    如何解决梯度偏差/预测偏移?

    为了解决这个问题,CatBoost对经典的梯度提升算法进行了一些改进,简要介绍如下:

    许多利用GBDT技术的算法(例如,XGBoost、LightGBM),构建下一棵树分为两个阶段:选择树结构和在树结构固定后计算叶子节点的值。为了选择最佳的树结构,算法通过枚举不同的分割,用这些分割构建树,对得到的叶子节点计算值,然后对得到的树计算评分,最后选择最佳的分割。两个阶段叶子节点的值都是被当做梯度或牛顿步长的近似值来计算。

    在CatBoost中,第一阶段采用梯度步长的无偏估计,第二阶段使用传统的GBDT方案执行。既然原来的梯度估计是有偏的,那么怎么能改成无偏估计呢?

    F i F^i Fi为构建i棵树后的模型, g i ( X k , y k ) g^i(X_k, y_k) gi(Xk,yk)为构建i棵树后第k个训练样本上面的梯度值。为了使得 g i ( X k , y k ) g^i(X_k, y_k) gi(Xk,yk)无偏于模型 F i F^i Fi,我们需要在没有 X k X_k Xk参与的情况下对模型 F i F^i Fi进行训练。我们需要对所有训练样本计算无偏的梯度估计

    我们可以运用下面这个技巧来处理这个问题:对于每一个样本 X k X_k Xk,我们训练一个单独的模型 M k M_k Mk(该模型由多颗树组成),且该模型从不使用基于该样本的梯度估计进行更新。我们使用 M k M_k Mk估计上 X k X_k Xk的梯度(即叶子节点的值),并使用这个估计对结果树进行评分。用伪码描述如下,其中 L o s s ( y i , a ) Loss(y_i, a) Loss(yi,a)是需要优化的损失函数,y是标签值,a是公式计算值。

    值得注意的是模型的建立并没有 X i X_i Xi 样本的参与,并且CatBoost中所有的树的共享同样的结构。 M i ( X i ) M_i(X_i) Mi(Xi)表示模型 M i M_i Mi X i X_i Xi进行打分。

    这里为了进一步减少过拟合,会使用若干不同对扰动来加强算法鲁棒性。也即上述提到对用于计算类别特征的方法,我们获取s个随机扰动排列,对于每个排列,我们又训练n个不同的模型 M i M_i Mi,这样模型模型复杂度为 O ( s n 2 ) O(sn^2) O(sn2),后续进行优化,具体见算法流程部分;

    其他

    特征组合

    CatBoost的另外一项重要实现是将不同类别型特征的组合作为新的特征,以获得高阶依赖(high-order dependencies),比如在广告点击预测当中用户ID与广告话题之间的联合信息,又或者在音乐推荐引用当中,用户ID和音乐流派,如果有些用户更喜欢摇滚乐,那么将用户ID和音乐流派分别转换为数字特征时,这种用户内在的喜好信息就会丢失。然而,组合的数量会随着数据集中类别型特征的数量成指数增长,因此在算法中考虑所有组合是不现实的。为当前树构造新的分割点时,CatBoost会采用贪婪的策略考虑组合。对于树的第一次分割,不考虑任何组合。对于下一个分割,CatBoost将当前树的所有组合、类别型特征与数据集中的所有类别型特征相结合,并将新的组合类别型特征动态地转换为数值型特征。CatBoost还通过以下方式生成数值型特征和类别型特征的组合:树中选定的所有分割点都被视为具有两个值的类别型特征,并像类别型特征一样地被进行组合考虑。

    当特征组合由原始的1到2时,logloss的logloss部分提升(logloss实际数值降低的)为1.86%,从1到3提升2.04%

    快速评分

    CatBoost使用对称树(oblivious trees)作为基预测器。在这类树中,相同的分割准则在树的整个一层上使用。这种树是平衡的,不太容易过拟合。梯度提升对称树被成功地用于各种学习任务中。在对称树中,每个叶子节点的索引可以被编码为长度等于树深度的二进制向量。这在CatBoost模型评估器中得到了广泛的应用:我们首先将所有浮点特征、统计信息和独热编码特征进行二值化,然后使用二进制特征来计算模型预测值。

    基于GPU实现快速训练

    密集的数值特征。 对于任何GBDT算法而言,最大的难点之一就是搜索最佳分割。尤其是对于密集的数值特征数据集来说,该步骤是建立决策树时的主要计算负担。CatBoost使用oblivious 决策树作为基模型,并将特征离散化到固定数量的箱子中以减少内存使用。就GPU内存使用而言,CatBoost至少与LightGBM一样有效。主要改进之处就是利用了一种不依赖于原子操作的直方图计算方法。
    类别型特征。 CatBoost实现了多种处理类别型特征的方法,并使用完美哈希来存储类别型特征的值,以减少内存使用。由于GPU内存的限制,在CPU RAM中存储按位压缩的完美哈希,以及要求的数据流、重叠计算和内存等操作。通过哈希来分组观察。在每个组中,我们需要计算一些统计量的前缀和。该统计量的计算使用分段扫描GPU图元实现。
    多GPU支持。 CatBoost中的GPU实现可支持多个GPU。分布式树学习可以通过数据或特征进行并行化。CatBoost采用多个学习数据集排列的计算方案,在训练期间计算类别型特征的统计数据。

    算法流程

    建树的流程:

    开始阶段:CatBoost对训练集随机生成s+1个不同对序列,其中 σ 1 , σ 2 , . . . , σ n \sigma_1, \sigma_2,...,\sigma_n σ1,σ2,...,σn用于定义树结构,分裂节点的计算。 σ 0 \sigma_0 σ0用于对生成树结构选择叶子节点对值。
    对于测试集合,我们根据整个训练集的TS计算相应类别的值

    在catboost中,基分类器是对称树,该类树平衡,能够减弱过拟合,加速预测,整体流程为:

    • ordered boosting
      ordered boosting解决类类别处理及梯度偏差引起的预测偏移问题, 开始提到的方法会训练n个模型,这也会n倍地增加了时间复杂度,为了简化,我们优化其时间复杂度,仅仅储存和计算 M r , j ′ ( i ) : = M , 2 j 其 中 j = 1 , . . . , [ l o g 2 n ] M'_{r,j}(i):=M_{,2^j} 其中 j=1,...,[log_2 n] Mr,j(i):=M,2jj=1,...,[log2n], 满足 σ r ( i ) ≤ 2 j + 1 \sigma_r(i) \leq 2^{j+1} σr(i)2j+1的i,这样总体时间复杂度由 O ( s n 2 ) O(sn^2) O(sn2)转化为 O ( s n ) O(sn) O(sn)

    总结

    优点

    • 性能卓越: 在性能方面可以匹敌任何先进的机器学习算法;
    • 鲁棒性/强健性: 无需调参即可获得较高的模型质量,采用默认参数就可以获得非常好的结果,减少在调参上面花的时间,减少了对很多超参数调优的需求
    • 易于使用: 提供与scikit集成的Python接口,以及R和命令行界面;
    • 实用: 可以处理类别型、数值型特征,支持类别型变量,无需对非数值型特征进行预处理
    • 可扩展: 支持自定义损失函数;
    • 快速、可扩展的GPU版本,可以用基于GPU的梯度提升算法实现来训练你的模型,支持多卡并行提高准确性,
    • 快速预测:即便应对延时非常苛刻的任务也能够快速高效部署模型

    缺点

    • 对于类别型特征的处理需要大量的内存和时间;
    • 不同随机数的设定对于模型预测结果有一定的影响;

    Ref:

    1. Prokhorenkova, L., Gusev, G., Vorobev, A., Dorogush, A. V. & Gulin, A. CatBoost: unbiased boosting with categorical features. arXiv:1706.09516 [cs] (2017).
    2. Dorogush, A. V., Ershov, V. & Gulin, A. CatBoost: gradient boosting with categorical features support.
    3. CatBoost算法梳理
    4. 深入理解catboost
    展开全文
  • cat5和cat5e的区别CAT5 or Category 5 is a copper cable used in computer networks and cable TV. It is popularly used in Computer Network start Ethernet which is very popular in LAN computer networks. ...
  • hashcat的命令行详解,真正高手必备。
  • TWINCAT程序实例

    热门讨论 2013-09-06 14:47:13
    TWINCAT程序实例 有助于用TWINCAT软件编写PLC程序

空空如也

空空如也

1 2 3 4 5 ... 20
收藏数 1,187,335
精华内容 474,934
关键字:

cat