机器学习数学基础
(一)高等数学
-
函数相关问题
- 函数的定义
- 反函数
- 复合函数
-
导数的相关问题
- 定义:假设函数y= f ( x ) f(x) f(x)在 U ( x 0 ) U(x_0) U(x0)处有定义,若:
f ′ ( x 0 ) = lim Δ x → 0 f ( x 0 + Δ x ) − f ( x 0 ) Δ x = lim x → x 0 f ( x ) − f ( x 0 ) x − x 0 存在,则称此极限值为该点的导数 f^{\prime}(x_0) =\lim _{\Delta x \rightarrow 0} \frac{f(x_{0}+\Delta x)-f(x_{0})}{\Delta x}= \lim _{x \rightarrow x_0} \frac {f(x)-f(x_0)}{x-x_0} \text{存在,则称此极限值为该点的导数} f′(x0)=Δx→0limΔxf(x0+Δx)−f(x0)=x→x0limx−x0f(x)−f(x0)存在,则称此极限值为该点的导数
- 函数的和差积商的求导法则
[ u + v ] ′ = u ′ + v ′ [u+v]^{\prime} =u^{\prime}+v^{\prime} [u+v]′=u′+v′
[ u − v ] ′ = u ′ − v ′ [u-v]^{\prime} =u^{\prime}-v^{\prime} [u−v]′=u′−v′
[ u . v ] ′ = u ′ v + v ′ u [u.v]^{\prime} =u^{\prime}v+v^{\prime}u [u.v]′=u′v+v′u
[ u v ] ′ = u ′ v + v ′ u v 2 [\frac{u}{v}]^{\prime} =\frac{u^{\prime}v+v^{\prime}u}{v^2} [vu]′=v2u′v+v′u - 常用的初等函数导数
-
多元函数问题
-
定义:设𝐷是 R 2 R^2 R2的一个非空子集,称映射 𝑓:𝐷→𝐑 为定义在 𝐷 上的二元函数,通常记为𝑧=𝑓(𝑥,𝑦),(𝑥,𝑦)∈𝐷
-
偏导数的定义:设二元函数𝑓(𝑥,𝑦)在点 ( x 0 , y 0 ) (x_0,y_0) (x0,y0)的某一邻域内有定义,若:
f x ′ ( x 0 , y 0 ) = lim Δ x → 0 f ( x 0 + Δ x , y 0 ) − f ( x 0 , y 0 ) Δ x = lim x → x 0 f ( x , y 0 ) − f ( x 0 , y 0 ) x − x 0 f_x^{\prime}(x_0,y_0)=\lim _{\Delta x \rightarrow 0}\frac{f(x_{0}+\Delta x,y_0)-f(x_{0},y_0)}{\Delta x}=\lim _{x \rightarrow x_0}\frac {f(x,y_0)-f(x_0,y_0)}{x-x_0} fx′(x0,y0)=limΔx→0Δxf(x0+Δx,y0)−f(x0,y0)=limx→x0x−x0f(x,y0)−f(x0,y0)存在,则称此极限值为该点对x的偏导数
f y ′ ( x 0 , y 0 ) = lim Δ y → 0 f ( x 0 , y 0 + Δ y ) − f ( x 0 , y 0 ) Δ y = lim y → y 0 f ( x 0 , y ) − f ( x 0 , y 0 ) y − y 0 f_y^{\prime}(x_0,y_0)=\lim _{\Delta y \rightarrow 0}\frac{f(x_{0},y_0+\Delta y)-f(x_{0},y_0)}{\Delta y}=\lim_{y\rightarrow y_0}\frac{f(x_0,y)-f(x_0,y_0)}{y-y_0} fy′(x0,y0)=limΔy→0Δyf(x0,y0+Δy)−f(x0,y0)=limy→y0y−y0f(x0,y)−f(x0,y0)存在,则称此极限值为该点对y的偏导数 -
偏导数的实质:一元函数的导数问题, f ( x , y ) f(x,y) f(x,y)在点 ( x 0 , y 0 ) (x_0,y_0) (x0,y0)处的偏导数纯在的情况下,令 g ( x ) = f ( x , y 0 ) g(x)=f(x,y_0) g(x)=f(x,y0),则此时 f x ′ ( x 0 , y 0 ) = g ′ ( x ) ∣ x = x 0 f_x^{\prime}(x_0,y_0)=g^{\prime}(x)|_{x=x_0} fx′(x0,y0)=g′(x)∣x=x0
-
梯度:梯度的本意是一个向量(矢量),表示某一函数在该点处的方向导数沿着该方向取得最大值,即函数在该点处沿着该方向(此梯度的方向)变化最快,变化率最大(为该梯度的模)。
设二元函数 𝑧=𝑓(𝑥,𝑦) 在平面区域D上具有一阶连续偏导数,则对于每一个点 p ( x , y ) p(x,y) p(x,y)都可求出一个向量 { ∂ f ∂ x , ∂ f ∂ y } = \left \lbrace \frac{\partial f}{\partial x},\frac{\partial f}{\partial y} \right \rbrace= {∂x∂f,∂y∂f}= f x ( x , y ) i ⃗ + f y ( x , y ) j ⃗ f_x(x,y) \vec{i}+f_y(x,y) \vec{j} fx(x,y)i+fy(x,y)j, 该向量就称为函数 𝑧=𝑓(𝑥,𝑦) 在点 p ( x , y ) p(x,y) p(x,y)的梯度,记作gradf (x,y) 或 ∇𝑓(𝑥,𝑦) ,即有:
g r a d f ( x , y ) = ∇ f ( x , y ) = { ∂ f ∂ x , ∂ f ∂ y } = f x ( x , y ) i ⃗ + f y ( x , y ) j ⃗ gradf(x,y)= \nabla f(x,y) = \left \lbrace \frac{\partial f}{\partial x},\frac{\partial f}{\partial y} \right \rbrace = f_x(x,y) \vec{i}+f_y(x,y) \vec{j} gradf(x,y)=∇f(x,y)={∂x∂f,∂y∂f}=fx(x,y)i+fy(x,y)j
-
-
函数求极值,最值,鞍点,拐点
- 极值点导数为0,并且并且左右两次变化趋势相反
- 鞍点导数为0,并且并且左右两次变化趋势相同
- 极值点可能为最值点
- 上图为判定极值的第一充分条件,先找导数为0的点,再判断左右变化趋势
- 极值的第二充分条件:设函数 𝑓(𝑥)在
x
0
x_0
x0处具有二阶导数且
f
′
(
x
0
)
=
0
f^{\prime} (x_0) = 0
f′(x0)=0,
f
′
′
(
x
0
)
≠
0
f^{\prime \prime} (x_0) \ne 0
f′′(x0)=0那么:
(1) 当 f ′ ′ ( x 0 ) < 0 f^{\prime \prime} (x_0) < 0 f′′(x0)<0时,函数 𝑓(𝑥) 在 x 0 x_0 x0处取得极大值;
(1) 当 f ′ ′ ( x 0 ) > 0 f^{\prime \prime} (x_0) > 0 f′′(x0)>0时,函数 𝑓(𝑥) 在 x 0 x_0 x0处取得极小值。 - 极值的第三充分条件:
若 f ′ ′ ( x 0 ) = f^{\prime \prime} (x_0)= f′′(x0)= f ′ ′ ′ ( x 0 ) = ⋯ f^{\prime \prime \prime} (x_0) = \cdots f′′′(x0)=⋯ f n − 1 ( x 0 ) = 0 f^{n-1} (x_0) =0 fn−1(x0)=0,但 f n ( x 0 ) ≠ 0 f^{n} (x_0) \ne 0 fn(x0)=0, ( n > 3 ) (n>3) (n>3),当n为奇数, x 0 为 f ( x ) x_0为f(x) x0为f(x) 的拐点;当n为偶数, x 0 不 是 f ( x ) x_0不是f(x) x0不是f(x) 的拐点。 - 梯度下降法求函数的最值
梯度下降法的基本思想可以类比为一个下山的过程。
假设场景:一个人被困在山上,需要从山上下来(找到山的最低点,也就是山谷)。但此时山上的浓雾很大,导致可视度很低;因此,下山的路径就无法确定,必须利用自己周围的信息一步一步地找到下山的路。这个时候,便可利用梯度下降算法来帮助自己下山。怎么做呢,首先以他当前的所处的位置为基准,寻找这个位置最陡峭的地方,然后朝着下降方向走一步,然后又继续以当前位置为基准,再找最陡峭的地方,再走直到最后到达最低处;同理上山也是如此,只是这时候就变成梯度上升算法了 - 牛顿法
(二)线性代数
- 向量部分
- 向量内积
a
⃗
⋅
b
⃗
=
∣
a
⃗
∣
⋅
∣
b
⃗
∣
c
o
s
θ
,
θ
为
向
量
a
⃗
,
b
⃗
的
夹
角
\vec{a} \cdot \vec{b} = |\vec{a} |\cdot |\vec{b}|cos \theta ,\theta为向量\vec{a},\vec{b}的夹角
a⋅b=∣a∣⋅∣b∣cosθ,θ为向量a,b的夹角,
向
量
a
⃗
,
b
⃗
向量\vec{a},\vec{b}
向量a,b 的内积可用
<
a
⃗
,
b
⃗
>
\left < \vec{a},\vec{b} \right>
⟨a,b⟩ 表示,向量内积的一些性质:
< a ⃗ , b ⃗ > = \left < \vec{a},\vec{b} \right>= ⟨a,b⟩= < b ⃗ , a ⃗ > \left < \vec{b},\vec{a} \right> ⟨b,a⟩
k < a ⃗ , b ⃗ > = k\left < \vec{a},\vec{b} \right>= k⟨a,b⟩= < k a ⃗ , b ⃗ > = \left < k \vec{a},\vec{b} \right>= ⟨ka,b⟩= < a ⃗ , k b ⃗ > \left < \vec{a},k \vec{b} \right> ⟨a,kb⟩
< a ⃗ + b ⃗ , c ⃗ > = \left < \vec{a}+\vec{b} ,\vec{c} \right> = ⟨a+b,c⟩= < a ⃗ , c ⃗ > + \left < \vec{a},\vec{c} \right> + ⟨a,c⟩+ < b ⃗ , c ⃗ > \left < \vec{b},\vec{c} \right> ⟨b,c⟩ - 线性相关、线性无关概念:对于n维向量
α
1
⃗
,
\vec{\alpha_1} ,
α1,
α
2
,
⃗
⋯
\vec{\alpha_2,} \cdots
α2,⋯
α
s
⃗
\vec{\alpha_s}
αs如果存在不全为零的数
k
1
,
k
2
,
⋯
k
s
k_1,k_2,\cdots k_s
k1,k2,⋯ks使得
k
1
α
1
⃗
+
k_1 \vec{\alpha_1} +
k1α1+
k
2
α
2
⃗
+
⋯
k_2 \vec{\alpha_2} + \cdots
k2α2+⋯
k
s
α
s
⃗
=
0
k_s \vec{\alpha_s} = 0
ksαs=0
则称向量组 α 1 ⃗ , \vec{\alpha_1} , α1, α 2 , ⃗ ⋯ \vec{\alpha_2,} \cdots α2,⋯ α s ⃗ \vec{\alpha_s} αs线性相关,否则称它线性无关。 - 范数
1范数: ∥ x 1 ⃗ ∥ 1 = ∑ m = 0 n ∣ x i ∣ \lVert \vec{x_1} \rVert _1 = \sum_{m=0}^n |x_i| ∥x1∥1=∑m=0n∣xi∣
2范数: ∥ x 1 ⃗ ∥ 2 = ∑ m = 0 n x i 2 \lVert \vec{x_1} \rVert _2 = \sum_{m=0}^n x_i^2 ∥x1∥2=∑m=0nxi2
∞ \infty ∞范数: ∥ x 1 ⃗ ∥ ∞ = max 1 < i < n x i \lVert \vec{x_1} \rVert _\infty = \max _{1<i<n} x_i ∥x1∥∞=max1<i<nxi
向量范数的基本性质:
(1)正定性:对所有x∈Rn有||x||⩾0,且||x||=0⇔x=0
(2)齐次性:对所有x∈Rn和常数a有||ax||=|a|||x||
(3)三角不等式:对所有x,y∈Rn有||x+y||⩽||x||+||y|| - 矩阵
- 线性代数的基本问题就是解 n 元一次方程组。例如:二元一次方程组
{ 2 x − y = 0 − x + 2 y = 3 \begin{cases} 2x-y=0 \\ -x+2y=3 \\ \end{cases} {2x−y=0−x+2y=3
写成矩阵的形式是 [ 2 − 1 − 1 2 ] \begin{bmatrix} 2 & -1 \\ -1 & 2 \\ \end{bmatrix} [2−1−12] [ x y ] = \begin{bmatrix} x \\ y \\ \end{bmatrix}= [xy]= [ 0 3 ] \begin{bmatrix} 0 \\ 3 \\ \end{bmatrix} [03]
分析一段有关方程组求解的笔记:
秩所代表的含义之一是有用的列向量的个数(线性无关的列向量的个数)
- 将矩阵 A 与向量
x
⃗
\vec{x}
x相乘当做是对向量的一种操作或者函数,输入 x 而输出
A
x
⃗
A \vec{x}
Ax。
特征向量即在特定的向量 x 方向上输出的 A x ⃗ A \vec{x} Ax平行于 x,即为:
A x ⃗ = λ x A \vec{x} = \lambda x Ax=λx
其中 x 为矩阵 A 的特征向量,而 λ \lambda λ 为 A 的特征值,正定矩阵所有的特征值大于等于0,负定矩阵所有特征值小于等于0
(三)概率论
- 基础概念:
随机试验: 试验是指为了察看某事的结果或某物的性能而从事的某种活动. 在概率论与数理统计中,一个试验如果具有以下3个特点:
可重复性: 在相同条件下可以重复进行
可观察性: 每次试验的可能结果不止一个,并且能事先明确试验的所有可能结果
不确定性: 一次试验之前,不能预知会出现哪一个结果。
样本点和样本空间:
每次试验的每一个结果称为基本事件,也称作样本点,记作 𝑤1,𝑤2,⋯ 全部样本点的集合称为样本空间,记作 Ω, 则 Ω= {𝑤1,𝑤2,⋯} - 概率密度的表示
- 由分布列(离散)或者概率密度函数(连续)表示:
事 件 情况1 情况2 情况3 概 率 p 0.25 0.5 0.25 \begin{array}{c|ccc} 事件 & \text{情况1} & \text{情况2} & \text{情况3} \\ \hline 概率p & 0.25 & 0.5 & 0.25 \\ \end{array} 事件概率p情况10.25情况20.5情况30.25 - 概率密度函数:
定义:若存在非负函数 𝑓(𝑥) , 使一个连续型随机变量 𝑋 取值于任一区间 (𝑎,𝑏] 的概率可以表示为 P { a < x < b } = P \lbrace a<x<b \rbrace = P{a<x<b}= ∫ a b f ( x ) d x \int_a^b {f(x)} \,{\rm d}x ∫abf(x)dx
几个常用的概率分布类型:1.均匀分布 2.正态分布 3.指数分布 4.泊松分布
- 常用的数据特征
- 均值: E ( x ) = ∑ m = 0 n x i ∗ p i E(x) = \sum_{m=0}^n x_i*p_i E(x)=∑m=0nxi∗pi
- 方差: D ( x ) = E [ x − E ( x ) ] 2 D(x) = E[x-E(x)]^2 D(x)=E[x−E(x)]2
- 标准差: σ x = D ( x ) \sigma _x = \sqrt{D(x)} σx=D(x)
- 协方差: C o v ( x , y ) = E ( x y ) − E ( x ) E ( y ) Cov(x,y)=E(xy) - E(x)E(y) Cov(x,y)=E(xy)−E(x)E(y)
- 相关系数: ρ x y = C o v ( x , y ) σ x ⋅ σ y \rho _{xy} = \frac {Cov(x,y)}{\sigma _x \cdot \sigma _y} ρxy=σx⋅σyCov(x,y)
课后习题
- 求不同的a,b取值对Rosenbrock函数图像的影响。
R
(
x
,
y
)
=
(
a
−
x
)
2
+
b
(
y
−
x
2
)
2
R(x,y) = (a-x)^2 + b( y-x^2 )^2
R(x,y)=(a−x)2+b(y−x2)2
第一题的解题思路首先是将函数求对x和对y的偏导,但是太过复杂,分析不下去,之后转化思路对函数的两个部分进行分析:
( a − x ) 2 (a-x)^2 (a−x)2 的图像如图
a的取值不同可让这个曲面左右平移
b
(
y
−
x
2
)
2
b( y-x^2 )^2
b(y−x2)2 的图像如图
图像在
点
(
x
,
x
2
)
点(x,x^2)
点(x,x2)上的数值为0,若用z=k的平面截图这个曲面,会发现截面上有两条永远不会有交点的抛物线,b的取值不同决定了平面是在z轴的负半轴还是在z轴的正半轴,决定曲面张开离z轴的大小
将上面两个函数图像结合,对R(x,y)的图像进行简单的分类:
1.a>0,b>0
图像会往第一象限拐,存在最小值
2.a<0,b>0
图像会往第二象限拐,图像与a>0,b>0情况类似,存在最小值
3.b<0的时候图像比较复杂,无法看出图像有无最值
关于第一问主要是使用的geogebra观察的,不过也还是没能比较准确的将图像进行分类(´・ω・`)
- 通过编程求函数的极值,选择a>0,b>0的情况a=1,b=1,求函数的最小值,令 R ( x , y ) = ( 1 − x ) 2 + ( y − x 2 ) 2 R(x,y) = (1-x)^2 + ( y-x^2 )^2 R(x,y)=(1−x)2+(y−x2)2
import numpy as np
import matplotlib as mpl
import matplotlib.pyplot as plt
from mpl_toolkits.mplot3d import Axes3D
def f2(x1,x2):
return (x1-1)**2+(x2-x1**2)**2
X1 = np.arange(-5,5,0.1)
X2 = np.arange(-5,5,0.1)
X1, X2 = np.meshgrid(X1, X2) # 生成xv、yv,将X1、X2变成n*m的矩阵,方便后面绘图
Y = np.array(list(map(lambda t : f2(t[0],t[1]),zip(X1.flatten(),X2.flatten()))))
Y.shape = X1.shape # 1600的Y图还原成原来的(40,40)
%matplotlib inline
#作图
fig = plt.figure(facecolor='w')
ax = Axes3D(fig)
ax.plot_surface(X1,X2,Y,rstride=1,cstride=1,cmap=plt.cm.jet)
ax.set_title(u'$ (x1-1)^2+(x2-x1^2)^2 $')
plt.show()
def hx1(x, y):
return 4*x**3-4*x*y+2*x-2
def hx2(x, y):
return 2*y-2*x**2
x1 = 1
x2 = 3
#学习率
alpha = 0.1
#保存梯度下降经过的点
GD_X1 = []
GD_X2 = []
GD_Y = []
GD_X1.append(x1)
GD_X2.append(x2)
GD_Y.append(f2(x1,x2))
# 定义y的变化量和迭代次数
y_change = f2(x1,x2)
iter_num = 0
print(y_change)
while(abs(y_change) > 1e-10) :
tmp_x1 = x1 - alpha * hx1(x1,x2)
tmp_x2 = x2 - alpha * hx2(x1,x2)
tmp_y = f2(tmp_x1,tmp_x2)
y_change =f2(x1,x2)-tmp_y
x1 = tmp_x1
x2 = tmp_x2
GD_X1.append(x1)
GD_X2.append(x2)
GD_Y.append(tmp_y)
iter_num =iter_num+1
print(u"最终结果为:(%.5f, %.5f, %.5f)" % (x1, x2, f2(x1,x2)))
print(u"迭代过程中X的取值,迭代次数:%d" % iter_num)
fig = plt.figure(facecolor='w',figsize=(20,20))
ax = Axes3D(fig)
ax.plot_surface(X1,X2,Y,rstride=1,cstride=1,cmap=plt.cm.jet)
ax.plot(GD_X1,GD_X2,GD_Y,'wo--')
ax.set_xlabel('x')
ax.set_ylabel('y')
ax.set_zlabel('z')
ax.set_title(u' learning_rate:%.3f; result:(%.3f, %.3f, %.3f);num_:%d ' % (alpha, x1, x2, f2(x1,x2), iter_num))
plt.show()
采用梯度下降算法,梯度下降的次数为297,求出的最小值约为0,
x
1
,
x
2
x_1,x_2
x1,x2分别为1.00003, 1.00008,对于a>0,b>0的情况,R(x,y)的最小值为0,所以算法过程大致是正确的。
(第一次使用这种方式记笔记,排版有点丑^ _ ^)