使用python+sklearn實現高斯過程回歸

2021-03-02 機器學習算法與知識圖譜

本示例以兩種不同的方式來實現簡單的一維回歸:

在這兩種情況下,核函數的參數都是用極大似然原理估計的。

下圖以逐點95%置信區間的形式說明了高斯過程模型的插值性質(interpolating property)及其概率性質。

注意,參數alpha 用作訓練點之間假定協方差的Tikhonov正則化。

print(__doc__)

# 作者: Vincent Dubourg <vincent.dubourg@gmail.com>
#         Jake Vanderplas <vanderplas@astro.washington.edu>
#         Jan Hendrik Metzen <jhm@informatik.uni-bremen.de>s
# 許可證: BSD 3 clause

import numpy as np
from matplotlib import pyplot as plt

from sklearn.gaussian_process import GaussianProcessRegressor
from sklearn.gaussian_process.kernels import RBF, ConstantKernel as C

np.random.seed(1)


def f(x):
    """預測函數"""
    return x * np.sin(x)


#  首先是無噪聲的情況
X = np.atleast_2d([1., 3., 5., 6., 7., 8.]).T

# 觀測結果
y = f(X).ravel()

# 對輸入空間進行網格劃分,以評估實函數,預測和MSE
x = np.atleast_2d(np.linspace(0, 10, 1000)).T

# 實例化高斯過程模型
kernel = C(1.0, (1e-3, 1e3)) * RBF(10, (1e-2, 1e2))
gp = GaussianProcessRegressor(kernel=kernel, n_restarts_optimizer=9)

# 使用參數的最大似然估計來擬合數據
gp.fit(X, y)

# 在網格x軸上進行預測(也要求MSE)
y_pred, sigma = gp.predict(x, return_std=True)

# 根據MSE繪製函數,預測和95%置信區間
plt.figure()
plt.plot(x, f(x), 'r:', label=r'$f(x) = x\,\sin(x)$')
plt.plot(X, y, 'r.', markersize=10, label='Observations')
plt.plot(x, y_pred, 'b-', label='Prediction')
plt.fill(np.concatenate([x, x[::-1]]),
         np.concatenate([y_pred - 1.9600 * sigma,
                        (y_pred + 1.9600 * sigma)[::-1]]),
         alpha=.5, fc='b', ec='None', label='95% confidence interval')
plt.xlabel('$x$')
plt.ylabel('$f(x)$')
plt.ylim(-10, 20)
plt.legend(loc='upper left')


# 現在是有噪聲的情況
X = np.linspace(0.1, 9.9, 20)
X = np.atleast_2d(X).T

# 觀測結果和噪音
y = f(X).ravel()
dy = 0.5 + 1.0 * np.random.random(y.shape)
noise = np.random.normal(0, dy)
y += noise

# 實例化高斯過程模型
gp = GaussianProcessRegressor(kernel=kernel, alpha=dy ** 2,
                              n_restarts_optimizer=10)

# 使用參數的最大似然估計來擬合數據
gp.fit(X, y)

# 在網格x軸上進行預測(也要求MSE)
y_pred, sigma = gp.predict(x, return_std=True)

# 根據MSE繪製函數,預測和95%置信區間
plt.figure()
plt.plot(x, f(x), 'r:', label=r'$f(x) = x\,\sin(x)$')
plt.errorbar(X.ravel(), y, dy, fmt='r.', markersize=10, label='Observations')
plt.plot(x, y_pred, 'b-', label='Prediction')
plt.fill(np.concatenate([x, x[::-1]]),
         np.concatenate([y_pred - 1.9600 * sigma,
                        (y_pred + 1.9600 * sigma)[::-1]]),
         alpha=.5, fc='b', ec='None', label='95% confidence interval')
plt.xlabel('$x$')
plt.ylabel('$f(x)$')
plt.ylim(-10, 20)
plt.legend(loc='upper left')

plt.show()

腳本的總運行時間: ( 0 分 0.606 秒)

估計的內存使用量: 8 MB

下載python原始碼: plot_gpr_noisy_targets.py下載Jupyter notebook原始碼: plot_gpr_noisy_targets.ipynb☆☆☆為方便大家查閱,小編已將scikit-learn學習路線專欄文章統一整理到公眾號底部菜單欄,同步更新中,關注公眾號,點擊左下方「系列文章」,如圖:歡迎大家和我一起沿著scikit-learn文檔這條路線,一起鞏固機器學習算法基礎。(添加微信:mthler,備註:sklearn學習,一起進【sklearn機器學習進步群】開啟打怪升級的學習之旅。)

