数学在机器学习中非常重要,我整理了微积分知识Python完成方法
作者头像
  • 资讯人大老客
  • 2020-05-12 16:24:25 4

序言

数学在机器学习中扮演着至关重要的角色,无论是在理解算法模型代码方面,还是在工程实践中的系统构建过程中,数学都是不可或缺的工具。

然而,市面上的教程往往过于全面或过于简单地列举知识点,这使得撰写出新颖的内容变得非常困难。许多人都已经接触并学习了不少这样的教程。

因此,本文将分享一些学习数学基础的技巧,希望能对大家有所帮助:

  1. 不要盲目追求大而全的学习材料,也不要花费过多时间在所谓的基础知识上。应尽快进入机器学习的整体流程,先掌握其基本框架。
  2. 学习过程中,不仅要理解和记忆知识点,更重要的是要通过实践来巩固,比如多编写代码。
  3. 数学基础可以在具体的应用场景中逐步深化,不必一开始就面面俱到,而是遇到问题时再针对性地学习。

高等数学/微积分知识点梳理

导数与偏导数

导数的概念可以通过数值差分的方法来定义。例如,一个简单的Python函数可以用来计算导数:

python def numerical_diff(f, x): h = 1e-4 # 0.0001 return (f(x+h) - f(x)) / h

对于偏导数,我们可以使用类似的方法来计算。例如,给定一个二元函数 (f(x0, x1) = x0^2 + x1^2),我们可以通过分别固定一个变量并改变另一个变量的方式来计算偏导数。

```python def function_2(x): return x[0]2 + x[1]2

def function_tmp1(x0): return x0x0 + 4.0*2.0

def function_tmp2(x1): return 3.0*2.0 + x1x1

numericaldiff(functiontmp1, 3.0) # 关于 x0 的偏导数 numericaldiff(functiontmp2, 4.0) # 关于 x1 的偏导数 ```

梯度向量

梯度向量是函数在某一点处变化最快的方向,其每个分量代表相应变量的偏导数。梯度向量在机器学习中常用于优化算法,如梯度下降法。

```python def numericalgradient(f, x): h = 1e-4 # 0.0001 grad = np.zeroslike(x)

for idx in range(x.size):
    tmp_val = x[idx]

    # 计算 f(x+h)
    x[idx] = tmp_val + h
    fxh1 = f(x)

    # 计算 f(x-h)
    x[idx] = tmp_val - h
    fxh2 = f(x)

    grad[idx] = (fxh1 - fxh2) / (2*h)

    # 还原值
    x[idx] = tmp_val

return grad

```

通过梯度下降法,我们可以找到函数的最小值点。例如,对于函数 (f(x0, x1) = x0^2 + x1^2),我们可以使用梯度下降法找到其最小值点。

```python def gradientdescent(f, initx, lr=0.01, stepnum=100): x = initx x_history = []

for i in range(step_num):
    x_history.append(x.copy())
    grad = numerical_gradient(f, x)
    x -= lr * grad

return x, np.array(x_history)

initx = np.array([-3.0, 4.0]) lr = 0.1 stepnum = 20 x, xhistory = gradientdescent(function2, initx, lr=lr, stepnum=stepnum) print(x) ```

雅克比矩阵

雅克比矩阵描述了一个向量函数在其各点处的线性变换性质。在某些特定的数学问题中,如线性方程组的求解,雅克比矩阵的迭代求解方法非常有用。

```python def Jacobi(mx, mr, n=100, c=0.0001): if len(mx) == len(mr): x = [[0] for _ in range(len(mr))] count = 0

    while count < n:
        nx = []

        for i in range(len(x)):
            nxi = mr[i][0]

            for j in range(len(mx[i])):
                if j != i:
                    nxi += (-mx[i][j]) * x[j][0]

            nxi /= mx[i][i]
            nx.append([nxi])

        lc = [abs(x[i][0] - nx[i][0]) for i in range(len(x))]

        if max(lc) < c:
            return nx

        x = nx
        count += 1

    return False

else:
    return False

```

海森矩阵

海森矩阵是一个多元函数的二阶偏导数构成的方阵,它能够描述函数的局部曲率。在机器学习领域,海森矩阵常用于优化算法,特别是在大规模优化问题中。

```python import numpy as np import scipy.optimize as opt

def rosenhess(x): x = np.asarray(x) H = np.diag(-400*x[:-1], 1) - np.diag(400*x[:-1], -1) diagonal = np.zeroslike(x) diagonal[0] = 1200x[0]2 - 400x[1] + 2 diagonal[-1] = 200 diagonal[1:-1] = 202 + 1200x[1:-1]2 - 400x[2:] H = H + np.diag(diagonal) return H

def rosen(x): return sum(100.0(x[1:]-x[:-1]2.0)2.0 + (1-x[:-1])*2.0)

def rosender(x): xm = x[1:-1] xmm1 = x[:-2] xmp1 = x[2:] der = np.zeroslike(x) der[1:-1] = 200(xm-xm_m12) - 400(xm_p1 - xm2)xm - 2(1-xm) der[0] = -400x[0](x[1]-x[0]2) - 2(1-x[0]) der[-1] = 200(x[-1]-x[-2]2) return der ```

以上内容是对机器学习中常用的一些高等数学和微积分概念及其应用进行了简要介绍,并通过Python代码演示了如何实现这些概念。希望对大家有所帮助。

    本文来源:图灵汇
责任编辑: : 资讯人大老客
声明:本文系图灵汇原创稿件,版权属图灵汇所有,未经授权不得转载,已经协议授权的媒体下载使用时须注明"稿件来源:图灵汇",违者将依法追究责任。
    分享
微积分整理机器完成非常重要数学方法知识Python
    下一篇