算法怎么选
这个要具体情况具体分析, 现实开发中, 尤其是在高级语言里, 通常不会遇到这种选择困难, 因为有接口这种东西, 使得很多不同的结构可以使用同一种算法
而具体的算法, 因为数据本身的形态不同, 同一个算法也会产生不同的性能, 关于这点一是靠对算法本身的认识, 二就是靠经验了
B. 算法工程师如何选择适合自己的方向
目前投了的有TX(offer) 海康威视(offer sp) DJI(offer sp) 头条(挂) 阿里(ssp) MSRA(等消息,但hr透露不乐观)我就介绍下我自己的一些感受,可能不一定对,但也许会帮到大家。我觉得一定要做算法的话一定要明确下面几点:
1. 不要一直盯着互联网公司,很多硬件公司也需要算法,而且是刚需。
2. 千万不要认为视觉算法就不用刷题了,这种必跪(我头条就没刷,就是例子)
3. 不是说搞dl的就不用管频域那些传统方法了。就比如我不止一次被问到canny算法的具体实现方法(我还是做3D的)。 我感觉可能是真正落地的时候不可能让你直接dl end2end的。dl只会是一个pipeline的核心的小部件,剩下的还是需要人为先验更强的传统方法的。
4. 最好能对一些论文里或者实验中反直觉的方法有一些深刻的理解,最好能直接到硬件层面。举个例子 mobilenet v2明明flops比 resnet18低那么多,为啥电脑跑起来不会更快?又为啥放移动端就会快很多?
5. 我觉得比起论文,面试官更喜欢在知名排行榜上有个好名次的方法。
6. 实习真的很重要,尤其是大厂实习(比如阿里面试官就说,他能捞我简历看上的根本不是啥paper啥排行榜。。人家是觉得MSRA培养的方法论很好。。)
7. 大家现在很多都过了那种刷论文,刷排行榜的阶段了,都讲落地。这意味着你要是不懂轻量级网络,剪枝蒸馏算法的sota,你会很吃亏。同时,如果你有嵌入式经验和cuda经验,你会很加分。
8. 拉宽知识面。。没事就去读读别的方向的paper总会有好处。
最后无论从事开发岗,还是在算法领域,知识的更替速度快,不持续学习跟进前沿技术,就会被淘汰。算法工程师本质上也是工程师,不要因为你是算法而有所谓的优越感,数学模型技能只是一方面,没有扎实的工程能力,也走不远。尤其是AI近几年的火爆,算法的门槛也变低,造成越来越多的人涌入算法岗。等到AI退潮之后,你扎实的基础工程能力和业务能力才是生存下来的必要条件吧。
C. 机器学习中,怎样分析数据结构来选择算法
在模型选择方面,本身来说,个人觉得并没有一种很确定的指导方式,更多的是从你数据的应用角度去考虑问题,然后才是你对数据的理解。
应用角度的问题就是你对模型的要求,如果你的要求是模型尽量是可解释的,那么选择估计就只有决策树,逻辑回归等等这种简单的模型。
数据的角度:这个角度其实更多的是从获取某种先验知识或者基于某种假设等等,然后你去选择模型;
比如我有一个数据,我知道y-x>0则为1类,y-x<0则为0类别,这个是假设我知道的情况下,你会怎么取选择分类器呢,很明显,直接用线性回归就应该做的不错,或许和你之后的会有点小偏差,但是就是应该不错,那么此时你会发现SVM的线性核应该可以是可以的,你的思路就会发现,其实基本上所有的线性分类器在这样的数据集合上都应该不错的;
然而你考虑一下Decision Tree,你会发现他做的不是很好,但是最差最差也能够得到75%(假设我就分一次,x>0和x<0),这个时候你怎么评估这个问题的好与坏呢,如果是赌场,这个效果是很好了,但是如果是指纹的识别,这个就不好了;再深入的考虑下去,你可能会否定Decision Tree,但是,其实这个问题,如果是用 Random Forest去做,他又会做的很好,因为在不断的选取数据中,他会不断的得到新的划分点。
你也可以从wikipedia(Random forest)的介绍中感觉到,RF是可以做好的,因为他相当于是带权的KNN;
所以我觉得在实际应用中,从简单模型开始尝试,或许会有新的对数据的认识,从而使你得到一些没有的信息,如上述的问题中,你从linear regression就很容易发现这个效果,但是你如果一来就是NN或者SVM,或许你就发现不了这种关系了;
当然,如果你是为了快速的做出一个好的结果,那一来就尝试复杂模型总会是稍微好点的,理由也是很简单的,因为复杂模型的VC维比较高,当然就能解决更多的问题。
D. WAP算法该选什么
LINKSYS WRT54G 2种算法都支持,随便选一种就可以了.只要网卡也支持就行
TKIP:
在IEEE 802.11i规范中,TKIP: Temporal Key Integrity Protocol(暂时密钥集成协议)负责处理无线安全问题的加密部分。TKIP在设计时考虑了当时非常苛刻的限制因素:必须在现有硬件上运行,因此不能使用计算先进的加密算法。
TKIP是包裹在已有WEP密码外围的一层“外壳”。TKIP由WEP使用的同样的加密引擎和RC4算法组成。不过,TKIP中密码使用的密钥长度为128位。这解决了WEP的第一个问题:过短的密钥长度。
TKIP的一个重要特性,是它变化每个数据包所使用的密钥。这就是它名称中“动态”的出处。密钥通过将多种因素混合在一起生成,包括基本密钥(即TKIP中所谓的成对瞬时密钥)、发射站的MAC地址以及数据包的序列号。混合操作在设计上将对无线站和接入点的要求减少到最低程度,但仍具有足够的密码强度,使它不能被轻易破译。
利用TKIP传送的每一个数据包都具有独有的48位序列号,这个序列号在每次传送新数据包时递增,并被用作初始化向量和密钥的一部分。将序列号加到密钥中,确保了每个数据包使用不同的密钥。这解决了WEP的另一个问题,即所谓的“碰撞攻击”。这种攻击发生在两个不同数据包使用同样的密钥时。在使用不同的密钥时,不会出现碰撞。
以数据包序列号作为初始化向量,还解决了另一个WEP问题,即所谓的“重放攻击(replay attacks)”。由于48位序列号需要数千年时间才会出现重复,因此没有人可以重放来自无线连接的老数据包:由于序列号不正确,这些数据包将作为失序包被检测出来。
被混合到TKIP密钥中的最重要因素是基本密钥。如果没有一种生成独特的基本密钥的方法,TKIP尽管可以解决许多WEP存在的问题,但却不能解决最糟糕的问题:所有人都在无线局域网上不断重复使用一个众所周知的密钥。为了解决这个问题,TKIP生成混合到每个包密钥中的基本密钥。无线站每次与接入点建立联系时,就生成一个新基本密钥。这个基本密钥通过将特定的会话内容与用接入点和无线站生成的一些随机数以及接入点和无线站的MAC地址进行散列处理来产生。由于采用802.1x认证,这个会话内容是特定的,而且由认证服务器安全地传送给无线站。
AES
对称密码体制的发展趋势将以分组密码为重点。分组密码算法通常由密钥扩展算法和加密(解密)算法两部分组成。密钥扩展算法将b字节用户主密钥扩展成r个子密钥。加密算法由一个密码学上的弱函数f与r个子密钥迭代r次组成。混乱和密钥扩散是分组密码算法设计的基本原则。抵御已知明文的差分和线性攻击,可变长密钥和分组是该体制的设计要点。
AES是美国国家标准技术研究所NIST旨在取代DES的21世纪的加密标准。
AES的基本要求是,采用对称分组密码体制,密钥长度的最少支持为128、192、256,分组长度128位,算法应易于各种硬件和软件实现。1998年NIST开始AES第一轮分析、测试和征集,共产生了15个候选算法。1999年3月完成了第二轮AES2的分析、测试。预计在2000年8月AES的最终结果将公布。
在应用方面,尽管DES在安全上是脆弱的,但由于快速DES芯片的大量生产,使得DES仍能暂时继续使用,为提高安全强度,通常使用独立密钥的三级DES。但是DES迟早要被AES代替。流密码体制较之分组密码在理论上成熟且安全,但未被列入下一代加密标准。
我也讲不清楚选哪个好了~
E. 作业调度算法的选择原则有哪几个
批处理作业的调度算法主要有以下几种:
①先来先服务算法。原则上按照作业进入输入井的次序调度,如果作业的资源得不到满足,将会推迟调度,它的资源得到满足的时候会优先被调度进来。
优点:具有一定的公平性。
缺点:系统的吞吐率低,平均周转时间长,有大作业到来的时,许多小作业推迟调度。
②计算时间短的作业优先.优先调度计算时间短的作业进行调度,资源不满足的情况下推迟调度。在这种调度算法下,要求用户要对作业的计算时间预先有一个估计,调度以此为依据。
优点:由于被选中的作业计算时间,所以不能尽快地完成并退出系统,降低了作业的平均等待时间,提高了系统的吞吐率。
缺点:大作业会不满意,而且极限情况下使得某些大作业始终得不到调度。
③响应比高者优先算法。该算法考虑了计算时间等待时间,既考虑了计算时间短的作业优先,又考虑了大作业长期等待的问题。所谓响应比是按照以下公式来定义的:
响应比R=等待时间/计算时间
这里的计算时间是估计的作业计算时间,从公式看,计算时间越短,响应比越高;而另一方面,大作业等待时间越长,响应比也会越大。一个作业完成以后,需要重新计算一下在输入井中的各个作业的响应比,最高的将优先调度。
④优先数调度算法。为每一个作业指定一个优先数,优先数高的作业先被调度。对于优先数相等的作业采用先来先服务的策略。优先数的制定原则是:作业的缓急程序,估计的计算时间,作业的等待时间,资源申请情况等因素综合考虑。
⑤均衡调度算法。使用不同资源的进程同时执行,减少作业等待同类设备而耗费的时间,加快作业的执行。
F. 如何正确选择聚类算法
作者 | Josh Thompson
来源 | 数据派THU
Choosing the Right Clustering Algorithm for your Dataset - KDnuggets
聚类算法十分容易上手,但是选择恰当的聚类算法并不是一件容易的事。
数据聚类是搭建一个正确数据模型的重要步骤。数据分析应当根据数据的共同点整理信息。然而主要问题是,什么通用性参数可以给出最佳结果,以及什么才能称为“最佳”。
本文适用于菜鸟数据科学家或想提升聚类算法能力的专家。下文包括最广泛使用的聚类算法及其概况。根据每种方法的特殊性,本文针对其应用提出了建议。
四种基本算法以及如何选择
聚类模型可以分为四种常见的算法类别。尽管零零散散的聚类算法不少于100种,但是其中大部分的流行程度以及应用领域相对有限。
基于整个数据集对象间距离计算的聚类方法,称为基于连通性的聚类(connectivity-based)或层次聚类。根据算法的“方向”,它可以组合或反过来分解信息——聚集和分解的名称正是源于这种方向的区别。最流行和合理的类型是聚集型,你可以从输入所有数据开始,然后将这些数据点组合成越来越大的簇,直到达到极限。
层次聚类的一个典型案例是植物的分类。数据集的“树”从具体物种开始,以一些植物王国结束,每个植物王国都由更小的簇组成(门、类、阶等)。
层次聚类算法将返回树状图数据,该树状图展示了信息的结构,而不是集群上的具体分类。这样的特点既有好处,也有一些问题:算法会变得很复杂,且不适用于几乎没有层次的数据集。这种算法的性能也较差:由于存在大量的迭代,因此整个处理过程浪费了很多不必要的时间。最重要的是,这种分层算法并不能得到精确的结构。
同时,从预设的类别一直分解到所有的数据点,类别的个数不会对最终结果产生实质性影响,也不会影响预设的距离度量,该距离度量粗略测量和近似估计得到的。
根据我的经验,由于简单易操作,基于质心的聚类(Centroid-based)是最常出现的模型。 该模型旨在将数据集的每个对象划分为特定的类别。 簇数(k)是随机选择的,这可能是该方法的最大问题。 由于与k最近邻居(kNN)相似,该k均值算法在机器学习中特别受欢迎。
计算过程包括多个步骤。首先,输入数据集的目标类别数。聚类的中心应当尽可能分散,这有助于提高结果的准确性。
其次,该算法找到数据集的每个对象与每个聚类中心之间的距离。最小坐标距离(若使用图形表示)确定了将对象移动到哪个群集。
之后,将根据类别中所有点的坐标平均值重新计算聚类的中心。重复算法的上一步,但是计算中要使用簇的新中心点。除非达到某些条件,否则此类迭代将继续。例如,当簇的中心距上次迭代没有移动或移动不明显时,聚类将结束。
尽管数学和代码都很简单,但k均值仍有一些缺点,因此我们无法在所有情景中使用它。缺点包括:
因为优先级设置在集群的中心,而不是边界,所以每个集群的边界容易被疏忽。 无法创建数据集结构,其对象可以按等量的方式分类到多个群集中。 需要猜测最佳类别数(k),或者需要进行初步计算以指定此量规。相比之下,期望最大化算法可以避免那些复杂情况,同时提供更高的准确性。简而言之,它计算每个数据集点与我们指定的所有聚类的关联概率。用于该聚类模型的主要工具是高斯混合模型(GMM)–假设数据集的点服从高斯分布。
k-means算法可以算是EM原理的简化版本。它们都需要手动输入簇数,这是此类方法要面对的主要问题。除此之外,计算原理(对于GMM或k均值)很简单:簇的近似范围是在每次新迭代中逐渐更新的。
与基于质心的模型不同,EM算法允许对两个或多个聚类的点进行分类-它仅展示每个事件的可能性,你可以使用该事件进行进一步的分析。更重要的是,每个聚类的边界组成了不同度量的椭球体。这与k均值聚类不同,k均值聚类方法用圆形表示。但是,该算法对于不服从高斯分布的数据集根本不起作用。这也是该方法的主要缺点:它更适用于理论问题,而不是实际的测量或观察。
最后,基于数据密度的聚类成为数据科学家心中的最爱。
这个名字已经包括了模型的要点——将数据集划分为聚类,计数器会输入ε参数,即“邻居”距离。因此,如果目标点位于半径为ε的圆(球)内,则它属于该集群。
具有噪声的基于密度的聚类方法(DBSCAN)将逐步检查每个对象,将其状态更改为“已查看”,将其划分到具体的类别或噪声中,直到最终处理整个数据集。用DBSCAN确定的簇可以具有任意形状,因此非常精确。此外,该算法无需人为地设定簇数 —— 算法可以自动决定。
尽管如此,DBSCAN也有一些缺点。如果数据集由可变密度簇组成,则该方法的结果较差;如果对象的位置太近,并且无法轻易估算出ε参数,那么这也不是一个很好的选择。
总而言之,我们并不能说选择了错误的算法,只能说其中有些算法会更适合特定的数据集结构。为了采用最佳的(看起来更恰当的)算法,你需要全面了解它们的优缺点。
例如,如果某些算法不符合数据集规范,则可以从一开始就将其排除在外。为避免繁琐的工作,你可以花一些时间来记住这些信息,而无需反复试验并从自己的错误中学习。
我们希望本文能帮助你在初始阶段选择最好的算法。继续这了不起的工作吧!
G. 学习算法 特征的选择算法有哪些
一个算法应该具有以下五个重要的特征:
1、有穷性: 一个算法必须保证执行有限步之后结束;
2、确切性: 算法的每一步骤必须有确切的定义;
3、输入:一个算法有0个或多个输入,以刻画运算对象的初始情况,所谓0个输入是指算法本身定除了初始条件;
4、输出:一个算法有一个或多个输出,以反映对输入数据加工后的结果。没有输出的算法是毫无意义的;
5、可行性: 算法原则上能够精确地运行,而且人们用笔和纸做有限次运算后即可完成
H. 初学者如何选择合适的机器学习算法(附算法
如何为分类问题选择合适的机器学习算法 若要达到一定的准确率,需要尝试各种各样的分类器,并通过交叉验证选择最好的一个。但是,如果你只是为你的问题寻找一个“足够好”的算法或者一个起点,以下准则有利于选择合适的分类器:你的训练集有多大?如果训练集很小,那么高偏差/低方差分类器(如朴素贝叶斯分类器)要优于低偏差/高方差分类器(如k近邻分类器),因为后者容易过拟合。然而,随着训练集的增大,低偏差/高方差分类器将开始胜出(它们具有较低的渐近误差),因为高偏差分类器不足以提供准确的模型。这可以认为这是生成模型与判别模型的区别。一些特定算法比较朴素贝叶斯优点:简单;如果朴素贝叶斯(NB)条件独立性假设成立,相比于逻辑回归这类的判别模型,朴素贝叶斯分类器将收敛得更快,所以你只需要较小的训练集。而且,即使NB假设不成立,朴素贝叶斯分类器在实践方面仍然表现很好。如果想得到简单快捷的执行效果,这将是个好的选择。缺点:不能学习特征之间的相互作用(比如,它不能学习出:虽然你喜欢布拉德·皮特和汤姆·克鲁斯的电影,但却不喜欢他们一起合作的电影)。逻辑回归优点:有许多正则化模型的方法,不需要像在朴素贝叶斯分类器中那样担心特征间的相互关联性。与决策树和支持向量机 不同,有一个很好的概率解释,并能容易地更新模型来吸收新数据(使用一个在线梯度下降方法)。如果你想要一个概率框架(比如,简单地调整分类阈值,说出什么时候是不太确定的,或者获得置信区间),或你期望未来接收更多想要快速并入模型中的训练数据,就选择逻辑回归。决策树优点:易于说明和解释,很容易地处理特征间的相互作用,并且是非参数化的,不用担心异常值或者数据是否线性可分(比如,决策树可以很容易地某特征x的低端是类A,中间是类B,然后高端又是类A的情况)。缺点:1)不支持在线学习,当有新样本时需要重建决策树。2)容易过拟合,但这也正是诸如随机森林(或提高树)之类的集成方法的切入点。另外,随机森林适用于很多分类问题(通常略优于支持向量机)---快速并且可扩展,不像支持向量机那样调一堆参数。随机森林正渐渐开始偷走它的“王冠”。 SVMs 优点:高准确率,为过拟合提供了好的理论保证;即使数据在基础特征空间线性不可分,只要选定一个恰当的核函数,仍然能够取得很好的分类效果。它们在超高维空间是常态的文本分类问题中尤其受欢迎。然而,它们内存消耗大,难于解释,运行和调参 复杂,尽管如此,更好的数据往往胜过更好的算法,设计好的特征非常重要。如果有一个庞大数据集,这时使用哪种分类算法在分类性能方面可能并不要紧;因此,要基于速度和易用性选择算法。
I. 试述排序算法的一般选择规则 求解答
当数据量不大时,选插入或选择排序,不要用冒泡排序,当数据量大而又注重空间复杂性时选择快速排序或堆排序。
选择排序法就是在遍历一组数据之前先选择一个元素,如果后面的元素小于选择的元素,则将后面的元素与选择的元素进行交换,直到遍历到最后一个元素,这样经过一次遍历后就会得到这组数据的最小的元素也就是有序数据的第一个元素。按照这样的方式继续选择元素继续遍历,直到遍历到这组数据完全有序。
(9)算法怎么选扩展阅读:
注意事项:
非线性时间比较类排序:通过比较来决定元素间的相对次序,由于其时间复杂度不能突破O(nlogn),因此称为非线性时间比较类排序。
线性时间非比较类排序:不通过比较来决定元素间的相对次序,可以突破基于比较排序的时间下界,以线性时间运行,因此称为线性时间非比较类排序。
将待排序数组按照步长gap进行分组,然后将每组的元素利用直接插入排序的方法进行排序,每次将gap折半减小,循环上述操作,当gap=1时,利用直接插入,完成排序。