高斯过程回归的权空间视点推导及代码实现

1.高斯过程简介

1.1定义

高斯过程是随机变量的集合,其中任意有限数量的随机变量具有联合高斯分布。

在函数空间(function-space view)的观点中,高斯过程可以看作是一个定义在函数上的分布,并且直接在函数空间中进行inference。

与之等价的观点是权空间观点(weight-space view),在权空间中进行推断,对权向量的不同抽样将产生不同的函数,这与函数空间观点是一致的,但是函数空间的观点更为直接和抽象。

注:为方便起见,本文没有刻意区分概率密度和概率质量函数。向量用x等小写字母表示,矩阵用X等大写字母表示,标量会专门说明。

2.部分基础知识(已具备的直接跳至第3节)

2.1 部分矩阵计算基础

2.1.1 分块矩阵求逆

有兴趣可以看推导过程,否则直接看最终结论。

设置矩阵
%5Cbegin%7Bpmatrix%7D%20A%26B%5C%5C%20C%26D%20%5Cend%7Bpmatrix%7D
是可逆矩阵,求矩阵的逆矩阵如下(推导是在逆矩阵存在的假设下进行的)。

认为
%5Cbegin%7Bpmatrix%7D%20A%26B%5C%5C%20C%26D%20%5Cend%7Bpmatrix%7D%20%5Cbegin%7Bpmatrix%7D%20X%5C%5C%20Y%20%5Cend%7Bpmatrix%7D%3D%5Cbegin%7Bpmatrix%7D%20P%5C%5C%20Q%20%5Cend%7Bpmatrix%7D,
可用的
%5Cbegin%7Bcases%7D%20AX%2BBY%3DP%5Cdots%5Cdots%281%29%5C%5C%20CX%2BDY%3DQ%5Cdots%5Cdots%282%29%20%5Cend%7Bcases%7D
%282%29Y%3DD%5E%7B-1%7D%28Q-CX%29%5Cdots%5Cdots%283%29购买
%283%29带入(1)并移项整理可得,
X%3D%28A-BD%5E%7B-1%7DC%29%5E%7B-1%7D%28P-BD%5E%7B-1%7DQ%29%5Cdots%5Cdots%284%29
%284%29带入%283%29整理得到,
Y%3DD%5E%7B-1%7D%28Q-C%28A-BD%5E%7B-1%7DC%29%5E%7B-1%7D%28P-BD%5E%7B-1%7DQ%29%29
M%3D%28A-BD%5E%7B-1%7DC%29%5E%7B-1%7D,其实M就是关于D的舒尔补(The Shur complements)。

单独的订单
%5Cbegin%7Bcases%7D%20P%3DI%5C%5C%20Q%3D%5Cmathbf%7B%7D%7B0%7D%20%5Cend%7Bcases%7D%E5%8F%8A%20%5Cbegin%7Bcases%7D%20P%3D%5Cmathbf%7B%7D%7B0%7D%5C%5C%20Q%3DI%20%5Cend%7Bcases%7D
其中I是单位矩阵。
可以得到原始分块矩阵的逆矩阵
%5Cbegin%7Bpmatrix%7D%20M%26-MBD%5E%7B-1%7D%5C%5C%20-D%5E%7B-1%7DCM%26D%5E%7B-1%7D%2BD%5E%7B-1%7DCMBD%5E%7B-1%7D%20%5Cend%7Bpmatrix%7D%5Cdots%5Cdots%285%29

2.1.2 矩阵求逆引理

%28A%2BBCD%29%5E%7B-1%7D%3DA%5E%7B-1%7D-A%5E%7B-1%7DB%28I%2BCDA%5E%7B-1%7DB%29%5E%7B-1%7DCDA%5E%7B-1%7D%5Cdots%5Cdots%286%29
其中矩阵A是可逆的。
证明:

%E8%AE%BE%28A%2BBCD%29X%3DI,其中I是单位矩阵,那么我们可以得到
%5Cbegin%7Bcases%7D%20AX%2BBY%3DI%5Cdots%5Cdots%287%29%5C%5C%20Y%3DBCX%5Cdots%5Cdots%288%29%20%5Cend%7Bcases%7D
可以从%287%29得到X%3DA%5E%7B-1%7D%28b-BY%29,带入%288%29整理
Y%3D%28I%2BCDA%5E%7B-1%7DB%29%5E%7B-1%7DCDA%5E%7B-1%7D
回来得到
X%3DA%5E%7B-1%7D-A%5E%7B-1%7DB%28I%2BCDA%5E%7B-1%7DB%29%5E%7B-1%7DCDA%5E%7B-1%7D

