人工智能的本质是发现事物之间的规律,然后对未来作出预测,一般方法是建立模型、求解模型。
“线性代数”、“概率论”、“优化论”这三门数学课程,前两门是建模,后一门是求解,是学习人工智能的基础。
线性代数是学习人工智能过程中必须掌握的知识。线性代数中我们最熟悉的就是联立方程式了,而线性代数的起源就是为了求解联立方程式。只是随着研究的深入,人们发现它还有更广阔的用途。
在数据科学中,经常需要知道个体间差异的大小,进而评价个体的相似性和类别。衡量个体差异的方法有很多,有的方法是从距离的角度度量,两个个体之间的距离越近就越相似,距离越远就越不相似;有的方法是从相似的角度度量。
用距离衡量个体之间的差异时,最常用的距离就是欧氏距离,它和我们中学时学过的两点间距离一样,只不过现在的点是多维空间上的点了。
欧氏距离计算公式:
对应的Python代码如下:
import numpy as np
users=['u1','u2','u3']
rating_matrix=np.array([4,3,0,0,5,0],[5,0,4,0,4,0],[4,0,5,3,4,0])
#根据公式计算用户u1和u2的距离
d1=np.sqrt(np.sum(np.square(rating_matrix[0,:]-rating_matrix[1,:])))
#计算结果
d1
5.196152422706632
除了使用距离,还可以使用相似度来衡量用户的相似性。常用的相似度是夹角余弦相似度。
两个向量a、b的夹角余弦公式:
可以用下面的代码计算两个向量的夹角余弦相似度:
def mod(vec):
#计算向量的模
x=np.sum(vec**2)
return x**5
def sim(vec1,vec2):
#计算两个向量的夹角余弦值
s=np.dot(vec1,vec2)/mod(vec1)/mod(vec2)
return s
#计算前两个用户的相似度
cos_sim=sim(rating_matrix[0],rating_matrix[1])
#计算结果为
0.749268649265355
夹角余弦值越接近1代表越相似。
Python中很多工具包已经实现了绝大多数距离和相似度的计算,可以直接调用。
向量运算、矩阵运算、向量空间模型、多项式回归、岭回归、Lasso回归、矩阵分解等都属于线性代数的范畴。
除了使用数学公式以外,还可以利用概率进行建模。
“概率统计”是统计学习中重要的基础课程,因为机器学习很多时候就是在处理事务的不确定性。
最大似然思想是频率学派使用的概率建模思想基础,它是基于最大似然原理提出的。
最大似然原理,实质是以下两点:
在用概率思想对数据建模时,通常会假设这些数据是从某一种分布中随机采样得到的,比如正态分布。但是我们并不知道这个正态分布是什么样的,均值和方差两个参数未知,“模型已定,参数未知”。这时就可以用最大似然的思想建模,最终得到对模型参数的估计。
总之,最大似然估计的目标是找出一组参数,使得模型生成观测数据的概率最大即可。
除此之外,还可以用贝叶斯方法和采样的方法估计参数。
人们在研究事件的统计规律时,会用随机变量对一个随机现象进行量化。如果两个随机变量不独立,就可以得到著名的贝叶斯公式:
贝叶斯公式之所以非常重要,是因为在机器学习中建的模型可以表示成 P(HD)。D代表拥有的数据,而H则代表对数据中隐藏的模型做出的假设。根据贝叶斯公式就有:
贝叶斯公式从形式上看似乎很简单,而且计算也不复杂,但它是贝叶斯学派的法宝。它成功地引入了先验知识,对频率学派的最大似然估计法进行了改进。
业界大牛曾这样评价贝叶斯建模方法:“人工智能领域出现过3个最重要的进展:深度神经网络、贝叶斯概率图模型和统计学习理论。”
朴素贝叶斯的一个成熟应用是垃圾邮件分类问题,网上有很多案例,大家可以学习。
模型建立起来后,如何求解这个模型属于优化的范畴。优化,就是在无法获得问题的解析解的时候,退而求其次找到一个最优解。当然,需要提前定义好什么是最优,就好像足球比赛之前得先定义好比赛规则一样。
通常的做法是想办法构造一个损失函数,然后找到损失函数的最小值进行求解。
梯度下降算法是最经典的求解算法,除此之外还有逻辑回归算法和凸优化等。
————
以上数学知识是入门人工智能领域必知必会的数学知识,只有打好基础,才能筑牢“上层建筑”。
参考资料:《人工智能基础——数学知识》,作者:张晓明。