偷偷摘套内射激情视频,久久精品99国产国产精,中文字幕无线乱码人妻,中文在线中文a,性爽19p

深度學(xué)習(xí)神經(jīng)網(wǎng)絡(luò)的預(yù)測間隔

人工智能 深度學(xué)習(xí)
通常,用于回歸問題的預(yù)測模型(即預(yù)測數(shù)值)進行點預(yù)測。這意味著他們可以預(yù)測單個值,但不能提供任何有關(guān)該預(yù)測的不確定性的指示。根據(jù)定義,預(yù)測是估計值或近似值,并且包含一些不確定性。

[[390133]]

預(yù)測間隔為回歸問題的預(yù)測提供了不確定性度量。

例如,95%的預(yù)測間隔表示100次中的95次,真實值將落在該范圍的下限值和上限值之間。這不同于可能表示不確定性區(qū)間中心的簡單點預(yù)測。沒有用于計算深度學(xué)習(xí)神經(jīng)網(wǎng)絡(luò)關(guān)于回歸預(yù)測建模問題的預(yù)測間隔的標(biāo)準(zhǔn)技術(shù)。但是,可以使用一組模型來估計快速且骯臟的預(yù)測間隔,這些模型又提供了點預(yù)測的分布,可以從中計算間隔。

在本教程中,您將發(fā)現(xiàn)如何計算深度學(xué)習(xí)神經(jīng)網(wǎng)絡(luò)的預(yù)測間隔。完成本教程后,您將知道:

  • 預(yù)測間隔為回歸預(yù)測建模問題提供了不確定性度量。
  • 如何在標(biāo)準(zhǔn)回歸問題上開發(fā)和評估簡單的多層感知器神經(jīng)網(wǎng)絡(luò)。
  • 如何使用神經(jīng)網(wǎng)絡(luò)模型集成來計算和報告預(yù)測間隔。

教程概述

本教程分為三個部分:他們是:

  • 預(yù)測間隔
  • 回歸神經(jīng)網(wǎng)絡(luò)
  • 神經(jīng)網(wǎng)絡(luò)預(yù)測間隔

預(yù)測間隔

通常,用于回歸問題的預(yù)測模型(即預(yù)測數(shù)值)進行點預(yù)測。這意味著他們可以預(yù)測單個值,但不能提供任何有關(guān)該預(yù)測的不確定性的指示。根據(jù)定義,預(yù)測是估計值或近似值,并且包含一些不確定性。不確定性來自模型本身的誤差和輸入數(shù)據(jù)中的噪聲。該模型是輸入變量和輸出變量之間關(guān)系的近似值。預(yù)測間隔是對預(yù)測不確定性的量化。它為結(jié)果變量的估計提供了概率上限和下限。

預(yù)測間隔是在預(yù)測數(shù)量的回歸模型中進行預(yù)測或預(yù)測時最常使用的時間間隔。預(yù)測間隔圍繞模型所做的預(yù)測,并希望覆蓋真實結(jié)果的范圍。有關(guān)一般的預(yù)測間隔的更多信息,請參見教程:

《機器學(xué)習(xí)的預(yù)測間隔》:

https://machinelearningmastery.com/prediction-intervals-for-machine-learning/

既然我們熟悉了預(yù)測間隔,那么我們可以考慮如何計算神經(jīng)網(wǎng)絡(luò)的間隔。首先定義一個回歸問題和一個神經(jīng)網(wǎng)絡(luò)模型來解決這個問題。

回歸神經(jīng)網(wǎng)絡(luò)

在本節(jié)中,我們將定義回歸預(yù)測建模問題和神經(jīng)網(wǎng)絡(luò)模型來解決該問題。首先,讓我們介紹一個標(biāo)準(zhǔn)回歸數(shù)據(jù)集。我們將使用住房數(shù)據(jù)集。住房數(shù)據(jù)集是一個標(biāo)準(zhǔn)的機器學(xué)習(xí)數(shù)據(jù)集,包括506行數(shù)據(jù),其中包含13個數(shù)字輸入變量和一個數(shù)字目標(biāo)變量。

