基于高斯核函数的简单线性回归实现

高斯过程

高斯过程 Gaussian Processes 是概率论和数理统计中随机过程的一种,是多元高斯分布的扩展,被应用于机器学习、信号处理等领域。本文对高斯过程进行公式推导、原理阐述、可视化以及代码实现,介绍了以高斯过程为基础的高斯过程回归 Gaussian Process Regression 基本原理、超参优化、高维输入等问题。

  • 一元高斯分布公式
    其概率密度公式如下:
    p ( x ) = 1 σ 2 × π exp ⁡ ( − ( x − μ ) 2 2 σ 2 ) p\left( x\right) =\dfrac {1}{\sigma \sqrt {2\times \pi }}\exp \left( -\dfrac {\left( x-\mu \right) ^{2}}{2\sigma ^{2}}\right) p(x)=σ2×π 1exp(2σ2(xμ)2)

  • 核函数(协方差函数)
    核函数是一个高斯过程的核心,核函数决定了一个高斯过程的性质。核函数在高斯过程中起的作用是生成一个协方差矩阵(相关系数矩阵),衡量任意两个点之间的“距离”。最常用的一个核函数为高斯核函数,也成为径向基函数 RBF。其基本形式如下。其中 σ 和 h 是高斯核的超参数。
    K ( x i , x j ) = σ 2 exp ⁡ ( − ∥ x i − x j ∥ 2 2 h 2 ) K\left( x_{i},x_{j}\right) =\sigma ^{2}\exp \left( -\dfrac {\left\| x_{i}-x_{j}\right\|^{2} }{2h^{2}}\right) K(xi,xj)=σ2exp(2h2xixj2)
    以下是Python代码实现:

# 定义核函数
   def kernel(self, x1, x2):
       m,n = x1.shape[0], x2.shape[0]
       dist_matrix = np.zeros((m,n), dtype=float)
       for i in range(m):
           for j in range(n):
               dist_matrix[i][j] = np.sum((x1[i]-x2[j])**2)
       return np.exp(-0.5/self.h**2*dist_matrix)
  • 作业实现如下:
# 导入相关库
import numpy as np
import matplotlib.pyplot as plt
# 定义高斯过程类
class GPR:
   def __init__(self, h):
       self.is_fit = False
       self.train_x, self.train_y = None, None
       self.h = h
       
   def fit(self, x, y):
       self.train_x = np.asarray(x)
       self.train_y = np.asarray(y)
       self.is_fit = True
       
   def predict(self, x):
       if not self.is_fit:
           print("Sorry! GPR Model can't fit!")
           return
       
       x = np.asarray(x)
       kff = self.kernel(x,x)
       kyy = self.kernel(self.train_x, self.train_x)
       kfy = self.kernel(x, self.train_x)
       kyy_inv =  np.linalg.inv(kyy + 1e-8*np.eye(len(self.train_x)))
       
       mu = kfy.dot(kyy_inv).dot(self.train_y)
       return mu
       
       
   # 定义核函数
   def kernel(self, x1, x2):
       m,n = x1.shape[0], x2.shape[0]
       dist_matrix = np.zeros((m,n), dtype=float)
       for i in range(m):
           for j in range(n):
               dist_matrix[i][j] = np.sum((x1[i]-x2[j])**2)
       return np.exp(-0.5/self.h**2*dist_matrix)

# 创造训练集
train_x = np.arange(0,10).reshape(-1,1)
train_y = np.cos(train_x) + train_x
# 制造槽点
train_y = train_y + np.random.normal(0, 0.01, size=train_x.shape)
# 显示训练集的分布
plt.figure()
plt.scatter(train_x, train_y, label="train", c="red", marker="x")
plt.legend()

输出图:
在这里插入图片描述

# 创建训练集
test_x = np.arange(0, 10, 0.1).reshape(-1,1)

# 针对不同h值得到拟合图像
h=0.1
for i in range(10):
    gpr = GPR(h)
    gpr.fit(train_x, train_y)
    mu = gpr.predict(test_x)
    test_y = mu.ravel()
    plt.figure()
    plt.title("h=%.2f"%(h))
    plt.plot(test_x, test_y, label="predict")
    plt.scatter(train_x, train_y, label="train", c="red", marker="x")
    plt.legend()
    h += 0.1

输出图像:
在这里插入图片描述
在这里插入图片描述
在这里插入图片描述
参考:
高斯过程
高斯过程浅谈

  • 3
    点赞
  • 46
    收藏
    觉得还不错? 一键收藏
  • 0
    评论
高斯核函数是机器学习算法中的一个核函数,它是一种用于非线性分类的转换函数。它的特点是将数据点从原始空间映射到一个高维特征空间,使得原本线性不可分的数据在高维空间中变得线性可分。在高斯核函数中,超参数σ表示高斯核的宽度,即控制数据点在高维空间中的分布情况。 线性核函数是一种特殊的核函数,它直接在原始空间中进行计算,不经过特征空间的转换。它的计算公式与逻辑回归的线性模型相似,适用于线性可分的数据。线性核函数的形式简单且计算效率高,适用于数据特征较少的情况。 逻辑回归是一种常用的二分类算法,它基于线性模型,并使用逻辑函数(也称为sigmoid函数)将线性输出映射到概率值。逻辑回归通过最大似然估计或梯度下降等方法来拟合模型参数,从而实现对数据的分类。逻辑回归常用于处理线性可分或线性不可分的数据,但对于复杂非线性问题可能表现不佳。 因此,高斯核函数通过将数据映射到高维空间来处理线性不可分的数据,而线性核函数直接在原始空间中进行计算,适用于线性可分的数据。逻辑回归是一种基于线性模型的二分类算法,可以处理线性可分或线性不可分的数据。它们之间的区别在于核函数的使用和数据的表示方式。<span class="em">1</span><span class="em">2</span><span class="em">3</span><span class="em">4</span> #### 引用[.reference_title] - *1* *2* *3* *4* [机器学习笔记(二十八):高斯核函数](https://blog.csdn.net/bjchenxu/article/details/107478708)[target="_blank" data-report-click={"spm":"1018.2226.3001.9630","extra":{"utm_source":"vip_chatgpt_common_search_pc_result","utm_medium":"distribute.pc_search_result.none-task-cask-2~all~insert_cask~default-1-null.142^v93^chatsearchT3_2"}}] [.reference_item style="max-width: 100%"] [ .reference_list ]

“相关推荐”对你有帮助么?

  • 非常没帮助
  • 没帮助
  • 一般
  • 有帮助
  • 非常有帮助
提交
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值