演算法金 | 一個強大的演算法模型,GPR !!

算法金「全网同名」發表於2024-07-06


大俠幸會,在下全網同名「演算法金」 0 基礎轉 AI 上岸,多個演算法賽 Top 「日更萬日,讓更多人享受智慧樂趣」

抱個拳,送個禮

高斯過程迴歸(GPR)是一種非引數化的貝葉斯方法,用於解決迴歸問題。與傳統的線性迴歸模型不同,GPR 能夠透過指定的核函式捕捉複雜的非線性關係,並提供不確定性的估計。在本文中,我們將詳細介紹 GPR 演算法的定義、核心思想和數學基礎,並透過例項展示其在實際應用中的效果。

GPR 演算法簡介

GPR 的定義

高斯過程迴歸(Gaussian Process Regression, GPR)是一種基於高斯過程的統計模型,用於處理迴歸問題。高斯過程是一種分佈,每個樣本點都遵循一個高斯分佈,這使得 GPR 在處理資料的非線性關係時表現出色。GPR 的核心是利用高斯過程的性質,透過指定合適的核函式,對資料進行建模和預測。

核心思想和原理

GPR 的核心思想是透過高斯過程來描述輸入資料的潛在函式,即假設資料來自一個多變數正態分佈。核函式是 GPR 的關鍵,它決定了模型的平滑度、週期性等特性。常用的核函式包括徑向基函式(RBF)、線性核函式等。

在 GPR 模型中,透過高斯過程的協方差矩陣來描述樣本點之間的關係,進而對未知資料點進行預測。

GPR 演算法的數學基礎

高斯過程迴歸的數學模型

高斯過程迴歸(GPR)的數學模型可以透過以下步驟來描述:

  1. 定義高斯過程:高斯過程是一個由多變數正態分佈定義的隨機過程。

  1. 核函式的定義:核函式(也稱為協方差函式)用於衡量輸入點之間的相關性。常用的核函式包括徑向基函式(RBF)、線性核函式等。例如,RBF 核函式的形式為:

核函式及其作用

核函式是 GPR 的核心,它決定了模型的平滑度、週期性等特性。選擇合適的核函式可以顯著提高模型的效能。常見的核函式包括:

  • 徑向基函式(RBF)核:適用於平滑且連續的函式建模。
  • 線性核:適用於線性關係建模。
  • 週期核:適用於週期性資料建模。

核函式的形式和引數需要根據具體問題進行選擇和調整。

超引數選擇與最佳化

GPR 模型的超引數包括核函式的引數和噪聲項。超引數選擇通常透過最大化對數似然函式來實現。對數似然函式的形式為:

防失聯,進免費知識星球,直達演算法金 AI 實驗室 https://t.zsxq.com/ckSu3

GPR 演算法的實現與應用

import numpy as np
from sklearn.gaussian_process import GaussianProcessRegressor
from sklearn.gaussian_process.kernels import RBF, ConstantKernel as C
import matplotlib.pyplot as plt

# 武林大會隨機種子
np.random.seed(1)

# 生成模擬資料
X = np.random.uniform(0, 5, (1000, 3))  # 特徵資料,代表武林中高手的內功心法引數
y = np.sin(X[:,0]) + np.cos(X[:,1]) + 0.1 * np.random.randn(1000)  # 目標資料,代表不同門派的武學修為

# 定義核函式,彷彿內功的核心修煉方法
kernel = C(1.0, (1e-3, 1e3)) * RBF(1.0, (1e-2, 1e2))

# 建立高斯過程迴歸模型,就如同一個武學大師
gpr = GaussianProcessRegressor(kernel=kernel, n_restarts_optimizer=9)

# 訓練模型,猶如將不同門派的武功秘籍盡收囊中
gpr.fit(X, y)

# 生成測試資料集,確保總數是3的倍數,如同江湖中三大門派的比武招親
X_test = np.linspace(0, 5, 99).reshape(-1, 3)
y_pred, sigma = gpr.predict(X_test, return_std=True)

# 繪圖,如同在武林大會上展示各派武學的威力
plt.figure()
plt.plot(X[:,0], y, 'r.', markersize=10, label='江湖中的高手')
plt.plot(X_test[:,0], y_pred, 'b-', label='武學預測')
plt.fill(np.concatenate([X_test[:,0], X_test[:,0][::-1]]),
         np.concatenate([y_pred - 1.9600 * sigma, (y_pred + 1.9600 * sigma)[::-1]]),
         alpha=.5, fc='b', ec='None', label='95% 置信區間')