2.2 多元高斯分布

2.2.1 联合分布

xn维向量,则其概率密度函数为
p%28x%29%20%3D%20%5Cfrac%7B1%7D%20%7B%282%5Cpi%29%5E%5Cfrac%7Bn%7D%7B2%7D%20%5Cbegin%7Bvmatrix%7D%20%5CSigma%20%5Cend%7Bvmatrix%7D%20%5E%5Cfrac%7B1%7D%7B2%7D%20%7D%20exp%7B%5C%7B%20-%5Cfrac%7B1%7D%7B2%7D%28x-%5Cmu%29%5ET%5CSigma%5E%7B-1%7D%28x-%5Cmu%29%20%5C%7D%7D%5Cdots%5Cdots%289%29

其中,%5CSigma%5Cmu分别为随机向量x的协方差矩阵和均值向量。

多维高斯分布具有非常好的特性:

  1. 边际分布满足高斯分布。
  2. 条件分布满足高斯分布。
  3. 分量的线性组合也是一个高斯随机变量。

2.2.2 条件概率分布

令随机向量x符合多维高斯分布,将其分成不相交的两个部分
x%3D%5Cbegin%7Bpmatrix%7D%20x_a%5C%5Cx_b%20%5Cend%7Bpmatrix%7D

x的平均向量
%5Cmu%3D%5Cbegin%7Bpmatrix%7D%20%5Cmu_a%5C%5C%5Cmu_b%20%5Cend%7Bpmatrix%7D
协方差矩阵是
%5CSigma%3D%5Cbegin%7Bpmatrix%7D%20%5CSigma_%7Baa%7D%26%5CSigma_%7Bab%7D%5C%5C%20%5CSigma_%7Bba%7D%26%5CSigma_%7Bbb%7D%20%5Cend%7Bpmatrix%7D
精度矩阵是
%5CLambda%3D%5CSigma%5E%7B-1%7D%3D%5Cbegin%7Bpmatrix%7D%20%5CLambda_%7Baa%7D%26%5CLambda_%7Bab%7D%5C%5C%20%5CLambda_%7Bba%7D%26%5CLambda_%7Bbb%7D%20%5Cend%7Bpmatrix%7D
其中协方差矩阵是正定的,因为它的对称性,%5CSigma_%7Bab%7D%3D%5CSigma_%7Bab%7D%5ET%5CLambda_%7Bab%7D%3D%5CLambda_%7Bab%7D%5ET

注意这是一个分块矩阵,我们不能简单地将每个矩阵分块求逆,我们使用公式%285%29,我们可以得到
%5CLambda_%7Baa%7D%3D%28%5CSigma_%7Baa%7D-%5CSigma_%7Bab%7D%5CSigma_%7Bbb%7D%5E%7B-1%7D%5CSigma_%7Bba%7D%29%5E%7B-1%7D%5Cdots%5Cdots%2810%29

%5CLambda_%7Bab%7D%3D-%28%5CSigma_%7Baa%7D-%5CSigma_%7Bab%7D%5CSigma_%7Bbb%7D%5E%7B-1%7D%5CSigma_%7Bba%7D%29%5E%7B-1%7D%5CSigma_%7Bab%7D%5CSigma_%7Bbb%7D%5E%7B-1%7D%5Cdots%5Cdots%2811%29

接下来,我们找到给定x_bx_a的条件概率分布。注意,高斯分布的形式主要取决于指数项,所以我们使用匹配的方法找到对应的均值和协方差矩阵,而不考虑归一化系数,得到条件分布的形式。

