Bayesian Neural Network for regression (PRML)
生活随笔
收集整理的這篇文章主要介紹了
Bayesian Neural Network for regression (PRML)
小編覺得挺不錯的,現在分享給大家,幫大家做個參考.
Bayesian Neural Network : PRML? 5.7章節(jié)
參考代碼:https://nbviewer.jupyter.org/github/ctgk/PRML/blob/master/notebooks/ch05_Neural_Networks.ipynb
1.git clone:https://github.com/ctgk/PRML.git?到目錄 PRML/下
2.代碼:
import numpy as np import pandas as pd from math import sqrt from sklearn.preprocessing import MinMaxScaler from sklearn.metrics import mean_absolute_error, r2_score, explained_variance_score,mean_squared_error import sys if "PRML/" not in sys.path:sys.path.append("PRML/") from prml import nn np.random.seed(1234)class Gaussian(nn.Network):def __init__(self, shape):super().__init__()with self.set_parameter():self.m = nn.zeros(shape)self.s = nn.zeros(shape)def __call__(self):self.q = nn.Gaussian(self.m, nn.softplus(self.s) + 1e-8)return self.q.draw()class BayesianNetwork(nn.Network):def __init__(self, n_input, n_output):super().__init__()with self.set_parameter():self.qw1 = Gaussian((n_input, 16))self.qb1 = Gaussian(16)self.qw2 = Gaussian((16, 4))self.qb2 = Gaussian(4)self.qw3 = Gaussian((4, n_output))self.qb3 = Gaussian(n_output)self.posterior = [self.qw1, self.qb1, self.qw2, self.qb2, self.qw3, self.qb3]self.prior = nn.Gaussian(0, 1)def __call__(self, x):h = x @ self.qw1() + self.qb1()h = h @ self.qw2() + self.qb2()return nn.Gaussian(h @ self.qw3() + self.qb3(), 1)def kl(self):kl = 0for pos in self.posterior:kl += nn.loss.kl_divergence(pos.q, self.prior).mean()return kltrainset = pd.read_csv("/data/trainset.csv",sep=',',index_col=['patientunitstayid']) #min-max scale the continous features ss = MinMaxScaler() scale_features = ['ph', 'creatinine', 'albumin','diagnosis'] trainset[scale_features] = ss.fit_transform(trainset[scale_features]) print ('The shape of trainset is : %d,%d'%(trainset.shape[0],trainset.shape[1])) X = trainset.drop(columns=["actualiculos"], inplace=False) #feature X = np.array(X) Y = trainset['actualiculos'].to_frame()#label model = BayesianNetwork(n_input=52, n_output=1) optimizer = nn.optimizer.Adam(model.parameter, 0.1) for i in range(20000):model.clear()py = model(X)elbo = py.log_pdf(Y).mean(0).sum() - model.kl() / len(X)optimizer.maximize(elbo)#if i % 100 == 0:#optimizer.learning_rate *= 0.9if i % 100 == 0:sys.stdout.write('\r{} / {}'.format(i, 20000))sys.stdout.flush()#testset teststet = pd.read_csv("/data/testset.csv",sep=',',index_col=['patientunitstayid']) teststet[scale_features] = ss.fit_transform(teststet[scale_features]) print ('The shape of testset is : %d,%d'%(teststet.shape[0],teststet.shape[1])) X_test = teststet.drop(columns=["actualiculos"], inplace=False) #feature X_test = np.array(X_test) y_test = teststet['actualiculos'].to_frame()#label #prediction 3 mae = 5.0 rmse = 5.0 r2 = 0.0 ev = 0.0 for i in range(5000):#sample 5000, get best performancey_pred = model(X_test).mean.valuet_mae = mean_absolute_error(y_test, y_pred)if t_mae<mae: mae = t_maet_rmse = sqrt(mean_squared_error(y_test, y_pred))if t_rmse<rmse: rmse = t_rmset_r2 = r2_score(y_test, y_pred)if t_r2>r2: r2 = t_r2t_ev = explained_variance_score(y_test, y_pred)if t_ev>ev: ev = t_ev print("MAE Score of BNN on eICU-CRD dataset is :",mae) print("RMSE Score of BNN on eICU-CRD dataset is :", rmse) print("R^2 Score of BNN on eICU-CRD dataset is :", r2) print("EV Score of BNN on eICU-CRD dataset is :", ev)?請參考結構,根據自己數據集設置。
?
總結
以上是生活随笔為你收集整理的Bayesian Neural Network for regression (PRML)的全部內容,希望文章能夠幫你解決所遇到的問題。
- 上一篇: PRML-github code使用两个
- 下一篇: IT技术能治病救人-数据是21世纪最伟大