相關焦點

  • 使用python+sklearn實現貝葉斯嶺回歸
    參見貝葉斯嶺回歸了解回歸器的更多信息。與OLS(普通最小二乘)估計相比,係數權重稍微向零偏移,從而能使其穩定。由於權值的先驗是高斯先驗(Gaussian prior),因此,估計權值的直方圖是高斯(Gaussian)。模型的估計是通過迭代最大化觀測值的邊際對數似然(marginal log-likelihood)來完成的。
  • 使用python+sklearn實現自動關聯決策回歸
    用貝葉斯嶺回歸擬合回歸模型。
  • python實現高斯樸素貝葉斯分類器
    python實現高斯樸素貝葉斯分類器    在這篇文章中,我們將使用我最喜歡的機器學習庫scikit-learn在Python中實現樸素貝葉斯分類器。接下來,我們將使用經過訓練的樸素貝葉斯(監督分類法)模型來預測人口收入。
  • 使用python+sklearn實現線性回歸示例
    ‍本示例僅使用diabetes數據集的第一個特徵,以說明此回歸技術的二維的圖
  • 無監督學習-高斯過程
    高斯過程高斯過程 (GP) 是一種常用的監督學習方法,旨在解決*回歸問題*和*概率分類問題*。高斯過程模型的優點如下:預測內插了觀察結果(至少對於正則核)。在一些區域的預測值。高斯過程模型的缺點包括:1.7.1.
  • 高斯過程回歸 - 高斯隨機過程其實很簡單
    前一陣子看了下高斯過程回歸,覺得是很不錯的思路。
  • 如何推導高斯過程回歸以及深層高斯過程詳解
    使用不同核函數的高斯過程高斯過程
  • 使用python+sklearn實現核嶺回歸與SVR的比較
    # 作者: Jan Hendrik Metzen <jhm@informatik.uni-bremen.de># 許可證: BSD 3 clauseimport timeimport numpy as npfrom sklearn.svm import SVRfrom sklearn.model_selection
  • 實例應用(一): 數字識別使用OpenCV, sklearn和Python
    原文連結:http://hanzratech.in/2015/02/24/handwritten-digit-recognition-using-opencv-sklearn-and-python.html在我們開始之前,我將簡要列舉檢測手寫數字所需的步驟 -創建一個手寫數字的資料庫。
  • 使用python+sklearn實現stacking方法來組合預測
    在本示例中,我們將不同的回歸器堆疊在一起,並使用最終的線性懲罰回歸器(inear penalized regressor)來預測輸出。我們將每個回歸器的性能與堆疊策略進行比較,結果顯示Stacking會稍微改善整體性能。
  • 使用python+sklearn實現處理缺失值
    缺失值可以使用提供的常量值進行插補,也可以使用缺失值所在的每一列的統計數據(平均值、中值或最頻繁值)。這個類還允許使用不同的缺失值編碼方法。missForest 目前是很受歡迎的,並且是不同序列插補算法的一個特殊實例,這些算法都可以使用IterativeImputer 來實現,通過傳遞不同的回歸器來預測缺失特徵值。在 missForest 的例子中,這個回歸器是一個隨機森林。請參見使用迭代插補器的變體插補缺失值。
  • 15 分鐘帶你入門 sklearn 與機器學習(分類算法篇)
    邏輯回歸 (Logistic regression)邏輯回歸,儘管他的名字包含"回歸",卻是一個分類而不是回歸的線性模型。邏輯回歸在文獻中也稱為logit回歸,最大熵分類或者對數線性分類器。案例:這裡我使用sklearn內置的數據集——iris數據集,這是一個三分類的問題,下面我就使用邏輯回歸來對其分類:from sklearn.datasets import load_irisfrom sklea
  • 使用python+sklearn實現可視化
    在以下示例中,我們為已擬合的支持向量機繪製ROC曲線:from sklearn.model_selection import train_test_splitfrom sklearn.svm import SVCfrom sklearn.metrics import plot_roc_curvefrom sklearn.datasets
  • Python機器學習sklearn模塊-邏輯回歸
    邏輯回歸是屬於線性回歸模型的具體形式的另一種形式,但是是用來做分類任務的;分類任務的目標是找一個函數,把觀測值匹配到相關的類和標籤上
  • 高斯濾波器的原理及其實現過程
    生成的過程,首先根據模板的大小,找到模板的中心位置ksize/2。然後就是遍歷,根據高斯分布的函數,計算模板中每個係數的值。需要注意的是,最後歸一化的過程,使用模板左上角的係數的倒數作為歸一化的係數(左上角的係數值被歸一化為1),模板中的每個係數都乘以該值(左上角係數的倒數),然後將得到的值取整,就得到了整數型的高斯濾波器模板。
  • 使用python+sklearn實現隨機森林和多輸出元估計器的對比
    隨機森林和multioutput.MultiOutputRegressor多輸出回歸元估計器
  • 使用Python進行數據降維|線性降維
    作者:劉早起早起來源:早起Python使用Python進行數據降維為什麼要進行數據降維?請注意本文將不對各種數據降維方法的原理與理論推導過程做過多的講解,旨在用儘可能少的語言說清楚以及如何用Python實現,先實現再理解,並在讀完代碼之後自行查閱相關文獻理解其不同的思想。但讀者應具有一定的統計學、代數學、機器學習的基礎。
  • Python+sklearn使用三種交叉驗證方法評估模型泛化能力
    :使用Python預處理機器學習需要的手寫體數字圖像文件數據集==============在使用機器學習算法時往往會使用sklearn.model_selection模塊中的函數train_test_split()把拿到的數據集劃分為訓練集和測試集,使用模型的fit()方法在訓練集上進行訓練,然後再使用模型的score()方法在測試集上進行評分。
  • Sklearn 中的樸素貝葉斯分類器
    (給Python開發者加星標,提升Python技能)作者:Martin Müller,翻譯:github-sisibelovedhttps://github.com/xitu/gold-miner/blob/master/TODO1/naive-bayes-classifier-sklearn-python-example-tips.md
  • 使用python+sklearn實現管道、Anova和SVM
    0.          0.          0.          0.          0.          0.  -0.04736524  0.          0.          0.          0.          0.