欢迎访问 生活随笔!

生活随笔

当前位置: 首页 > 编程资源 > 编程问答 >内容正文

编程问答

Bayesian Neural Network for regression (PRML)

发布时间:2025/4/16 编程问答 41 豆豆
生活随笔 收集整理的这篇文章主要介绍了 Bayesian Neural Network for regression (PRML) 小编觉得挺不错的,现在分享给大家,帮大家做个参考.

Bayesian Neural Network : PRML  5.7章节

参考代码: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)的全部内容,希望文章能够帮你解决所遇到的问题。

如果觉得生活随笔网站内容还不错,欢迎将生活随笔推荐给好友。