本教程纯属个人利用业务时间进行积累学习,同时考虑到大多数场景下以应用为主,所以直接采用Numpy 进行相关成熟算法的编写并使用并不符合高效的开发原则,所以这里采用结合了Numpy算法以及sklearn 库对比的方式进行实现,从而保证读者可以在深入算法的研究与快速应用之间选择其一。
由于本人的数学理论基础并不是特别扎实如果存在相关理论或者说法的错误欢迎各位大神进行指点并提交 相关的PR从而使该教程更完善。
以下算法大多数使用场景主要为分类问题,部分算法基于回归可以实现预测行为。
该算法主要采用距离算法将未分类的测试数据与样本数据进行运算得出K个距离最近的数据,并根据少数服从 多数原则返回最终的分类结果,其中相关的实现代码可以参考如下。
由于本算法的核心依赖距离算法,所以根据实际的使用场景选择适当的距离算法进行替换,当前可以利用的距离、 算法主要有:
- 欧式距离
- 马氏距离
- 曼哈顿距离
- 切比雪夫距离
- 闵可夫斯基距离
- 夹角余弦
- 汉明距离
- 杰卡德距离
关于各类算法的介绍可以参考本文章
该算法其实就是采用IF...THEN...ELSE形式进行组织,从而形成一个树结构。从人类本身的认知出发一个问题 往往会有多个选择,但是考虑计算机本身的特点以及效率等,往往会会采用二叉树。相关的算法可以通过如下文件 进行学习:
树回归(预测)相关源码
以上已经实现的ID3与CART算法,至此还剩下C4.5算法,关于三种算法的具体原理介绍可以参考如下文章:
关于该算法的基本介绍见本文 下面我们将主要介绍 其算法的实现:
首先在了解具体的Logistic回归算法前我们需要先了解几个相关的基础知识算法以便于我们更好的去 了解其源码的实现逻辑和最终应用场景的选择。
由于我们这里处理的是二分类问题,对于Logistic最终计算的结果值,我们需要将其限定在一个实当的范围内 从而实现分类,其实就是计算概率,如果概率大于一半进行选择。
因为本身函数的特点,我们需要计算回归系数,这里我们主要采用了梯度上升算法进行计算,当然读者也可以 采用梯度下降算法。但是梯度上升算法在数据量较多时,由于其本身需要进行全数据的迭代所以我们还需要引 入一个更高效的算法,即随机梯度提升算法,可以仅用一个样本点更新回归系数。下面我们可以参考具体的实 现代码进行学习:
关于该算法比较好的解释可以参考SVM原理 文章。从个人简短的理解来说,该算法在面对非线性问题下,将采用超平面,即多维空间进行数据分类的切分。以下这个视频将可以较形式的展示这一 过程演示视频
为了训练模型我们此时需要引入SMO算法 (序列最小优化算法)来解决二次规划问题,当然 如果读者并不想过多接触具体的核心算法逻辑,可以参考具体的实现源码进行学习应用:
对于了解线性回归可以参考本文章 进行相关关系,其中还包含了关于局部加权线性回归方式, 针对常规的数据这是没有问题的,但是如果样本数据中的特征多余样本数据本身那么就存在问题了,此时我们就需要通过引入岭回归、lasso与前向 逐步回归算法。
上面我们介绍了多个分类算法,为了得到最好的结果我们有时可能需要结合不同算法或相同算法不同配置进行组合,这就叫做元计算。本篇将主要介绍 同算法不同配置的情况,主要采用的是adaboost算法 ,对应的源码参考如下:
很多算法对数据存在敏感性,由于数据计量单位的不一致性很有可能会被某些数值较大的数据破坏最终的算法效果,为此 我们需要对数据进行归一化处理从而保证算法的效率。首先我们可以通过以下文档进一步的了解归一化的作用:
了解完以上的基本概念后,具体使用的算法由以下几种:
- 最大最小标准化方法
- Z-score标准化方法
- 非线性归一化
- L2范数归一化方法
即衡量目标的单位或方法,这里我们列举几个在互联网中比较常见的指标进行说明:
- PV:页面浏览树数,即每天的点击数。
- UV:独立用户数,即每天每个用户的浏览数。
- DAU:日活跃用户数,即每天活跃的用户数量。
当然指标不仅仅只有上面还有MAU
、LTV
和ARPU
等,每个指标都要满足以下几点:
- 数字化
- 易衡量
- 意义清晰
- 周期适当
- 尽量客观