使用python+sklearn實現噪聲級別估計的高斯過程回歸

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

本示例說明了具有sum-kernel(包含WhiteKernel)的GPR可以估計數據的噪聲級別。對數邊際似然(LML)情況的圖示說明了存在LML的兩個局部最大值,第一個局部最大值對應於具有高噪聲水平和較大長度範圍(length scale)的模型,該模型解釋了噪聲中數據的所有變化,第二個局部最大值具有較小的噪聲級別和較短的長度範圍(length scale),這就解釋了無噪聲函數關係的大部分變化。第二種模型具有更高的可能性,但是,根據超參數的初始值,基於梯度的優化也可能會收斂到高噪聲解, 因此,對於不同的初始化,多次重複優化至關重要。

print(__doc__)

# 作者: Jan Hendrik Metzen <jhm@informatik.uni-bremen.de>
#
# 許可證: BSD 3 clause

import numpy as np

from matplotlib import pyplot as plt
from matplotlib.colors import LogNorm

from sklearn.gaussian_process import GaussianProcessRegressor
from sklearn.gaussian_process.kernels import RBF, WhiteKernel


rng = np.random.RandomState(0)
X = rng.uniform(0, 5, 20)[:, np.newaxis]
y = 0.5 * np.sin(3 * X[:, 0]) + rng.normal(0, 0.5, X.shape[0])

# 第一次運行
plt.figure()
kernel = 1.0 * RBF(length_scale=100.0, length_scale_bounds=(1e-2, 1e3)) \
    + WhiteKernel(noise_level=1, noise_level_bounds=(1e-10, 1e+1))
gp = GaussianProcessRegressor(kernel=kernel,
                              alpha=0.0).fit(X, y)
X_ = np.linspace(0, 5, 100)
y_mean, y_cov = gp.predict(X_[:, np.newaxis], return_cov=True)
plt.plot(X_, y_mean, 'k', lw=3, zorder=9)
plt.fill_between(X_, y_mean - np.sqrt(np.diag(y_cov)),
                 y_mean + np.sqrt(np.diag(y_cov)),
                 alpha=0.5, color='k')
plt.plot(X_, 0.5*np.sin(3*X_), 'r', lw=3, zorder=9)
plt.scatter(X[:, 0], y, c='r', s=50, zorder=10, edgecolors=(0, 0, 0))
plt.title("Initial: %s\nOptimum: %s\nLog-Marginal-Likelihood: %s"
          % (kernel, gp.kernel_,
             gp.log_marginal_likelihood(gp.kernel_.theta)))
plt.tight_layout()

# 第二次運行
plt.figure()
kernel = 1.0 * RBF(length_scale=1.0, length_scale_bounds=(1e-2, 1e3)) \
    + WhiteKernel(noise_level=1e-5, noise_level_bounds=(1e-10, 1e+1))
gp = GaussianProcessRegressor(kernel=kernel,
                              alpha=0.0).fit(X, y)
X_ = np.linspace(0, 5, 100)
y_mean, y_cov = gp.predict(X_[:, np.newaxis], return_cov=True)
plt.plot(X_, y_mean, 'k', lw=3, zorder=9)
plt.fill_between(X_, y_mean - np.sqrt(np.diag(y_cov)),
                 y_mean + np.sqrt(np.diag(y_cov)),
                 alpha=0.5, color='k')
plt.plot(X_, 0.5*np.sin(3*X_), 'r', lw=3, zorder=9)
plt.scatter(X[:, 0], y, c='r', s=50, zorder=10, edgecolors=(0, 0, 0))
plt.title("Initial: %s\nOptimum: %s\nLog-Marginal-Likelihood: %s"
          % (kernel, gp.kernel_,
             gp.log_marginal_likelihood(gp.kernel_.theta)))
plt.tight_layout()

# 繪製 LML 示圖
plt.figure()
theta0 = np.logspace(-2, 3, 49)
theta1 = np.logspace(-2, 0, 50)
Theta0, Theta1 = np.meshgrid(theta0, theta1)
LML = [[gp.log_marginal_likelihood(np.log([0.36, Theta0[i, j], Theta1[i, j]]))
        for i in range(Theta0.shape[0])] for j in range(Theta0.shape[1])]
LML = np.array(LML).T

vmin, vmax = (-LML).min(), (-LML).max()
vmax = 50
level = np.around(np.logspace(np.log10(vmin), np.log10(vmax), 50), decimals=1)
plt.contour(Theta0, Theta1, -LML,
            levels=level, norm=LogNorm(vmin=vmin, vmax=vmax))
plt.colorbar()
plt.xscale("log")
plt.yscale("log")
plt.xlabel("Length-scale")
plt.ylabel("Noise-level")
plt.title("Log-marginal-likelihood")
plt.tight_layout()

plt.show()

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

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

