Scikit-learn 多类别朴素贝叶斯分类器的概率输出 y

我正在进行推文分类,每条推文可以属于几个类别中的一个。训练集的输出给出的是每个样本属于每个类别的概率。例如:推文#1:C1-0.6, C2-0.4, C3-0.0(C1、C2、C3为类别)

我计划使用Scikit-learn的朴素贝叶斯分类器。我在naive_bayes.py中找不到一个可以接受每个类别概率作为训练输入的fit方法。我需要一个可以接受训练集每个类别输出概率的分类器(即:y.shape = [n_samples, n_classes])。

我该如何处理我的数据集以应用朴素贝叶斯分类器?


回答:

这并不容易,因为“类别概率”可以有多种解释。

在NB分类器和sklearn的情况下,我认为最简单的处理方法是:

  1. 根据以下规则拆分(复制)你的训练样本:给定(x, [p1, p2, …, pk])样本(其中pi是第i个类别的概率),创建人工训练样本:(x, 1, p1), (x, 2, p2), …, (x, k, pk)。这样你会得到k个新观察,每个都“附着”在一个类别上,pi被视为样本权重,这是sklearn中的NB可以接受的。
  2. 使用fit(X,Y,sample_weights)训练你的NB(其中X是你x观察的矩阵,Y是前一步的类别矩阵,sample_weights是前一步的pi矩阵)。

例如,如果你的训练集由两个点组成:

  • ( [0 1], [0.6 0.4] )
  • ( [1 3], [0.1 0.9] )

你将它们转换为:

  • ( [0 1], 1, 0.6)
  • ( [0 1], 2, 0.4)
  • ( [1 3], 1, 0.1)
  • ( [1 3], 2, 0.9)

并使用以下数据训练NB:

  • X = [ [0 1], [0 1], [1 3], [1 3] ]
  • Y = [ 1, 2, 1, 2 ]
  • sample_weights = [ 0.6 0.4 0.1 0.9 ]

Related Posts

使用LSTM在Python中预测未来值

这段代码可以预测指定股票的当前日期之前的值,但不能预测…

如何在gensim的word2vec模型中查找双词组的相似性

我有一个word2vec模型,假设我使用的是googl…

dask_xgboost.predict 可以工作但无法显示 – 数据必须是一维的

我试图使用 XGBoost 创建模型。 看起来我成功地…

ML Tuning – Cross Validation in Spark

我在https://spark.apache.org/…

如何在React JS中使用fetch从REST API获取预测

我正在开发一个应用程序,其中Flask REST AP…

如何分析ML.NET中多类分类预测得分数组?

我在ML.NET中创建了一个多类分类项目。该项目可以对…

发表回复

您的邮箱地址不会被公开。 必填项已用 * 标注