Android程序员想进大厂?算法很重要!2024年必学的 10 大算法关注一下

决策树的叶子结点包含一个用于做出预测的输出变量(y)。预测结果是通过在树的各个分叉路径上游走,直到到达一个叶子结点并输出该叶子结点的类别值而得出。

决策树的学习速度很快,做出预测的速度也很快。它们在大量问题中往往都很准确,而且不需要为数据做任何特殊的预处理准备。

5. 朴素贝叶斯

朴素贝叶斯是一种简单而强大的预测建模算法。

该模型由两类可直接从训练数据中计算出来的概率组成:1)数据属于每一类的概率;2)给定每个 x 值,数据从属于每个类的条件概率。一旦这两个概率被计算出来,就可以使用贝叶斯定理,用概率模型对新数据进行预测。当你的数据是实值的时候,通常假设数据符合高斯分布(钟形曲线),这样你就可以很容易地估计这些概率。

朴素贝叶斯之所以被称为「朴素」,是因为它假设每个输入变量相互之间是独立的。这是一种很强的、对于真实数据并不现实的假设。不过,该算法在大量的复杂问题中十分有效。

6. K 最近邻算法

K 最近邻(KNN)算法是非常简单而有效的。KNN 的模型表示就是整个训练数据集。这很简单吧?

对新数据点的预测结果是通过在整个训练集上搜索与该数据点最相似的 K 个实例(近邻)并且总结这 K 个实例的输出变量而得出的。对于回归问题来说,预测结果可能就是输出变量的均值;而对于分类问题来说,预测结果可能是众数(或最常见的)的类的值。

关键之处在于如何判定数据实例之间的相似程度。如果你的数据特征尺度相同(例如,都以英寸为单位),那么最简单的度量技术就是使用欧几里得距离,你可以根据输入变量之间的差异直接计算出该值。

KNN 可能需要大量的内存或空间来存储所有数据,但只有在需要预测时才实时执行计算(或学习)。随着时间的推移,你还可以更新并管理训练实例,以保证预测的准确率。

使用距离或接近程度的度量方法可能会在维度非常高的情况下(有许多输入变量)崩溃,这可能会对算法在你的问题上的性能产生负面影响。这就是所谓的维数灾难。这告诉我们,应该仅仅使用那些与预测输出变量最相关的输入变量。

7. 学习向量量化

KNN 算法的一个缺点是,你需要处理整个训练数据集。而学习向量量化算法(LVQ)允许选择所需训练实例数量,并确切地学习这些实例。

LVQ 的表示是一组码本向量。它们在开始时是随机选择的,经过多轮学习算法的迭代后,最终对训练数据集进行最好的总结。通过学习,码本向量可被用来像 K 最近邻那样执行预测。通过计算每个码本向量与新数据实例之间的距离,可以找到最相似的邻居(最匹配的码本向量)。然后返回最匹配单元的类别值(分类)或实值(回归)作为预测结果。如果将数据重新放缩放到相同的范围中(例如 0 到 1 之间),就可以获得最佳的预测结果。

如果你发现 KNN 能够在你的数据集上得到不错的预测结果,那么不妨试一试 LVQ 技术,它可以减少对内存空间的需求,不需要像 KNN 那样存储整个训练数据集。

8. 支持向量机

支持向量机(SVM)可能是目前最流行、被讨论地最多的机器学习算法之一。

超平面是一条对输入变量空间进行划分的「直线」。支持向量机会选出一个将输入变量空间中的点按类(类 0 或类 1)进行最佳分割的超平面。在二维空间中,你可以把他想象成一条直线,假设所有输入点都可以被这条直线完全地划分开来。SVM 学习算法旨在寻找最终通过超平面得到最佳类别分割的系数。

超平面与最近数据点之间的距离叫作间隔(margin)。能够将两个类分开的最佳超平面是具有最大间隔的直线。只有这些点与超平面的定义和分类器的构建有关,这些点叫作支持向量,它们支持或定义超平面。在实际应用中,人们采用一种优化算法来寻找使间隔最大化的系数值。

支持向量机可能是目前可以直接使用的最强大的分类器之一,值得你在自己的数据集上试一试。

9. 袋装法和随机森林

随机森林是最流行也最强大的机器学习算法之一,它是一种集成机器学习算法。

自助法是一种从数据样本中估计某个量(例如平均值)的强大统计学方法。你需要在数据中取出大量的样本,计算均值,然后对每次取样计算出的均值再取平均,从而得到对所有数据的真实均值更好的估计。

Bagging 使用了相同的方法。但是最常见的做法是使用决策树,而不是对整个统计模型进行估计。Bagging 会在训练数据中取多个样本,然后为每个数据样本构建模型。当你需要对新数据进行预测时,每个模型都会产生一个预测结果,Bagging 会对所有模型的预测结果取平均,以便更好地估计真实的输出值。