索引项是
-%5Cfrac%7B1%7D%7B2%7D%28x_a-%5Cmu_a%29%5ET%5CLambda_%7Baa%7D%28x_a-%5Cmu_a%29%20-%5Cfrac%7B1%7D%7B2%7D%28x_a-%5Cmu_a%29%5ET%5CLambda_%7Bab%7D%28x_b-%5Cmu_b%29%20-%5Cfrac%7B1%7D%7B2%7D%28x_b-%5Cmu_a%29%5ET%5CLambda_%7Bba%7D%28x_a-%5Cmu_a%29%20-%5Cfrac%7B1%7D%7B2%7D%28x_b-%5Cmu_b%29%5ET%5CLambda_%7Bbb%7D%28x_b-%5Cmu_b%29%5Cdots%2812%29
观察式(9)中指数项的形式,可发现精度矩阵出现在x的二次项中,精度矩阵和均值的乘积出现在x%5ET的线性项中,因此我们可得
%5CSigma_%7Ba%7Cb%7D%3D%5CLambda_%7Baa%7D%5E%7B-1%7D%5Cdots%5Cdots%2813%29%5C%5C%20%5CLambda_%7Bab%7D%5Cmu_%7Ba%7Cb%7D%3D%5CLambda_%7Baa%7D%5Cmu_a-%5CLambda_%7Bab%7D%28x_b-%5Cmu_b%29%5Cdots%5Cdots%2813%27%29
由式(10)(11)可得
%5Cmu_%7Ba%7Cb%7D%3D%28%5Cmu_a-%5CLambda_%7Baa%7D%5E%7B-1%7D%5CLambda_%7Bab%7D%28x_b-%5Cmu_b%29%29%5Cdots%5Cdots%2814%29
这样我们得到p%28x_a%7Cx_b%29的分布,我们发现它的协方差与x_b无关,而均值是x_b的线性函数,实际上是线性高斯模型的一个例子。

2.2.3 简单的线性高斯模型及贝叶斯定理

贝叶斯公式:
p%28x%7Cy%29%3D%5Cfrac%7Bp%28x%29p%28y%7Cx%29%7D%7Bp%28y%29%7D%5Cdots%5Cdots%2815%29
我们设置
x%5Csim%20Gaussian%28x%7C%5Cmu%2C%20%5CLambda%5E%7B-1%7D%29%5C%5C%20y%7Cx%5Csim%20Gaussian%28y%7CAx%2Bb%2C%20L%5E%7B-1%7D%29
其中,%5CLambda%E5%92%8CLx%E5%92%8Cy的精度矩阵,y的均值是x的线性函数。
接下来,我们想知道z%3D%5Cbegin%7Bpmatrix%7D%20x%5C%5C%20y%20%5Cend%7Bpmatrix%7D的联合分布。

依然使用配方的方法,关注于指数项的系数。根据式(15)可得,
lnp%28z%29%5Cpropto%20lnp%28x%29%2Blnp%28y%7Cx%29
所以观察
-%5Cfrac%7B1%7D%7B2%7D%28x-%5Cmu%29%5ET%5CLambda%28x-%5Cmu%29%20-%5Cfrac%7B1%7D%7B2%7D%28y-Ax-b%29%5ETL%28y-Ax-b%29
整理次要项后,有
-%5Cfrac%7B1%7D%7B2%7Dx%5ET%28%5CLambda%2BA%5ETLA%29x%20-%5Cfrac%7B1%7D%7B2%7Dy%5ETLy%20%2B%5Cfrac%7B1%7D%7B2%7Dy%5ETLAx%20%2B%5Cfrac%7B1%7D%7B2%7Dx%5ETA%5ETLy%5C%5C%20%3D-%5Cfrac%7B1%7D%7B2%7D%5Cbegin%7Bpmatrix%7Dx%5ET%26y%5ET%5Cend%7Bpmatrix%7D%20%5Cbegin%7Bpmatrix%7D%20%5CLambda%2BA%5ETLA%26A%5ETL%5C%5C%20LA%26L%20%5Cend%7Bpmatrix%7D%20%5Cbegin%7Bpmatrix%7D%20x%5C%5C%20y%20%5Cend%7Bpmatrix%7D
因此,可以得到精度矩阵
R%5Bz%5D%3D%5Cbegin%7Bpmatrix%7D%20%5CLambda%2BA%5ETLA%26A%5ETL%5C%5C%20LA%26L%20%5Cend%7Bpmatrix%7D%5Cdots%2816%29
根据公式(5)可得协方差矩阵,
Cov%5Bz%5D%3D%5Cbegin%7Bpmatrix%7D%20%5CLambda%5E%7B-1%7D%26%5CLambda%5E%7B-1%7DA%5ET%5C%5C%20A%5CLambda%5E%7B-1%7D%26L%5E%7B-1%7D%2BA%5CLambda%5E%7B-1%7DA%5ET%20%5Cend%7Bpmatrix%7D%5Cdots%2817%29
再次查看项目
x%5ET%5CLambda%5Cmu-x%5ETA%5ETLb%2By%5ETLb%3D%5Cbegin%7Bpmatrix%7Dx%5C%5Cy%5Cend%7Bpmatrix%7D%5ET%20%5Cbegin%7Bpmatrix%7D%20%5CLambda%5Cmu-A%5ETLb%5C%5C%20Lb%20%5Cend%7Bpmatrix%7D
由此并根据式(13’)(16)可得均值
E%5Bz%5D%3D%5Cbegin%7Bpmatrix%7D%5Cmu%5C%5CA%5Cmu%2Bb%5Cend%7Bpmatrix%7D%5Cdots%5Cdots%2818%29
这个结果也符合我们的直觉,可以得到y的边际分布为
E%5By%5D%3DA%5Cmu%2Bb%5Cdots%5Cdots%2819%29%5C%5C%20Cov%5By%5D%3DL%5E%7B-1%7D%2BA%5CLambda%5E%7B-1%7DA%5ET%5Cdots%5Cdots%2820%29

