初试多项贝叶斯模型(Multinomial Naive Bayes)

之前在一次跟“某Fish”客户进行交谈时,我在的需求下学习了多项贝叶斯(Multinomial Naive Bayes)这个模型。

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

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

P(A|B) = \frac{P(A\cap B)}{P(B)}

其中`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(lambda x:0 if x == 0 else 1 if x < 0 else 2 if x > 0 else None)

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

# 进行绝对值翻转处理,以防止存在负值无法训练模型
ModelData = df_train_Tree.iloc[:,2:].to_pandas().apply(lambda x: 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环境上的实现

# 因为属性众多,因此我们需要引入多项分布朴素贝叶斯(Multinomial NB)
from sklearn.naive_bayes import MultinomialNB
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('ROC Curve')
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,这也得以证明我们之前训练过的模型它是一个显著过拟合的模型。

总结:

在皮尔森系数过低,但又存在微弱线性相关的分类问题,我们可以尝试使用推测的手段:即贝叶斯类模型,在我们能够肯定前置因素可能会诱导后一事件的这一前提下,我们就可以进行贝叶斯魔性的尝试了

  • 0
    点赞
  • 0
    收藏
    觉得还不错? 一键收藏
  • 打赏
    打赏
  • 0
    评论
下属于分类C的概率,P(D|C)是分类C中文本D出现的概率,P(C)是分类C出现的概率,P(D)是文本D出现的概率。贝叶斯算法的基本思想是计算所有可能分类的条件概率,然后选择具有最高概率的分类作为最终分类结果。 贝叶斯算法在文本分类中的实现通常包括以下步骤: 文本预处理:对文本进行分词、去除停用词等处理,得到单词列表。 特征提取:将单词列表转化为特征向量,常用的方法包括词袋模型和TF-IDF模型。 训练模型:计算每个分类中每个特征的条件概率,并计算每个分类的先验概率。 分类预测:根据条件概率和先验概率计算文本属于每个分类的概率,选择具有最高概率的分类作为最终分类结果。 基于贝叶斯算法的文本分类模型可以使用多项式朴素贝叶斯Multinomial Naive Bayes)算法、伯努利朴素贝叶斯(Bernoulli Naive Bayes)算法等不同的实现方式。 舆情文本分类模型设计 本文设计的基于贝叶斯算法的舆情文本分类模型包括以下步骤: 数据收集:收集与特定主题相关的舆情文本数据,包括新闻、微博、评论等。 数据预处理:对收集的文本数据进行分词、去除停用词等预处理操作,得到单词列表。 特征提取:将单词列表转化为特征向量,使用TF-IDF模型计算每个单词在文本中的重要性,并将其作为特征向量的值。 训练模型:使用多项式朴素贝叶斯算法对特征向量进行训练,计算每个分类中每个特征的条件概率和每个分类的先验概率。 分类预测:对新的舆情文本进行分类预测,根据条件概率和先验概率计算文本属于每个分类的概率,并选择具有最高概率的分类作为最终分类结果。 实验设计和结果分析 本文采用Python编程语言实现了基于贝叶斯算法的舆情文本分类模型,并使用实际的舆情文本数据对模型进行了实验验证。实验中,我们选择了与疫情相关的新闻和微博数据,将其分为积极、中
02-16

“相关推荐”对你有帮助么?

  • 非常没帮助
  • 没帮助
  • 一般
  • 有帮助
  • 非常有帮助
提交
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包

打赏作者

Day(AKA Elin)

你的鼓励将是我创作的最大动力

¥1 ¥2 ¥4 ¥6 ¥10 ¥20
扫码支付:¥1
获取中
扫码支付

您的余额不足,请更换扫码支付或充值

打赏作者

实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值