随机森林是这种方法的改进,它会创建决策树,这样就不用选择最优分割点,而是通过引入随机性来进行次优分割。

因此,为每个数据样本创建的模型比在其它情况下创建的模型更加独特,但是这种独特的方式仍能保证较高的准确率。结合它们的预测结果可以更好地估计真实的输出值。

如果你使用具有高方差的算法(例如决策树)获得了良好的结果,那么你通常可以通过对该算法执行 Bagging 获得更好的结果。

10. Boosting 和 AdaBoost

Boosting 是一种试图利用大量弱分类器创建一个强分类器的集成技术。要实现 Boosting 方法,首先你需要利用训练数据构建一个模型,然后创建第二个模型(它企图修正第一个模型的误差)。直到最后模型能够对训练集进行完美地预测或加入的模型数量已达上限,我们才停止加入新的模型。

AdaBoost 是第一个为二分类问题开发的真正成功的 Boosting 算法。它是人们入门理解 Boosting 的最佳起点。当下的 Boosting 方法建立在 AdaBoost 基础之上,最著名的就是随机梯度提升机。

AdaBoost 使用浅层决策树。在创建第一棵树之后,使用该树在每个训练实例上的性能来衡量下一棵树应该对每个训练实例赋予多少权重。难以预测的训练数据权重会增大,而易于预测的实例权重会减小。模型是一个接一个依次创建的,每个模型都会更新训练实例权重,影响序列中下一棵树的学习。在构建所有的树之后,我们就可以对新的数据执行预测,并根据每棵树在训练数据上的准确率来对其性能进行加权。

由于算法在纠正错误上投入了如此多的精力,因此删除数据中的异常值在数据清洗过程中是非常重要的。

自我介绍一下,小编13年上海交大毕业,曾经在小公司待过,也去过华为、OPPO等大厂,18年进入阿里一直到现在。

深知大多数Android工程师,想要提升技能,往往是自己摸索成长或者是报班学习,但对于培训机构动则几千的学费,着实压力不小。自己不成体系的自学效果低效又漫长,而且极易碰到天花板技术停滞不前!

因此收集整理了一份《2024年Android移动开发全套学习资料》,初衷也很简单,就是希望能够帮助到想自学提升又不知道该从何学起的朋友,同时减轻大家的负担。
img
img
img
img
img
img

既有适合小白学习的零基础资料,也有适合3年以上经验的小伙伴深入学习提升的进阶课程,基本涵盖了95%以上Android开发知识点,真正体系化!

img
img

由于文件比较大,这里只是将部分目录大纲截图出来,每个节点里面都包含大厂面经、学习笔记、源码讲义、实战项目、讲解视频,并且后续会持续更新
如果你觉得这些内容对你有帮助,可以添加V:vip204888 备注Android获取(资料价值较高,非无偿)
img

学习分享

在当下这个信息共享的时代,很多资源都可以在网络上找到,只取决于你愿不愿意找或是找的方法对不对了

很多朋友不是没有资料,大多都是有几十上百个G,但是杂乱无章,不知道怎么看从哪看起,甚至是看后就忘

如果大家觉得自己在网上找的资料非常杂乱、不成体系的话,我也分享一套给大家,比较系统,我平常自己也会经常研读。

2021最新上万页的大厂面试真题

七大模块学习资料:如NDK模块开发、Android框架体系架构…

只有系统,有方向的学习,才能在段时间内迅速提高自己的技术。

这份体系学习笔记,适应人群:
**第一,**学习知识比较碎片化,没有合理的学习路线与进阶方向。
**第二,**开发几年,不知道如何进阶更进一步,比较迷茫。
**第三,**到了合适的年纪,后续不知道该如何发展,转型管理,还是加强技术研究。

由于文章内容比较多,篇幅不允许,部分未展示内容以截图方式展示 。

只有系统,有方向的学习,才能在段时间内迅速提高自己的技术。

这份体系学习笔记,适应人群:
**第一,**学习知识比较碎片化,没有合理的学习路线与进阶方向。
**第二,**开发几年,不知道如何进阶更进一步,比较迷茫。
**第三,**到了合适的年纪,后续不知道该如何发展,转型管理,还是加强技术研究。

由于文章内容比较多,篇幅不允许,部分未展示内容以截图方式展示 。

本文已被CODING开源项目:《Android学习笔记总结+移动架构视频+大厂面试真题+项目实战源码》收录

  • 27
    点赞
  • 21
    收藏
    觉得还不错? 一键收藏
  • 0
    评论
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值