使用具有三個重復(fù)的重復(fù)分層10倍交叉驗證的測試工具,一個樸素的模型可以實現(xiàn)約6.6的平均絕對誤差(MAE)。在大約1.9的相同測試工具上,性能最高的模型可以實現(xiàn)MAE。這為該數(shù)據(jù)集提供了預(yù)期性能的界限。該數(shù)據(jù)集包括根據(jù)美國波士頓市房屋郊區(qū)的詳細信息來預(yù)測房價。

房屋數(shù)據(jù)集(housing.csv):

https://raw.githubusercontent.com/jbrownlee/Datasets/master/housing.csv

房屋描述(房屋名稱):

https://raw.githubusercontent.com/jbrownlee/Datasets/master/housing.names

無需下載數(shù)據(jù)集;作為我們工作示例的一部分,我們將自動下載它。

下面的示例將數(shù)據(jù)集下載并加載為Pandas DataFrame,并概述了數(shù)據(jù)集的形狀和數(shù)據(jù)的前五行。

  1. load and summarize the housing dataset 
  2. from pandas import read_csv 
  3. from matplotlib import pyplot 
  4. load dataset 
  5. url = 'https://raw.githubusercontent.com/jbrownlee/Datasets/master/housing.csv' 
  6. dataframe = read_csv(url, header=None) 
  7. # summarize shape 
  8. print(dataframe.shape) 
  9. # summarize first few lines 
  10. print(dataframe.head()) 

運行示例將確認506行數(shù)據(jù)和13個輸入變量以及一個數(shù)字目標(biāo)變量(總共14個)。我們還可以看到所有輸入變量都是數(shù)字。

  1. (506, 14) 
  2.         0     1     2   3      4      5   ...  8      9     10      11    12    13 
  3. 0  0.00632  18.0  2.31   0  0.538  6.575  ...   1  296.0  15.3  396.90  4.98  24.0 
  4. 1  0.02731   0.0  7.07   0  0.469  6.421  ...   2  242.0  17.8  396.90  9.14  21.6 
  5. 2  0.02729   0.0  7.07   0  0.469  7.185  ...   2  242.0  17.8  392.83  4.03  34.7 
  6. 3  0.03237   0.0  2.18   0  0.458  6.998  ...   3  222.0  18.7  394.63  2.94  33.4 
  7. 4  0.06905   0.0  2.18   0  0.458  7.147  ...   3  222.0  18.7  396.90  5.33  36.2 
  8.   
  9. [5 rows x 14 columns] 

接下來,我們可以準(zhǔn)備用于建模的數(shù)據(jù)集。首先,可以將數(shù)據(jù)集拆分為輸入和輸出列,然后可以將行拆分為訓(xùn)練和測試數(shù)據(jù)集。在這種情況下,我們將使用約67%的行來訓(xùn)練模型,而其余33%的行用于估計模型的性能。

  1. # split into input and output values 
  2. X, y = values[:,:-1], values[:,-1] 
  3. # split into train and test sets 
  4. X_train, X_test, y_train, y_test = train_test_split(X, y, train_size=0.67) 

您可以在本教程中了解有關(guān)訓(xùn)練測試拆分的更多信息:訓(xùn)練測試拆分以評估機器學(xué)習(xí)算法然后,我們將所有輸入列(變量)縮放到0-1范圍,稱為數(shù)據(jù)歸一化,這在使用神經(jīng)網(wǎng)絡(luò)模型時是一個好習(xí)慣。

  1. # scale input data 
  2. scaler = MinMaxScaler() 
  3. scaler.fit(X_train) 
  4. X_train = scaler.transform(X_train) 
  5. X_test = scaler.transform(X_test) 

您可以在本教程中了解有關(guān)使用MinMaxScaler標(biāo)準(zhǔn)化輸入數(shù)據(jù)的更多信息:《如何在Python中使用StandardScaler和MinMaxScaler轉(zhuǎn)換 》:

