PythonMultinomialNaiveBayes多项贝叶斯模型实现原理介绍_第1页
PythonMultinomialNaiveBayes多项贝叶斯模型实现原理介绍_第2页
PythonMultinomialNaiveBayes多项贝叶斯模型实现原理介绍_第3页
PythonMultinomialNaiveBayes多项贝叶斯模型实现原理介绍_第4页
全文预览已结束

下载本文档

版权说明:本文档由用户提供并上传,收益归属内容提供方,若内容存在侵权,请进行举报或认领

文档简介

第PythonMultinomialNaiveBayes多项贝叶斯模型实现原理介绍之前在一次跟某Fish客户进行交谈时,我在的需求下学习了多项贝叶斯(MultinomialNaiveBayes)这个模型。

在了解多项贝叶斯模型之前,我们首先来了解一下朴素贝叶斯(NaiveBayes)模型。

贝叶斯定理所描述的,即为一个抽象事件A在抽象事件B发生的前提下,有多大概率会发生抽象事件A,其概率记为:

其中`P(B)`记为抽象事件B本身发生的概率,因此贝叶斯定理正好计算的是`抽象事件AB同时发生`概率与抽象事件B单独发生的概率之比,这也能证明其抽象事件发生的先后顺序。

文字太过生涩难懂?我这里有一张图可以供大家参考:

可以通过上述流程我们看到:事件A为确定发生的事件,在A事件发生后,其有可能诱导了事件B的发生,也可能诱导失败了。

抛开诱导失败的情况,我们只谈及诱导成功的情况。虽然我们这里说事件A成功诱导了事件B,但是作为一个独立的实体,事件B本身发生的概率也是一个不确定值,因此这里需要贝叶斯模型进行自动推理,去计算前置的因素是否有可能诱导了后一事件的发生。

我们来看例子,这里我有一个数据框,我们来展示一下的现有列

ModelData.columns

Index(['全局水平','大气温度[℃]','风冷温度[℃]','露点温度[℃]','相对湿度[%]','平均十米内风速[m/s]',

'站点压力[mBar]','降水量[mm]','定点角度[°]','方位角度[°]','气团大小','气团变化'],

dtype='object')

在这份模型数据。我们需要对气团变化进行研究,其中我使用cuDF内置的.to_pandas()函数将GPU数据框转换为Pandas数据框,并使用.apply()+lambda隐函数对气团大小的变化进行类分类,

这里因为使用了DecisionTree决策树来训练第二个模型,因此数据被命名为了df_train_Tree,最终模型仍然为多项贝叶斯模型。

#使用.apply()函数来实现来为气团变化进行标签化处理

df_train_Tree['气团变化']=df_train_Tree['气团大小'].to_pandas().apply(lambdax:0ifx==0else1ifx0else2ifx0elseNone)

对数据进行处理,并使用cuML继承自sklearn的train_test_split()函数对数据进行分割

#进行绝对值翻转处理,以防止存在负值无法训练模型

ModelData=df_train_Tree.iloc[:,2:].to_pandas().apply(lambdax:x.abs())

ModelData=cf.DataFrame(ModelData)

#构建训练集和测试集

X_train,X_test,y_train,y_test=train_test_split(ModelData,ModelData['气团变化'],test_size=0.2,random_state=42)

通过sklearn.metrics下的plot_roc_curve()函数绘制的ROC曲线和roc_auc_score()函数我们发现,此时的决策树模型处于了过拟合的情况,在树中我没有指定明确的二值化数据(即树判断需要的最基本的真和假),因此使得树在判断时全部当成了真的条件,所以树已经严重过拟合了。

通过之前的一些列的线性校验,我们也得知了:前置的一切属性均为`可能`诱导气团大小的`诱因`

因此在完全不确定的情况下,我们将使用全部属性进行模型的初步测试。

因此我们最终需要使用多项贝叶斯模型来进行模型构建,以下是多项贝叶斯在GPU环境上的实现

#因为属性众多,因此我们需要引入多项分布朴素贝叶斯(MultinomialNB)

fromsklearn.naive_bayesimportMultinomialNB

clf=MultinomialNB()

#将训练集进行训练

clf.fit(X_train.to_pandas(),y_train.to_numpy())

MultinomialNB()

#绘制ROC曲线以验证预测结果

plot_roc_curve(clf,X_test.to_pandas(),y_test.to_numpy())

plt.title('ROCCurve')

plt.plot([0,1],[0,1],'--',color='orange')

plt.text(0.5,0.5,'ROC=%.2f'%roc_auc_score(y_test.to_pandas(),cp.asnumpy(y_pred)),ha='center',va='center',fontsize=14)

可以看到,在多项贝叶斯模型下,我们的成绩表现已经非常不错了,roc_auc_score分数表现为:0.92,这也得以证明我们之前训练过的模

温馨提示

  • 1. 本站所有资源如无特殊说明,都需要本地电脑安装OFFICE2007和PDF阅读器。图纸软件为CAD,CAXA,PROE,UG,SolidWorks等.压缩文件请下载最新的WinRAR软件解压。
  • 2. 本站的文档不包含任何第三方提供的附件图纸等,如果需要附件,请联系上传者。文件的所有权益归上传用户所有。
  • 3. 本站RAR压缩包中若带图纸,网页内容里面会有图纸预览,若没有图纸预览就没有图纸。
  • 4. 未经权益所有人同意不得将文件中的内容挪作商业或盈利用途。
  • 5. 人人文库网仅提供信息存储空间,仅对用户上传内容的表现方式做保护处理,对用户上传分享的文档内容本身不做任何修改或编辑,并不能对任何下载内容负责。
  • 6. 下载文件中如有侵权或不适当内容,请与我们联系,我们立即纠正。
  • 7. 本站不保证下载资源的准确性、安全性和完整性, 同时也不承担用户因使用这些下载资源对自己和他人造成任何形式的伤害或损失。

评论

0/150

提交评论