3.高斯过程回归的权空间观点推导

先回忆一下一般的线性回归模型,我们就不介绍基函数了,
y%3Dx%5ETw%2B%5Cepsilon
其中y%2Cepsilon是代表实际数据值的一维变量,%5Cepsilon代表高斯噪声,我们假设
%5Cepsilon%20%5Csim%20Gaussian%28%5Cepsilon%7C0%2C%20%5Csigma_n%5E2%29
因此,由于训练样本x是一个定量,那么
y%7Cw%2Cx%20%5Csim%20Gaussian%28y%7Cx%5ETw%2C%20%5Csigma_n%5E2%29
下面规定Y是由实际数据值组成的向量,X是由输入x组成的矩阵。这里我们异常规定X的每一列都是输入,样本是
%5C%7B%28x_i%2Cy_i%29%2Ci%3D1%2C2%2C%5Cdots%20n%20%5C%7D%2C%E5%85%B6%E4%B8%ADx_i%E4%B8%BAN%E7%BB%B4%E5%90%91%E9%87%8F
我们首先对 w 做一个先验分布假设,设置
w%20%5Csim%20Gaussian%28w%7C0%2C%20%5CSigma_p%29%5Cdots%5Cdots%2821%29
Y的似然函数为
p%28Y%7Cw%2C%20X%29%3D%5Cprod_%7Bi%7D%5Enp%28y_i%7Cw%2Cx_i%29%3DGaussian%28Y%7CX%5ETw%2C%5Csigma_n%5E2I%29%5Cdots%5Cdots%2822%29
根据贝叶斯定理以及式(19)(20)可得w的后验分布
w%7CY%2CX%20%5Csim%20Gaussian%28w%7C%5Csigma_n%5E%7B-2%7DA%5E%7B-1%7DXY%2CA%5E%7B-1%7D%29%5C%5C
%E5%85%B6%E4%B8%ADA%3D%5CSigma%5E%7B-1%7D_p%2B%5Csigma_n%5E%7B-2%7DXX%5ET

得到w的后验分布后,我们需要进行预测,即得到预测分布。给定测试样本%28X_%2A%2C%20Y_%2A%29,我们仍然考虑测试样本点有高斯噪声的情况。从根本上说,我们最终想要的不是带有噪声的样本值,而是生成这些数据的函数,这也符合定义:高斯过程是定义在函数上的分布。假设预测函数为f_%2A

p%28f_%2A%7CX_%2A%2CX%2CY%29%3D%5Cint%20p%28f_%2A%7CX_%2A%2Cw%29p%28w%7CX%2CY%29dw
f_%2A%7CX_%2A%2Cw%5Csim%20Gaussian%28f_%2A%7CX_%2A%5ETw%2C%5Csigma_n%5E2I%29
这同样是一个线性高斯模型,我们需要求解边缘概率分布,由式(19)(20)可得
f_%2A%7CX_%2A%2CX%2CY%5Csim%20Gaussian%28f_%2A%7C%5Csigma_n%5E%7B-2%7DX_%2A%5ETA%5E%7B-1%7DXY%2CX_%2A%5ETA%5E%7B-1%7DX_%2A%29