https://machinelearningmastery.com/standardscaler-and-minmaxscaler-transforms-in-python/

下面列出了準(zhǔn)備用于建模的數(shù)據(jù)的完整示例。

  1. load and prepare the dataset for modeling 
  2. from pandas import read_csv 
  3. from sklearn.model_selection import train_test_split 
  4. from sklearn.preprocessing import MinMaxScaler 
  5. load dataset 
  6. url = 'https://raw.githubusercontent.com/jbrownlee/Datasets/master/housing.csv' 
  7. dataframe = read_csv(url, header=None) 
  8. values = dataframe.values 
  9. # split into input and output values 
  10. X, y = values[:,:-1], values[:,-1] 
  11. # split into train and test sets 
  12. X_train, X_test, y_train, y_test = train_test_split(X, y, train_size=0.67) 
  13. # scale input data 
  14. scaler = MinMaxScaler() 
  15. scaler.fit(X_train) 
  16. X_train = scaler.transform(X_train) 
  17. X_test = scaler.transform(X_test) 
  18. # summarize 
  19. print(X_train.shape, X_test.shape, y_train.shape, y_test.shape) 

運行示例像以前一樣加載數(shù)據(jù)集,然后將列拆分為輸入和輸出元素,將行拆分為訓(xùn)練集和測試集,最后將所有輸入變量縮放到[0,1]范圍。列印了訓(xùn)練圖和測試集的形狀,顯示我們有339行用于訓(xùn)練模型,有167行用于評估模型。

  1. (339, 13) (167, 13) (339,) (167,) 

接下來,我們可以在數(shù)據(jù)集中定義,訓(xùn)練和評估多層感知器(MLP)模型。我們將定義一個簡單的模型,該模型具有兩個隱藏層和一個預(yù)測數(shù)值的輸出層。我們將使用ReLU激活功能和“ he”權(quán)重初始化,這是一個好習(xí)慣。經(jīng)過一些反復(fù)試驗后,選擇了每個隱藏層中的節(jié)點數(shù)。

  1. # define neural network model 
  2. features = X_train.shape[1] 
  3. model = Sequential() 
  4. model.add(Dense(20, kernel_initializer='he_normal', activation='relu', input_dim=features)) 
  5. model.add(Dense(5, kernel_initializer='he_normal', activation='relu')) 
  6. model.add(Dense(1)) 

