机器学习的算法和普通《算法导论》里的算法有什么本质上的异同
发布网友
发布时间:2022-05-09 20:16
我来回答
共2个回答
热心网友
时间:2023-10-17 07:52
作者:董可人
链接:http://www.hu.com/question/24976006/answer/29682806
来源:知乎
著作权归作者所有。商业转载请联系作者获得授权,非商业转载请注明出处。
算法导论里的算法本质上是对有精确解的问题,如何更有效率地求得这个解。这个效率可以是计算时间更短,也可以是计算过程所需要的空间更少。
一个简单的例子是,给定一个乱序数组,如何快速的将其按从小到大的顺序重新排列,或者找到其中的中位数。这些问题都有确定且唯一的答案,一般都会有一个笨方法(穷举或遍历),只要一步一步来就可以解,所谓算法只是如何精简步骤,更快更省事地找到这个解。这些算法处理的数据也都是结构简洁且干净的类型,比如数组,二叉树,图之类的数据结构。数据规模对于这些算法而言,影响的是计算所需的时间和空间,不会因为规模改变而影响算法本身的逻辑以及计算的结果。
机器学习要解决的问题一般没有精确解,也不能用穷举或遍历这种步骤明确的方法找到解,而且需要强调的是“学习”这个属性,即希望算法本身能够根据给定的数据或计算环境的改变而动态的发现新的规律,甚至改变算法程序的逻辑和行为。
举例来说,可以是把一千份文档归类到不同的几个类别里。最简单的可以是给定几个类别,比如新闻,小说,诗歌等,算法来根据文章内容自动划分到对应的类别里。这里可以看出这个问题即使让人做,也有很多模糊不能确定的地方,比如一篇法制晚报上的犯罪纪实是应该划到新闻,还是小说呢?或者说一篇长诗比如荷马史诗是应该归在小说还是诗歌呢?机器学习算法想要解决的,就是根据从文章内容里找到的规律,来自动的给出一个划分。而不同算法可以给出不同的解,这些解都可以是“正确”的,所以一般还需要人为设计一个评判标准来决定孰优孰劣。
也可以不事先给定类别,而是让算法自己去发现文章中的规律,把相似度高的文章划分到一起。这样不同的算法可能给出不同数量的类别划分,可能是三个,四个,或者五个,也都可以是“正确”的划分。甚至什么是“相似度”,不同算法也可以给出不同解释,可以是名词动词形容词的词频及比例,也可以是句子的语法结构等。
更进一步的,你可能还希望这个算法能够用来判断一份新的文档的类别。而输入的新文档越多,也会进一步扩大初始数据集的规模,规模变大以后,原来数据中不明显的规律可能就变明显了。比如说原来一千份文档中只有一篇议论文,可能大多算法都无法把它单独划出一个类别,但当你持续输入一百份议论文后,数据中议论文的比例就变成了101/1100,差不多10%,这时候算法就应该划分出单独的议论文类别。在这个意义上,数据本身也对算法有很大的影响,这也是和算法导论中的算法的一个本质区别。
技术上说,算法导论中的算法关注点在数据结构和计算复杂度,属于离散数学的一个分支,不涉及微积分等高等数学概念。机器学习的算法本身是基于概率,统计和优化(optimization)等理论和技术,从这个角度上说给人感觉更“数学”一点。
在具体的实现细节上,机器学习的算法会大量应用算法导论中的技术来改进计算效率。但需要强调这仅仅是对底层实现来说,在算法本身的逻辑上,二者没有太多联系。换句话说,算法导论中的技术可以帮助你写出更快的程序来运行机器学习算法,但是这对机器学习要解决的问题本身是没有什么帮助的。熟练使用二叉树散列表,准确估算一个图算法的复杂度,都没有任何可能帮助你猜到在女朋友过生日时送什么礼物最好(使用了机器学习算法的淘宝君却很可能知道!)。因此不要把它们看成是搭积木拼构件的关系。
最后,如果以上解释仍然让你费解,那么还有一个更通俗的解释:算法导论是教你如何数数,而机器学习基本上相当于星座算命。一个很机械,一个靠忽悠,差不多就是这样吧。
具体分析见链接:http://www.hu.com/question/24976006
热心网友
时间:2023-10-17 07:52
机器学习的算法在使用之前需要训练,而普通算法不需要,而训练需要大量的样本数据,比如说同样一个正弦sin()函数,如果用如果用机器学习算法来实现的话就需要很多这样的样本数据:
0=sin(0)
.......
1=sin(90)
从本质上来说,机器学习算法是总结已知的训练数据中的“规律”,然后用这个“规律”去计算未知的数据,而普通算不具有总结规律这个特性