A%3D%5CSigma%5E%7B-1%7D_p%2B%5Csigma_n%5E%7B-2%7DXX%5ET
接下来,我们引入基函数,用基函数%5Cphi%28.%29将样本输入x_i映射到高维特征空间,用%5Cphi%28x_i%29%E6%88%96%5Cphi_i来表示映射后的特征向量(feature vector,与eigenvector区分),用%5CPhi表示特征向量组成的矩阵。

f_%2A%7CX_%2A%2CX%2CY%5Csim%20Gaussian%28f_%2A%7C%5Csigma_n%5E%7B-2%7D%5CPhi_%2A%5ETA%5E%7B-1%7DXY%2C%5CPhi_%2A%5ETA%5E%7B-1%7D%5CPhi_%2A%29%5Cdots%5Cdots%2823%29

A%3D%5CSigma%5E%7B-1%7D_p%2B%5Csigma_n%5E%7B-2%7D%5CPhi%5CPhi%5ET%5Cdots%5Cdots%2824%29
但是显示表示一个合适的基函数(basis function)不是一件容易的事情,更别说加上一个先验的协方差矩阵,因此我们隐式的引入这一式子。

我们设K%3D%5CPhi%5ET%5CSigma_p%5CPhi,我们先对式(24)进行处理。
等式两边同时乘以左边的A%5E%7B-1%7D和右边的%5CSigma_p%5CPhi,整理并带入K得到
A%5E%7B-1%7D%5CPhi%3D%5Csigma_n%5E%7B2%7D%5CSigma_p%5CPhi%28%5Csigma_n%5E%7B2%7DI%2BK%29%5E%7B-1%7D%5Cdots%5Cdots%2825%29
将(25)式代入(23)的均值部分可得,
E%5Bf_%2A%5D%3D%5CPhi_%2A%5ET%5CSigma_p%5CPhi%28%5Csigma_n%5E%7B2%7DI%2BK%29%5E%7B-1%7DY
利用矩阵求逆引理(6)可得A%5E%7B-1%7D并带入(23)的协方差部分,可得
Cov%5Bf_%2A%5D%3D%20%5CPhi_%2A%5ET%5CSigma_p%5CPhi_%2A-%5CPhi_%2A%5ET%5CSigma_p%5CPhi%28%5Csigma_n%5E%7B2%7DI%2BK%29%5E%7B-1%7D%5CPhi%5ET%5CSigma_p%5CPhi_%2A
最后我们引入核函数的概念,设置核函数K%28X%2CX%29%3D%5CPhi%5ET%5CSigma_p%5CPhi
以此类推,K%28X_%2A%2CX%29%3D%5CPhi_%2A%5ET%5CSigma_p%5CPhiK%28X_%2A%2CX_%2A%29%3D%5CPhi_%2A%5ET%5CSigma_p%5CPhi_%2A

我们这里介绍常用的高斯核函数k%28x%2Cx%27%29%3D%5Csigma%5E2%20exp%5C%7B%5Cfrac%7B%7Cx-x%27%7C%5E2%7D%7Bl%7D%5C%7D,其中l是高斯过程的length-scale,这里不做过多解释。

最终形式是
E%5Bf_%2A%5D%3DK%28X_%2A%2CX%29%28%5Csigma_n%5E%7B2%7DI%2BK%28X%2CX%29%29%5E%7B-1%7DY
Cov%5Bf_%2A%5D%3D%20K%28X_%2A%2CX_%2A%29-K%28X_%2A%2CX%29%28%5Csigma_n%5E%7B2%7DI%2BK%28X%2CX%29%29%5E%7B-1%7DK%28X%2CX_%2A%29
至此,权重空间视角的推导过程结束。

下面是python实现代码:

gaussian_process_regression.py

import numpy as np


