导读
我们在描述算法的时候,往往也会提到“算法模型”这个概念。模型是什么?算法和模型之间有什么联系?
算法的定义
如果你在大学学过了数据结构,这句话你应该耳熟能详:
通俗地讲,算法是解决问题的一种方法或一个过程。更严格地讲,算法是由若干条指令组成的有穷序列,且满足下述4条性质
输入:0个或者多个外部提供的量作为算法输入项
输出:算法应当产生至少一个量作为输出项
确定性:组成算法的每条指令是清晰的、没有歧义的
有限性:算法中每条指令的执行次数是有限的,执行每条指令的时间也是有限的
——摘自《计算机算法设计与分析》(第五版),王晓东著
那,模型又是什么?
原型的概念
在说明模型之前必须说说原型是什么。原型,简单的说,就是最原始的模型。动漫里经常有作者以身边的谁为原型创作的,打个比方的话,应该就是40原老师笔下的猫娘了。(吐槽:胖次专业户画猫娘有什么不对嘛)
当然原型不限于这个。还有其他的比如:
实际生产中经理最关心的实际上也是一种原型,即生产、管理的实际对象。
或者是研究员在解决实际问题的时候,对于新假设的提出有启发作用的也叫原型。
模型的概念
当我们拿到一个问题之后,如果分析出了原型,我们就能够进行一定程度的总结,然后忽略部分细节、加强部分计算,最终就能够将一个实际问题的解法提取成一套数学方程式。
一个很简单的例子:你想带你家的几只猫娘出去玩,可是考虑到在玩上需要多花钱,于是你选择在路费上尽可能节省。这个问题大家应该熟悉得不能再熟悉了吧,就是线性规划。把一个实际的问题整理成多条直线的相交问题,这就是建模。
我们知道,现在普遍使用的算法例如深度搜索、哈密顿回路等等经典算法都是经过很长时间的发现、假说、论证、优化的不停循环才产生出来,而这个论证的过程就是将算法抽象为一系列的数学模型,然后计算时间复杂度、空间复杂度,最终在比较中筛选更为优秀的。
也就是说:
模型是一类问题的解题步骤,亦即一类问题的算法。
——摘自慕码人2483693对模型与算法之间是什么关系一问的回答
建模的必要性
那么,为什么建模呢?
一个实际问题往往涉及很多很多个方面。举个例子:你们家的小猫娘突然有一天看着像浑身没劲,往往有无数个原因,被你冷落了、陪你玩累了、有点生病了、发情期到了等等。
但是,这么多因素谁知道是什么情况啊,万一没病给整出病了,那不得心疼得要命。所以,你拿出了猫娘观察记录小本本,查询了你们家的猫娘从小以来点点滴滴的反应,高兴了、伤心了、痛苦了、冷漠了等等应有尽有。然后针对这些表现,你一项项对比,并得出一个相关系数。找出所有项目中相关系数最大的一项,然后发现你的猫娘就只是玩累了而已。给她铺条毯子好好睡吧。
这就是建模的好处,能够从所有的选项中找出相关变量并剔除无关变量,甚至能够分析相关变量到底如何影响最终结果。
算法和模型
算法和模型往往都是分不开的。算法是一类问题的抽象解答,而模型则是一系列算法的数学表达。
如果问题不是一类问题,就单单类似这只猫接下来要做什么这样的问题,算法也就失去了存在的必要;同样的,算法如果也不是一系列算法,就单单类似这只狗吃骨头的流程这样的算法,模型也没有存在的必要。就像是数据结构中的抽象实体类ADT
一样,它的存在就是为了描述一系列相似问题的解法的。
所以,你能够理解为什么会有推荐算法模型了么?因为一系列的APP
都将会根据用户的使用情况收集偏好并提高用户体验,这些APP
囊括了生活中的方方面面,包括美食、服饰、手办、模玩、家具还有电子产品甚至性癖(比方说)等等。因为类似,这就抽象出来了。pixiv
机器学习中模型的描述
正如一开始所说的,算法需要有0个以上的输入、1个以上的输出,机器学习中的算法也是一样的,有着0个以上的数据集输入,输出至少一个结果。数据集中包括了大量的具有相似数据结构的信息,可以是事实,也可以是虚拟信息;而输出则是根据结果的预测、分类等等。就如下图所示:
这个机器学习的算法并不是一成不变的,同样也是在不断的实践和训练中逐渐发现最贴近事实、最能概括所有内容的数学模型和算法。
是不是能理解了?