我們將使用具有接近默認學(xué)習(xí)速率和動量值的高效亞當(dāng)版隨機梯度下降法,并使用均方誤差(MSE)損失函數(shù)(回歸預(yù)測建模問題的標(biāo)準(zhǔn))擬合模型。

  1. # compile the model and specify loss and optimizer 
  2. opt = Adam(learning_rate=0.01, beta_1=0.85, beta_2=0.999) 
  3. model.compile(optimizer=opt, loss='mse'

您可以在本教程中了解有關(guān)Adam優(yōu)化算法的更多信息:

《從頭開始編寫代碼Adam梯度下降優(yōu)化》

https://machinelearningmastery.com/adam-optimization-from-scratch/

然后,該模型將適合300個紀(jì)元,批處理大小為16個樣本。經(jīng)過一番嘗試和錯誤后,才選擇此配置。

  1. # fit the model on the training dataset 
  2. model.fit(X_train, y_train, verbose=2, epochs=300, batch_size=16) 

您可以在本教程中了解有關(guān)批次和紀(jì)元的更多信息:

《神經(jīng)網(wǎng)絡(luò)中批次與時期之間的差異》

https://machinelearningmastery.com/difference-between-a-batch-and-an-epoch/

最后,該模型可用于在測試數(shù)據(jù)集上進行預(yù)測,我們可以通過將預(yù)測值與測試集中的預(yù)期值進行比較來評估預(yù)測,并計算平均絕對誤差(MAE),這是模型性能的一種有用度量。

  1. # make predictions on the test set 
  2. yhat = model.predict(X_test, verbose=0) 
  3. # calculate the average error in the predictions 
  4. mae = mean_absolute_error(y_test, yhat) 
  5. print('MAE: %.3f' % mae) 

完整實例如下:

  1. # train and evaluate a multilayer perceptron neural network on the housing regression dataset 
  2. from pandas import read_csv 
  3. from sklearn.model_selection import train_test_split 
  4. from sklearn.metrics import mean_absolute_error 
  5. from sklearn.preprocessing import MinMaxScaler 
  6. from tensorflow.keras.models import Sequential 
  7. from tensorflow.keras.layers import Dense 
  8. from tensorflow.keras.optimizers import Adam 
  9. load dataset 
  10. url = 'https://raw.githubusercontent.com/jbrownlee/Datasets/master/housing.csv' 
  11. dataframe = read_csv(url, header=None) 
  12. values = dataframe.values 
  13. # split into input and output values 
  14. X, y = values[:, :-1], values[:,-1] 
  15. # split into train and test sets 
  16. X_train, X_test, y_train, y_test = train_test_split(X, y, train_size=0.67, random_state=1) 
  17. # scale input data 
  18. scaler = MinMaxScaler() 
  19. scaler.fit(X_train) 
  20. X_train = scaler.transform(X_train) 
  21. X_test = scaler.transform(X_test) 
  22. # define neural network model 
  23. features = X_train.shape[1] 
  24. model = Sequential() 
  25. model.add(Dense(20, kernel_initializer='he_normal', activation='relu', input_dim=features)) 
  26. model.add(Dense(5, kernel_initializer='he_normal', activation='relu')) 
  27. model.add(Dense(1)) 
  28. # compile the model and specify loss and optimizer 
  29. opt = Adam(learning_rate=0.01, beta_1=0.85, beta_2=0.999) 
  30. model.compile(optimizer=opt, loss='mse'
  31. # fit the model on the training dataset 
  32. model.fit(X_train, y_train, verbose=2, epochs=300, batch_size=16) 
  33. # make predictions on the test set 
  34. yhat = model.predict(X_test, verbose=0) 
  35. # calculate the average error in the predictions 
  36. mae = mean_absolute_error(y_test, yhat) 
  37. print('MAE: %.3f' % mae) 

運行示例將加載并準(zhǔn)備數(shù)據(jù)集,在訓(xùn)練數(shù)據(jù)集上定義MLP模型并將其擬合,并在測試集上評估其性能。

注意:由于算法或評估程序的隨機性,或者數(shù)值精度的差異,您的結(jié)果可能會有所不同??紤]運行該示例幾次并比較平均結(jié)果。

在這種情況下,我們可以看到該模型實現(xiàn)的平均絕對誤差約為2.3,這比樸素的模型要好,并且接近于最佳模型。

毫無疑問,通過進一步調(diào)整模型,我們可以達到接近最佳的性能,但這對于我們研究預(yù)測間隔已經(jīng)足夠了。

  1. Epoch 296/300 
  2. 22/22 - 0s - loss: 7.1741 
  3. Epoch 297/300 
  4. 22/22 - 0s - loss: 6.8044 
  5. Epoch 298/300 
  6. 22/22 - 0s - loss: 6.8623 
  7. Epoch 299/300 
  8. 22/22 - 0s - loss: 7.7010 
  9. Epoch 300/300 
  10. 22/22 - 0s - loss: 6.5374 
  11. MAE: 2.300 

接下來,讓我們看看如何使用住房數(shù)據(jù)集上的MLP模型計算預(yù)測間隔。

神經(jīng)網(wǎng)絡(luò)預(yù)測間隔

在本節(jié)中,我們將使用上一節(jié)中開發(fā)的回歸問題和模型來開發(fā)預(yù)測間隔。

與像線性回歸這樣的線性方法(預(yù)測間隔計算很簡單)相比,像神經(jīng)網(wǎng)絡(luò)這樣的非線性回歸算法的預(yù)測間隔計算具有挑戰(zhàn)性。沒有標(biāo)準(zhǔn)技術(shù)。有許多方法可以為神經(jīng)網(wǎng)絡(luò)模型計算有效的預(yù)測間隔。我建議“更多閱讀”部分列出的一些論文以了解更多信息。

在本教程中,我們將使用一種非常簡單的方法,該方法具有很大的擴展空間。我將其稱為“快速且骯臟的”,因為它快速且易于計算,但有一定的局限性。它涉及擬合多個最終模型(例如10到30)。來自集合成員的點預(yù)測的分布然后用于計算點預(yù)測和預(yù)測間隔。

例如,可以將點預(yù)測作為來自集合成員的點預(yù)測的平均值,并且可以將95%的預(yù)測間隔作為與該平均值的1.96標(biāo)準(zhǔn)偏差。這是一個簡單的高斯預(yù)測間隔,盡管可以使用替代方法,例如點預(yù)測的最小值和最大值。或者,可以使用自舉方法在不同的自舉樣本上訓(xùn)練每個合奏成員,并且可以將點預(yù)測的第2.5個百分點和第97.5個百分點用作預(yù)測間隔。

有關(guān)bootstrap方法的更多信息,請參見教程:

《Bootstrap方法的簡要介紹》

https://machinelearningmastery.com/a-gentle-introduction-to-the-bootstrap-method/

這些擴展保留為練習(xí);我們將堅持簡單的高斯預(yù)測區(qū)間。

假設(shè)在上一部分中定義的訓(xùn)練數(shù)據(jù)集是整個數(shù)據(jù)集,并且我們正在對該整個數(shù)據(jù)集訓(xùn)練一個或多個最終模型。然后,我們可以在測試集上使用預(yù)測間隔進行預(yù)測,并評估該間隔在將來的有效性。

我們可以通過將上一節(jié)中開發(fā)的元素劃分為功能來簡化代碼。首先,讓我們定義一個函數(shù),以加載和準(zhǔn)備由URL定義的回歸數(shù)據(jù)集。

  1. load and prepare the dataset 
  2. def load_dataset(url): 
  3.  dataframe = read_csv(url, header=None) 
  4.  values = dataframe.values 
  5.  # split into input and output values 
  6.  X, y = values[:, :-1], values[:,-1] 
  7.  # split into train and test sets 
  8.  X_train, X_test, y_train, y_test = train_test_split(X, y, train_size=0.67, random_state=1) 
  9.  # scale input data 
  10.  scaler = MinMaxScaler() 
  11.  scaler.fit(X_train) 
  12.  X_train = scaler.transform(X_train) 
  13.  X_test = scaler.transform(X_test) 
  14.  return X_train, X_test, y_train, y_test 

接下來,我們可以定義一個函數(shù),該函數(shù)將在給定訓(xùn)練數(shù)據(jù)集的情況下定義和訓(xùn)練MLP模型,然后返回適合進行預(yù)測的擬合模型。

  1. # define and fit the model 
  2. def fit_model(X_train, y_train): 
  3.  # define neural network model 
  4.  features = X_train.shape[1] 
  5.  model = Sequential() 
  6.  model.add(Dense(20, kernel_initializer='he_normal', activation='relu', input_dim=features)) 
  7.  model.add(Dense(5, kernel_initializer='he_normal', activation='relu')) 
  8.  model.add(Dense(1)) 
  9.  # compile the model and specify loss and optimizer 
  10.  opt = Adam(learning_rate=0.01, beta_1=0.85, beta_2=0.999) 
  11.  model.compile(optimizer=opt, loss='mse'
  12.  # fit the model on the training dataset 
  13.  model.fit(X_train, y_train, verbose=0, epochs=300, batch_size=16) 
  14.  return model 

我們需要多個模型來進行點預(yù)測,這些模型將定義點預(yù)測的分布,從中可以估計間隔。

因此,我們需要在訓(xùn)練數(shù)據(jù)集上擬合多個模型。每個模型必須不同,以便做出不同的預(yù)測。在訓(xùn)練MLP模型具有隨機性,隨機初始權(quán)重以及使用隨機梯度下降優(yōu)化算法的情況下,可以實現(xiàn)這一點。模型越多,點預(yù)測將更好地估計模型的功能。我建議至少使用10種型號,而超過30種型號可能不會帶來太多好處。下面的函數(shù)適合模型的整體,并將其存儲在返回的列表中。出于興趣,還對測試集評估了每個擬合模型,并在擬合每個模型后報告了該測試集。我們希望每個模型在保持測試集上的估計性能會略有不同,并且報告的分數(shù)將有助于我們確認這一期望。

  1. # fit an ensemble of models 
  2. def fit_ensemble(n_members, X_train, X_test, y_train, y_test): 
  3.  ensemble = list() 
  4.  for i in range(n_members): 
  5.   # define and fit the model on the training set 
  6.   model = fit_model(X_train, y_train) 
  7.   # evaluate model on the test set 
  8.   yhat = model.predict(X_test, verbose=0) 
  9.   mae = mean_absolute_error(y_test, yhat) 
  10.   print('>%d, MAE: %.3f' % (i+1, mae)) 
  11.   # store the model 
  12.   ensemble.append(model) 
  13.  return ensemble 

最后,我們可以使用訓(xùn)練有素的模型集合進行點預(yù)測,可以將其總結(jié)為一個預(yù)測區(qū)間。

下面的功能實現(xiàn)了這一點。首先,每個模型對輸入數(shù)據(jù)進行點預(yù)測,然后計算95%的預(yù)測間隔,并返回該間隔的下限值,平均值和上限值。

該函數(shù)被設(shè)計為將單行作為輸入,但是可以很容易地適應(yīng)于多行。

  1. # make predictions with the ensemble and calculate a prediction interval 
  2. def predict_with_pi(ensemble, X): 
  3.  # make predictions 
  4.  yhat = [model.predict(X, verbose=0) for model in ensemble] 
  5.  yhat = asarray(yhat) 
  6.  # calculate 95% gaussian prediction interval 
  7.  interval = 1.96 * yhat.std() 
  8.  lowerupper = yhat.mean() - interval, yhat.mean() + interval 
  9.  return lower, yhat.mean(), upper 

最后,我們可以調(diào)用這些函數(shù)。首先,加載并準(zhǔn)備數(shù)據(jù)集,然后定義并擬合集合。

  1. load dataset 
  2. url = 'https://raw.githubusercontent.com/jbrownlee/Datasets/master/housing.csv' 
  3. X_train, X_test, y_train, y_test = load_dataset(url) 
  4. # fit ensemble 
  5. n_members = 30 
  6. ensemble = fit_ensemble(n_members, X_train, X_test, y_train, y_test) 

然后,我們可以使用測試集中的一行數(shù)據(jù),并以預(yù)測間隔進行預(yù)測,然后報告結(jié)果。

我們還報告了預(yù)期的期望值,該期望值將在預(yù)測間隔內(nèi)涵蓋(可能接近95%的時間;這并不完全準(zhǔn)確,而是粗略的近似值)。

  1. # make predictions with prediction interval 
  2. newX = asarray([X_test[0, :]]) 
  3. lower, mean, upper = predict_with_pi(ensemble, newX) 
  4. print('Point prediction: %.3f' % mean) 
  5. print('95%% prediction interval: [%.3f, %.3f]' % (lowerupper)) 
  6. print('True value: %.3f' % y_test[0]) 

綜上所述,下面列出了使用多層感知器神經(jīng)網(wǎng)絡(luò)以預(yù)測間隔進行預(yù)測的完整示例。

  1. # prediction interval for mlps on the housing regression dataset 
  2. from numpy import asarray 
  3. from pandas import read_csv 
  4. from sklearn.model_selection import train_test_split 
  5. from sklearn.metrics import mean_absolute_error 
  6. from sklearn.preprocessing import MinMaxScaler 
  7. from tensorflow.keras.models import Sequential 
  8. from tensorflow.keras.layers import Dense 
  9. from tensorflow.keras.optimizers import Adam 
  10.   
  11. load and prepare the dataset 
  12. def load_dataset(url): 
  13.  dataframe = read_csv(url, header=None) 
  14.  values = dataframe.values 
  15.  # split into input and output values 
  16.  X, y = values[:, :-1], values[:,-1] 
  17.  # split into train and test sets 
  18.  X_train, X_test, y_train, y_test = train_test_split(X, y, train_size=0.67, random_state=1) 
  19.  # scale input data 
  20.  scaler = MinMaxScaler() 
  21.  scaler.fit(X_train) 
  22.  X_train = scaler.transform(X_train) 
  23.  X_test = scaler.transform(X_test) 
  24.  return X_train, X_test, y_train, y_test 
  25.   
  26. # define and fit the model 
  27. def fit_model(X_train, y_train): 
  28.  # define neural network model 
  29.  features = X_train.shape[1] 
  30.  model = Sequential() 
  31.  model.add(Dense(20, kernel_initializer='he_normal', activation='relu', input_dim=features)) 
  32.  model.add(Dense(5, kernel_initializer='he_normal', activation='relu')) 
  33.  model.add(Dense(1)) 
  34.  # compile the model and specify loss and optimizer 
  35.  opt = Adam(learning_rate=0.01, beta_1=0.85, beta_2=0.999) 
  36.  model.compile(optimizer=opt, loss='mse'
  37.  # fit the model on the training dataset 
  38.  model.fit(X_train, y_train, verbose=0, epochs=300, batch_size=16) 
  39.  return model 
  40.   
  41. # fit an ensemble of models 
  42. def fit_ensemble(n_members, X_train, X_test, y_train, y_test): 
  43.  ensemble = list() 
  44.  for i in range(n_members): 
  45.   # define and fit the model on the training set 
  46.   model = fit_model(X_train, y_train) 
  47.   # evaluate model on the test set 
  48.   yhat = model.predict(X_test, verbose=0) 
  49.   mae = mean_absolute_error(y_test, yhat) 
  50.   print('>%d, MAE: %.3f' % (i+1, mae)) 
  51.   # store the model 
  52.   ensemble.append(model) 
  53.  return ensemble 
  54.   
  55. # make predictions with the ensemble and calculate a prediction interval 
  56. def predict_with_pi(ensemble, X): 
  57.  # make predictions 
  58.  yhat = [model.predict(X, verbose=0) for model in ensemble] 
  59.  yhat = asarray(yhat) 
  60.  # calculate 95% gaussian prediction interval 
  61.  interval = 1.96 * yhat.std() 
  62.  lowerupper = yhat.mean() - interval, yhat.mean() + interval 
  63.  return lower, yhat.mean(), upper 
  64.   
  65. load dataset 
  66. url = 'https://raw.githubusercontent.com/jbrownlee/Datasets/master/housing.csv' 
  67. X_train, X_test, y_train, y_test = load_dataset(url) 
  68. # fit ensemble 
  69. n_members = 30 
  70. ensemble = fit_ensemble(n_members, X_train, X_test, y_train, y_test) 
  71. # make predictions with prediction interval 
  72. newX = asarray([X_test[0, :]]) 
  73. lower, mean, upper = predict_with_pi(ensemble, newX) 
  74. print('Point prediction: %.3f' % mean) 
  75. print('95%% prediction interval: [%.3f, %.3f]' % (lowerupper)) 
  76. print('True value: %.3f' % y_test[0]) 

運行示例依次適合每個集合成員,并在保留測試集上報告其估計性能;最后,做出并預(yù)測一個具有預(yù)測間隔的預(yù)測。

注意:由于算法或評估程序的隨機性,或者數(shù)值精度的差異,您的結(jié)果可能會有所不同。考慮運行該示例幾次并比較平均結(jié)果。

在這種情況下,我們可以看到每個模型的性能略有不同,這證實了我們對模型確實有所不同的期望。

最后,我們可以看到該合奏以95%的預(yù)測間隔[26.287,34.822]進行了約30.5的點預(yù)測。我們還可以看到,真實值為28.2,并且間隔確實捕獲了該值,這非常好。

  1. >1, MAE: 2.259 
  2. >2, MAE: 2.144 
  3. >3, MAE: 2.732 
  4. >4, MAE: 2.628 
  5. >5, MAE: 2.483 
  6. >6, MAE: 2.551 
  7. >7, MAE: 2.505 
  8. >8, MAE: 2.299 
  9. >9, MAE: 2.706 
  10. >10, MAE: 2.145 
  11. >11, MAE: 2.765 
  12. >12, MAE: 3.244 
  13. >13, MAE: 2.385 
  14. >14, MAE: 2.592 
  15. >15, MAE: 2.418 
  16. >16, MAE: 2.493 
  17. >17, MAE: 2.367 
  18. >18, MAE: 2.569 
  19. >19, MAE: 2.664 
  20. >20, MAE: 2.233 
  21. >21, MAE: 2.228 
  22. >22, MAE: 2.646 
  23. >23, MAE: 2.641 
  24. >24, MAE: 2.492 
  25. >25, MAE: 2.558 
  26. >26, MAE: 2.416 
  27. >27, MAE: 2.328 
  28. >28, MAE: 2.383 
  29. >29, MAE: 2.215 
  30. >30, MAE: 2.408 
  31. Point prediction: 30.555 
  32. 95% prediction interval: [26.287, 34.822] 
  33. True value: 28.200 

True value: 28.200

 

責(zé)任編輯:武曉燕 來源: Python中文社區(qū)
相關(guān)推薦

2023-04-19 10:17:35

機器學(xué)習(xí)深度學(xué)習(xí)

2016-12-27 14:24:57

課程筆記神經(jīng)網(wǎng)絡(luò)

2020-08-06 10:11:13

神經(jīng)網(wǎng)絡(luò)機器學(xué)習(xí)算法

2023-02-28 08:00:00

深度學(xué)習(xí)神經(jīng)網(wǎng)絡(luò)人工智能

2017-03-07 13:55:30

自動駕駛神經(jīng)網(wǎng)絡(luò)深度學(xué)習(xí)

2021-07-07 10:57:08

神經(jīng)網(wǎng)絡(luò)AI算法

2017-05-23 18:54:18

深度學(xué)習(xí)人工智能

2022-10-17 15:43:14

深度學(xué)習(xí)回歸模型函數(shù)

2023-09-03 14:17:56

深度學(xué)習(xí)人工智能

2018-04-08 11:20:43

深度學(xué)習(xí)

2017-12-22 08:47:41

神經(jīng)網(wǎng)絡(luò)AND運算

2021-11-12 15:41:42

LSTM神經(jīng)網(wǎng)絡(luò)人工智能

2018-03-22 13:34:59

TensorFlow神經(jīng)網(wǎng)絡(luò)

2020-09-18 17:52:10

神經(jīng)網(wǎng)絡(luò)數(shù)據(jù)圖形

2019-11-06 17:00:51

深度學(xué)習(xí)神經(jīng)網(wǎng)絡(luò)人工智能

2017-03-22 11:59:40

深度神經(jīng)網(wǎng)絡(luò)

2025-02-25 10:50:11

2021-10-15 08:00:00

人工智能深度學(xué)習(xí)技術(shù)

2018-09-13 22:22:48

深度學(xué)習(xí)神經(jīng)網(wǎng)絡(luò)人工智能

2023-11-15 16:12:41

人工智能機器學(xué)習(xí)深度學(xué)習(xí)
點贊
收藏

51CTO技術(shù)棧公眾號