plt.xlabel('內功心法引數')
plt.ylabel('武學修為')
plt.legend(loc='upper left')

# 展現武林大會上的巔峰對決
plt.show()

我們來一步一步解讀這段程式碼

import numpy as np
from sklearn.gaussian_process import GaussianProcessRegressor
from sklearn.gaussian_process.kernels import RBF, ConstantKernel as C
import matplotlib.pyplot as plt

首先,我們匯入必要的庫:

  • numpy 用於數值計算。
  • sklearn 中的 GaussianProcessRegressor 和核函式,用於構建和訓練高斯過程迴歸模型。
  • matplotlib 用於資料視覺化。
# 武林大會隨機種子
np.random.seed(1)

這裡設定了隨機種子,以確保結果的可重複性。把它比作武林大會上,確保每次比武規則一致。

# 生成模擬資料
X = np.random.uniform(0, 5, (1000, 3))  # 特徵資料,代表武林中高手的內功心法引數
y = np.sin(X[:,0]) + np.cos(X[:,1]) + 0.1 * np.random.randn(1000)  # 目標資料,代表不同門派的武學修為

生成特徵資料 X,包含 1000 個樣本,每個樣本有 3 個特徵,取值範圍在 0 到 5 之間。這些特徵可以想象成武林中高手的內功心法引數。生成目標資料 y,它是由第一個特徵的正弦值和第二個特徵的餘弦值加上少量噪聲組成的,代表不同門派的武學修為。

# 定義核函式,彷彿內功的核心修煉方法
kernel = C(1.0, (1e-3, 1e3)) * RBF(1.0, (1e-2, 1e2))

定義高斯過程迴歸模型的核函式,這裡使用的是常數核函式 C 和徑向基函式核 RBF 的乘積。核函式在這裡類似於武林中不同門派的核心修煉方法,它決定了模型如何去擬合資料。

# 建立高斯過程迴歸模型,就如同一個武學大師
gpr = GaussianProcessRegressor(kernel=kernel, n_restarts_optimizer=9)

建立一個高斯過程迴歸模型,這個模型就像是一個武學大師,能夠吸收和理解不同門派的武學秘籍。

# 訓練模型,猶如將不同門派的武功秘籍盡收囊中
gpr.fit(X, y)

訓練模型,猶如這個武學大師將所有門派的武功秘籍盡收囊中,形成自己的獨門絕技。

# 生成測試資料集,確保總數是3的倍數,如同江湖中三大門派的比武招親
X_test = np.linspace(0, 5, 99).reshape(-1, 3)
y_pred, sigma = gpr.predict(X_test, return_std=True)

生成測試資料集,並進行預測。這裡生成了 99 個測試樣本,並確保每個樣本有 3 個特徵。預測結果 y_pred 和預測標準差 sigma 就像是預測每個門派弟子的武學修為及其不確定性。

# 繪圖,如同在武林大會上展示各派武學的威力
plt.figure()
plt.plot(X[:,0], y, 'r.', markersize=10, label='江湖中的高手')
plt.plot(X_test[:,0], y_pred, 'b-', label='武學預測')
plt.fill(np.concatenate([X_test[:,0], X_test[:,0][::-1]]),
         np.concatenate([y_pred - 1.9600 * sigma, (y_pred + 1.9600 * sigma)[::-1]]),
         alpha=.5, fc='b', ec='None', label='95% 置信區間')
plt.xlabel('內功心法引數')
plt.ylabel('武學修為')
plt.legend(loc='upper left')

# 展現武林大會上的巔峰對決
plt.show()

最後,我們將結果繪製出來,彷彿在武林大會上展示各派武學的威力:

  • 紅色點表示訓練資料,即江湖中的高手們。
  • 藍色線表示預測值,即預測的武學修為。
  • 藍色陰影區域表示 95% 置信區間,展示預測的不確定性。

[ 抱個拳,總個結 ]

每天一個小案例,如果類似這樣的文章對你有啟發。

大俠,關注、點贊、轉發走起~

- 科研為國分憂,創新與民造福 -

日更時間緊任務急,難免有疏漏之處,還請大俠海涵內容僅供學習交流之用,部分素材來自網路,侵聯刪

[ 演算法金,碎碎念 ]

搬 磚 不 易 ~

日 更 到 哭 55

全網同名,日更萬日,讓更多人享受智慧樂趣

如果覺得內容有價值,煩請大俠多多 分享、在看、點贊,助力演算法金又猛又持久、很黃很 BL 的日更下去;同時邀請大俠 關注、星標 演算法金,圍觀日更萬日,助你功力大增、笑傲江湖

相關文章