相關焦點

  • 高斯過程回歸(GPR)
    >優化「黑盒子」函數的效果5.高斯過程回歸也應用在機器學習模型超參數調節中,效率比網格搜索、隨機搜索都要高高斯過程回歸有兩個視角,一個是我們先從高斯過程開始介紹,理解這兩個視角下的高斯過程回歸,你會發現它其實是貝葉斯線性回歸的非線性形式,且為後面深入理解貝葉斯調參打下基礎。
  • 使用python+sklearn實現高斯過程分類(GPC)的概率預測
    圖中顯示,這是因為它們在類邊界處顯示類概率的急劇變化(這是好的),但預測的概率遠離類邊界的概率接近0.5(這是壞的),這一不良影響是由GPC內部使用的拉普拉斯近似引起的。第二個圖顯示了不同內核超參數選擇下的log-marginal-likelihood,並用黑點突出顯示了第一個圖中使用的兩個超參數的選擇。
  • 從數學到實現,全面回顧高斯過程中的函數最優化
    高斯過程可以被認為是一種機器學習算法,它利用點與點之間同質性的度量作為核函數,以從輸入的訓練數據預測未知點的值。本文從理論推導和實現詳細地介紹了高斯過程,並在後面提供了用它來近似求未知函數最優解的方法。
  • 高斯過程
    高斯過程的理論知識高斯過程的Python實現使用Numpy手動實現使用`Scikit-learn`實現高斯過程小結高斯過程GaussianProcess高斯過程的理論知識非參數方法的基本思想 這是實現高斯過程並將其應用於回歸問題所需的最低知識
  • 使用python+sklearn實現使用貝葉斯嶺回歸擬合正弦曲線
    本示例使用貝葉斯嶺回歸擬合正弦曲線。
  • 使用python+sklearn實現度量和評分
    1. scoring 參數:定義模型評估準則模型選擇和評估使用工具,例如 model_selection.GridSearchCV和 model_selection.cross_val_score,接受一個scoring參數,該參數控制著估計器的評估過程中使用什麼樣的度量指標。1.1.
  • 萬字總結複雜而奇妙的高斯過程!
    高斯過程的理論知識高斯過程的Python實現使用Numpy手動實現使用`Scikit-learn`實現高斯過程小結高斯過程GaussianProcess高斯過程的理論知識非參數方法的基本思想 這是實現高斯過程並將其應用於回歸問題所需的最低知識
  • 高斯混合模型(GMM):理念、數學、EM算法和python實現
    這就要用到高斯混合模型了!GMM假設生成數據的是一種混合的高斯分布。與將數據點硬分配到聚類的K-means方法(假設圍繞質心的數據呈圓形分布)相比,它使用了將數據點軟分配到聚類的方法(即概率性,因此更好)。
  • 使用python+sklearn實現保序回歸
    注意:單擊此處https://urlify.cn/nE7Zny下載完整的示例代碼,或通過Binder在瀏覽器中運行此示例本文給出了在合成數據上使用保序回歸
  • 使用python+sklearn實現概率校準曲線
    import matplotlib.pyplot as pltfrom sklearn import datasetsfrom sklearn.naive_bayes import GaussianNBfrom sklearn.svm import LinearSVCfrom sklearn.linear_model import LogisticRegressionfrom sklearn.metrics
  • 使用python+sklearn實現在20newgroups上進行多類稀疏邏輯回歸
    多項式邏輯回歸產生更準確的結果,並且在大規模數據集上的訓練速度更快。在這裡,我們使用 l1 稀疏(l1 sparsity)將無信息特徵的權重調整為零。如果目標是提取每個班級的強判別詞彙,那麼這是一個很好的方法。如果目標是獲得最佳的預測準確性,則最好改用非稀疏誘導l2懲罰(non sparsity-inducing l2 penalty)。
  • 深度科普:說說高斯過程回歸
    網上講高斯過程回歸的文章很少,且往往從高斯過程講起,我比較不以為然:高斯過程回歸(GPR), 終究是個離散的事情,用連續的高斯過程( GP) 來闡述,簡直是殺雞用牛刀。所以我們這次直接從離散的問題搞起,然後把高斯過程逆推出來。這篇博客的主要目的是解釋高斯過程回歸這個主意是怎麼想出來的,模型多了去了,為毛要用它。
  • 使用python+sklearn實現估計器的調參方法
    GridSearchCV 實例實現估計器API:當將其「擬合」到一個數據集上時,所有可能的參數值組合都將被計算並保留最佳組合。關於數字數據集上的網格搜索計算示例,請參見使用交叉驗證網格搜索的參數估計。':['balanced', None]}比較用於超參數估計的隨機搜索和網格搜索 比較隨機搜索和網格搜索的使用和效率。
  • 使用python+sklearn實現單變量特徵選擇
    import load_irisfrom sklearn.model_selection import train_test_splitfrom sklearn.preprocessing import MinMaxScalerfrom sklearn.svm import LinearSVCfrom sklearn.pipeline import make_pipeline
  • Python sklearn模型選擇
    : Covariance Estimators 協方差估計5.sklearn.model_selection: Model Selection 模型選擇6.sklearn.datasets: Datasets 數據集7.sklearn.decomposition: Matrix Decomposition 矩陣分解8.sklearn.dummy: Dummy estimators
  • 使用python+sklearn實現Lasso 模型選擇:交叉驗證/ AIC / BIC
    使用Akaike信息標準(AIC),貝葉斯信息標準(BIC)和交叉驗證來選擇Lasso
  • sklearn 與分類算法
    案例:這裡我使用 sklearn 內置的數據集——iris 數據集,這是一個三分類的問題,下面我就使用邏輯回歸來對其分類:from sklearn.datasets import load_irisfrom sklearn.linear_model import LogisticRegressionX
  • 使用sklearn輕鬆實現數據縮放
    數據準備的過程主要包括3個步驟:本文會告訴你兩種方法,即如何使用Python的Scikit-Learn庫進行簡單的數據轉換。比如在K近鄰模型的距離測量和回歸係數的準備。接下來用都知道的鳶尾花數據集演示數據歸一化:# 對鳶尾花數據集進行數據歸一化處理.
  • 使用sklearn實現多元線性回歸
    使用sklearn實現多元線性回歸多元線性回歸import pandas
  • 邏輯回歸的sklearn實現
    上篇講到邏輯回歸的算法實例,這篇主要講邏輯回歸的sklearn實現。