算法是什么?为什么要学习算法?请看下面这个案例(外行看热闹,内行看门道)。
懂算法的程序员:
不懂算法的程序员:
算法是计算机科学领域最重要的基石之一,但却受到了一些程序员的冷落。
许多小伙伴看到一些公司在招聘时,要求要会五花八门的编程语言,就认为学计算机就是学各种编程语言,或者认为,学习最新的语言、技术、标准就是最好的铺路方法。
其实大家都理解错了。
01.学习算法的重要性
编程语言虽然该学,但是学习计算机算法和理论更重要,因为计算机语言和开发平台日新月异,但万变不离其宗的是那些算法和理论。
例如数据结构、算法、编译原理、计算机体系结构、关系型数据库原理等等。
这些基础课程更可以称之为为“内功”,而新的语言、技术、标准则更像是“外功”。
整天赶时髦的人最后只懂得招式,没有功力,是不可能成为高手的。
在现下备受青睐的人工智能领域,用到的算法更加灵活多样。当中会涉及到一些数学相关的知识。
当我们需要判断某些东西的相似度或者说相关度的时候,会计算它们之间的距离,而计算距离,我们会有几种不同的方法。
02.算法之距离度量的几种方法
我们都知道两点之间直线距离最近。比如下图AB两个点,从A到B的最短距离就是这条直线。
如果我们想知道从家到学校之间的距离走哪条路最近,照刚才所说,直接连接家到学校的直线不就是最短路线吗?
没错,如果你会飞这完全不是问题。然而事实我们走路或者开车是不能横穿街区中的建筑物的,只能走马路到达目的地。
直线距离并不能作为我们实际距离的判断。
我们把这个问题简化如下图表示:
网格表示街区,边框表示的是马路。我们只能走马路,不能穿越街区。每一格的长度设定为1,要计算从家到学校的最短路线,我们可以用到曼哈顿距离。
那什么是曼哈顿距离?
曼哈顿距离(Manhattan Distance),也叫计程车几何 (Taxicab Geometry) 或者街区距离(City Block Distance),是由十九世纪的赫尔曼·闵可夫斯基所创的辞汇,为欧几里得几何度量空间的几何学用语,用以标明两个点上在标准坐标系上的绝对轴距之总和。
如图中的红线表示的就是曼哈顿距离,也就是在横轴上的距离与在纵轴上的距离之和。
用数学表达式来表示曼哈顿距离,假设有X1和X2两个维度,那么AB两点的曼哈度距离为:
可以计算出AB两点间的欧氏距离,是6+6=12。
那什么是欧氏距离?
一开始我们提到的两点间的直线距离(图中黑色实线),这个距离叫欧几里得距离,又简称欧氏距离。
在数学中,欧几里得距离(Euclidean Distance) 或欧几里得度量是欧几里得空间中两点间“普通”(即直线)距离。
欧氏距离用数学表达,是:
可以计算出AB两点间的欧氏距离,是:
黑色直线表示的欧氏距离是唯一的,而表示曼哈顿距离除了红色的路径,蓝色和绿色路径同样也是表示的曼哈顿距离。
欧氏距离和曼哈顿距离看起来好像截然不同,其实不然。我们把式(2)的欧氏距离换一种表达方式为:
这样曼哈顿距离和欧氏距离看起来就很相似了,其实这两个概念都是明可夫斯基距离的特殊形式。
那什么是明可夫斯基距离?
明氏距离又叫做明可夫斯基距离(Minkowski Distance),是欧氏空间中的一种测度,被看做是欧氏距离和曼哈顿距离的一种推广。
对应上面二维平面的明可夫斯基距离表达式为:
可以看出,当P=1时,明可夫斯基距离就是曼哈顿距离;当P=2时,就是欧氏距离。
上面的公式都是2维的情况,我们拓展到n维,就是所有维度上的绝对差值的p次方之和,再开p次方:
在算法中需要用到距离的度量,来判断样本之间是不是相近。最常见要用到计算距离的机器学习算法有K近邻算法和聚类算法。
应用式(5)计算两≠点(样本)间的距离,p值的选择是一个重要的关注点,通常我们会通过逐个搜索来查找最佳的p值。
除了这里介绍的距离度量方法,还有其他一些方法类似于计算距离,来计算样本的相似度。
本次知识点就先介绍到这里,能看到这里的小伙伴,小编深感着实不易。
看着这一串串“鸡肠”,小编仿佛回到了学生年代,真的是应了那句话:少壮不努力,老大徒伤悲,好在现在还能在工作上提升自己。
还想学习更多关于算法的知识?微信搜索“恒企行家网校”公众号,小姐姐陪你玩转算法,助你迎娶白富美,嫁给高富帅!
网友评论