XGBoost 算法原理详解(1)——目标函数、梯度提升、严格的贪心优化算法
参考论文:XGBoost: A Scalable Tree Boosting System
按照惯例,我们先约定一些符号性的内容
训练集
\[\mathcal{D} = \{(x_i, y_i)\},\quad x_i \in R^m, y_i \in R , i=1..n\]
每个样本的特征维度为 \(m\),样本总量为 \(n\)。
模型
\[\hat{y}_i = \phi(x_i) = \sum_{k=1}^K f_k(x_i), \quad f_k \in \mathcal{F}\]
模型用函数 \(\phi(x)\) 表示,\(\hat{y}i\) 是测试样本使用模型推理的结果。可以看到,模型是多个函数的叠加,这里的每个 \(f_k\) 都是决策树空间...
点我阅读更多...
面向组合子编程的应用实践—-影视节目名称匹配
最近有个项目,需要根据用户输入的影视节目名称来查询我们数据库里面对应的节目,数据表结构如下所示,用户事先是不知道我们这边数据库里的节目名称的,比如 “xxxx 第3季”,不同的用户可能会输入不同的名称,例如 “xxxx3”、“xxxx:3”、“xxxx 第三季” 等等,这是很正常的现象,但却为我们的查询工作带来了困难。
id
name
1
abdc
2
cbsd
..
..
在这里,我想记录一下我的解决方案。我们把问题简化一下,分几个层次来讨论。首先,假如用户的输入与数据表的记录名...
点我阅读更多...
朴素贝叶斯分类器
在分类问题中,需要根据给定的特征向量 \(X = (F_1, F_2,..,F_n)\) 来预测样本所属的类别 \(C\),也就是说 \(C\) 的取值依赖于 \(X\),从概率的角度来看,就是说
\[p(C\mid X)\]
如果我们知道 \(p(C\mid X)\) 的具体形式,那么能通过计算 \(p(C\mid X)\) 在 \(C\) 取各类别时的值来判断 \(C\) 最可能的类别,即
\[c = \arg \max_C p(C\mid X)\]
利用贝叶斯公式,可以将其变换为
\[p(C\mid X) = \frac {p(X \mid C) p(C)}{p(X)}\]
其中 \(p(C)\) 是类先验概率,它的值可以从样本的分布来估计,\(p(X)\) 与类变量...
点我阅读更多...
函数空间优化
通用的学习模型可以被表示成下面三个部分的组合
1) 产生器,从一个未知但固定的概率分布函数 \(F(x)\) 中独立同分布地产生向量 \(x \in R^n\)。
2) 训练器,对于每一个 \(x\),从一个未知但固定的条件概率分布 \(F(y\mid x)\) 中独立同分布地产生值 \(y\)。
3) 学习机器,根据上面产生的集合 \({(x_i, y_i)}\),从函数集 \(f(x, P), P\in \Lambda\) 中寻找最佳的参数 \(P^*\),使得对于任意 \(x\), \(\bar y = f(x, P)\) 能够最好的逼近训练器的响应 \(y\)。
通俗的讲,产生器和训练器共同生成了我们通常称为训练集的数据,所以也可以看作是从联合分布 \(F(x, y)\) ...
点我阅读更多...
使用 PyTorch 实现 yolov3 算法 (1)
在这一系列文章中,我们将使用 pytorch 框架来实现 yolov3 目标检测算法,在理解 yolo 系列算法的同时,也希望对 pytorch 框架有更深入的认识。
对于初学者来说,我觉得最先应该理解的还是目标检测这种任务的基本流程,而 yolo 原论文则不太适合新手直接去看。但是奇怪的是网上对 yolo 的介绍大都是对原论文的翻译,如果强行去啃,很容易就迷失在各种名词概念中无法自拔,所以我希望这篇对 yolo 的介绍能做到由浅入深,老少咸宜,不求面面俱到,但求写出来的东西都是容易被理解的。
首先,我们看神经网络这个东西,把它当成一个黑箱,我们从一端输入特征,另一端输出计算结果。对于分类问题,输出端给出的是一个向量,向量维度等于类别数量,每个元素表示对应类别的置信度。对于回归问题...
点我阅读更多...