AlphaGo Zero中，MCTS搜索的超参数由高斯过程优化决定。

## （二）GP初步理解

GP背后的关键思想是可以使用无限维多元高斯分布拟合函数。即：输入空间中的每个点与一个随机变量相关联，并将多元高斯分布用来拟合这些点的联合分布。

GP回归

1.88

96.99%

11.93

85.73%

8.88

87.65%

12.66

84.19%

9.97

87.84%

45.14

52.88%

## （二）代码示例

### 1．GP回归

````import operator`
`from functools import reduce`
`from scipy.optimize import minimize`
```
```
`#多维输入的高斯过程回归`
`class GPR:`
`  def __init__(self, optimize=True):`
`    self.is_fit = False`
`    self.train_X, self.train_y = None, None`
`    self.params = {"l": 0.5, "sigma_f": 0.2}`
`    self.optimize = optimize`
`  #模型训练`
`  def fit(self, X, y):`
`    self.train_X = np.asarray(X)`
`    self.train_y = np.asarray(y) `
`    # hyper parameters optimization`
`    def negative_log_likelihood_loss(params):`
`      self.params["l"], self.params["sigma_f"] = params[0], params[1]`
`      Kyy = self.kernel(self.train_X, self.train_X) + 1e-8 * np.eye(len(self.train_X))`
`      loss = 0.5 * self.train_y.T.dot(np.linalg.inv(Kyy)).dot(self.train_y) + 0.5 * np.linalg.slogdet(Kyy)[1] + 0.5 * len(self.train_X) * np.log(2 * np.pi)`
`      return loss.ravel()`
`    if self.optimize:  `
`      res = minimize(negative_log_likelihood_loss, [self.params["l"], self.params["sigma_f"]],bounds=((1, 100), (1, 100)),method='L-BFGS-B')`
`      self.params["l"], self.params["sigma_f"] = res.x[0], res.x[1]`
`      self.is_fit = True`
`  #预测`
`  def predict(self, X):`
`    if not self.is_fit:`
`      print("GPR Model not fit yet.")`
`      return`
`    X = np.asarray(X)`
`    Kff = self.kernel(self.train_X, self.train_X)  # (N, N)`
`    Kyy = self.kernel(X, X)  # (k, k)`
`    Kfy = self.kernel(self.train_X, X)  # (N, k)`
`    Kff_inv = np.linalg.inv(Kff + 1e-8 * np.eye(len(self.train_X)))  # (N, N)`
`    print(len(self.train_X),len(Kff),len(Kyy),len(Kfy))`
`    mu = Kfy.T.dot(Kff_inv).dot(self.train_y)`
`    cov = Kyy - Kfy.T.dot(Kff_inv).dot(Kfy)`
`    return mu, cov`
`  #核函数`
`  def kernel(self, x1, x2):`
`    dist_matrix = np.sum(x1**2, 1).reshape(-1, 1) + np.sum(x2**2, 1) - 2 * np.dot(x1, x2.T)`
`    return self.params["sigma_f"] ** 2 * np.exp(-0.5 / self.params["l"] ** 2 * dist_matrix)`
```
```
`#在波士顿数据集上训练和验证`
`gpr = GPR(optimize=True)`
`gpr.fit(train_X, train_y)#模型训练`
`y_pred_valid, cov = gpr.predict(valid_X)#在验证集上预测````

### 2．决策树回归

````from sklearn.tree import DecisionTreeRegressor`
```
```
`dtr=DecisionTreeRegressor(max_depth=4)`
`dtr.fit(train_X, train_y) #模型训练`
`y_pred_valid=dtr.predict(valid_X) #在验证集上评估````

#### 3．多项式回归

````from sklearn.preprocessing import PolynomialFeatures`
`from sklearn.linear_model import LinearRegression`
```
```
`poly = PolynomialFeatures(degree=2) # 升维`
`poly.fit(train_X)`
`train_X_ = poly.transform(train_X)`
```
```
`#训练`
`lin_reg = LinearRegression()`
`lin_reg.fit(train_X_, train_y)`
```
```
`#在验证集上评估`
`poly.fit(valid_X)`
`valid_X_ = poly.transform(valid_X)`
`y_pred_valid = lin_reg.predict(valid_X_)````

## （一）GP优缺点

GP优点

GP基于统计学理论，在解决高维非线性的小样本复杂问题上具有优势

GP只需优化超参数，在少量的样本下就能建模

GP对于梯度消失与爆炸问题具有健壮性

GP模型直观、可解释性较好

GP缺点

## （二）大样本数据集下的解决方案

GP的计算复杂度为O(n³)，随着数据量的增加而增加，在大样本数据集下会遇到计算瓶颈。

DeepMind 在两篇论文中探讨了结合神经网络与高斯过程的方法：

2018年在《Neural Processes》中讨论了使用神经网络学习逼近随机过程的方法，将时间复杂度降为O(n)。同时，模型可以直接通过数据学习隐式的核函数，克服了很多函数设计上的限制。

2019年在《Conditional Neural Processes》讨论了结合神经网络与高斯过程解决监督学习问题的端到端的方法，结合了神经网络和类似高斯过程的特征。

## （三）GP在特来电的应用

1．https://mp.weixin.qq.com/s/Ct9en9jzmX3d4JCFb4Fc3g

2．西安邮电大学《基于高斯过程在机器学习中的应用》

3．https://zhuanlan.zhihu.com/p/75589452

4．https://blog.csdn.net/Francis_chang/article/details/106041392

5．https://36kr.com/p/1722194706433

6．https://www.zhihu.com/question/265638507

7．https://www.jiqizhixin.com/articles/2019-02-12-3

8．https://blog.csdn.net/deephub/article/details/120372938

9．https://zhuanlan.zhihu.com/p/39158179