class GaussianProcessRegressor:
    """
    kernel: RBF(sigma_overall, l_scale)
    alpha: noise, 1-D array or scaler
    """
    def __init__(self, kernel, sigma_overall, l_scale, alpha=0.):
        self.kernel = kernel(sigma_overall, l_scale)
        self.alpha = alpha

    def fit(self, X, y):
        X = np.asarray(X)
        y = np.asarray(y)
        self.train_x_ = X
        self.train_y_ = y

    def predict(self, X, return_cov=True, return_std=False):
        if return_cov and return_std:
            raise RuntimeError("return_cov, return_std can't be True in the same time")
        if not hasattr(self, 'train_x_'):
            y_mean = np.zeros(X.shape[0])
            if return_cov:
                y_cov = self.kernel(X, X)
                return y_mean, y_cov
            elif return_std:
                y_cov = self.kernel(X, X)
                return y_mean, np.sqrt(np.diag(y_cov))
            else:
                return y_mean
        K = self.kernel(self.train_x_, self.train_x_)
        L = np.linalg.cholesky(K + self.alpha * np.eye(self.train_x_.shape[0]))
        alpha = np.linalg.solve(L, self.train_y_)
        alpha = np.linalg.solve(L.T, alpha)
        y_mean = self.kernel(self.train_x_, X).T @ alpha
        v = np.linalg.solve(L, self.kernel(self.train_x_, X))
        y_cov = self.kernel(X, X) - v.T @ v + self.alpha * np.eye(X.shape[0])
        if return_cov:
            return y_mean, y_cov
        elif return_std:
            return y_mean, np.sqrt(np.diag(y_cov))
        else:
            return y_mean

    def sample_func(self, X, n_samples=1):
        y_mean, y_cov = self.predict(X, return_cov=True, return_std=False)
        sampled_y = np.random.multivariate_normal(y_mean, y_cov, size=n_samples)
        return sampled_y

kernel.py

import numpy as np


class RBFKernel:
    def __init__(self, sigma, scale):
        self.sigma = sigma
        self.scale = scale

    def __call__(self, x1: np.ndarray, x2: np.ndarray):
        m, n = x1.shape[0], x2.shape[0]
        K_matrix = np.zeros((m, n), dtype=float)
        for i in range(m):
            for j in range(n):
                K_matrix[i, j] = self.sigma * np.exp(-0.5 * np.sum((x1[i] - x2[j]) ** 2) / self.scale)
        return K_matrix

测试代码:

from gaussian_process import RBFKernel, GaussianProcessRegressor
import numpy as np
import matplotlib.pyplot as plt


def get_y(x, alpha):
    return np.cos(x)*0.3 + np.random.normal(0, alpha, size=x.shape)

observation_size = 6
gpr = GaussianProcessRegressor(RBFKernel, sigma_overall=0.04, l_scale=0.5, alpha=1e-4)
sample_size = 3

test_x = np.linspace(0, 10, 100)
prior_mean, prior_cov = gpr.predict(test_x, return_cov=True)
sample_ys = gpr.sample_func(test_x, n_samples=sample_size)
uncertainty = 1.96 * np.sqrt(np.diag(prior_cov))

plt.plot(test_x, prior_mean, label='mean')
plt.fill_between(test_x, prior_mean-uncertainty, prior_mean+uncertainty, alpha=0.1)
for i in range(sample_size):
    plt.plot(test_x, sample_ys[i], linestyle='--')
plt.legend()
plt.title('prior')
plt.show()  # 至此绘制先验分布

train_x = np.array([3, 1, 4, 5, 7, 9])
train_y = get_y(train_x, alpha=1e-4)

gpr.fit(train_x, train_y)
y_mean, y_cov = gpr.predict(test_x, return_cov=True)
sample_ys = gpr.sample_func(test_x, n_samples=sample_size)
uncertainty = 1.96 * np.sqrt(np.diag(y_cov))

plt.plot(test_x, y_mean, label='mean', linewidth=3)
plt.fill_between(test_x, y_mean-uncertainty, y_mean+uncertainty, alpha=0.1)
for i in range(sample_size):
    plt.plot(test_x, sample_ys[i], linestyle='--')
plt.scatter(train_x, train_y, c='red', marker='x', label='observation', linewidths=5)
plt.legend()
plt.title('posterior')
plt.show()  # 绘制后验分布

运行效果如下

高斯过程回归的权空间视点推导及代码实现

高斯过程回归的权空间视点推导及代码实现

下次我将添加功能空间的观点。

我是大二学生,水平有限。不严谨请见谅。

参考

[1]C。E。Rasmussen & C。K。I。Williams.(2006).Gaussian Processes for Machine Learning.7-29.

[2]Christopher M. Bishop.(2007).Pattern Recognition and Machine Learning. 78-93.

文章出处登录后可见!

已经登录?立即刷新

共计人评分,平均

到目前为止还没有投票!成为第一位评论此文章。

(0)
乘风的头像乘风管理团队
上一篇 2022年3月23日 下午4:11
下一篇 2022年3月23日 下午4:57

相关推荐