文:沙皇
代码:https://github.com/AzirZhang/Bayesian-Fraud-Detectiongithub.com
什么是贝叶斯神经网络?
贝叶斯神经网络,简单来说就是把权重和bias全部表示成概率分布而不是确定的值来代表的神经网络。
首先,贝叶斯公式:
在概率模型中,对于权重 w引入先验,求出给定数据集 D 的情况下 w 的后验分布
。根据贝叶斯公式:
当然,这个东西本身难解,因此我们需要找到方法去近似这个东西。具体的数学推导就不在这里详细阐述了,相关的信息知乎上已经有了很多优质的回答和文章。
实现贝叶斯神经网络层的基于pytorch的库——Blitzhttps://github.com/piEsposito/blitz-bayesian-deep-learning#Bayesian-Deep-Learning-in-a-Nutshellgithub.com
Blitz这个库植入了一些贝叶斯神经网络的基础层,包括贝叶斯全连接层,贝叶斯卷积层等。具体每个参数的可学习的概率分布的公式在其github页面中有附带。
这个包安装需要pytorch 1.4,经测试,pytorch 1.4似乎有bug,很难直接安装,因此我在这个网站上找到了pytorch的各个版本的镜像文件,可以选择符合自己电脑的下载:https://download.pytorch.org/whl/cu92/torch_stable.htmldownload.pytorch.org
安装完成之后,参照blitz的github页面说明,即可完成blitz包的安装
注:直接pip install blitz会失败
代码实现 - 数据预处理
首先import我们需要的包,其中DataPreprocessing是我简单写的一个包。
from DataPreprocessing import DataInit, LGBM_FeatureSelection as FS
import sys
import numpy as np
import pandas as pd
import matplotlib.pyplot as plt
from sklearn.model_selection import train_test_split
from sklearn.preprocessing import OrdinalEncoder, StandardScaler
from sklearn.ensemble import RandomForestRegressor
from sklearn.metrics import roc_auc_score
from blitz.modules import BayesianLinear
from blitz.utils import variational_estimator
import torch
import torch.utils as utils
import torch.nn as nn
import torch.nn.functional as F
import torch.optim as optim
本次采用的是一个信用卡欺诈检测的数据集,是我课程导师提供的,故不外传。但是kaggle上也有开源数据集,大家可以根据数据集本身的不同