我最近开始理解与自然语言处理相关的算法,并且遇到了各种站点,这些站点表明Naive Bayes无法捕获XOR概念.首先,我不明白XOR究竟是什么问题.有人可以解释,如果可能的话,XOR问题是一个简单的分类示例.
我正在尝试解决文本分类问题.我有一些有限数量的标签可以捕获我的文本数据类别.如果传入的文本数据不适合任何标签,则标记为"其他".在下面的示例中,我构建了一个文本分类器,将文本数据分类为"早餐"或"意大利语".在测试场景中,我包含了几个不适合我用于训练的标签的文本数据.这是我面临的挑战.理想情况下,我希望模型能说 - "其他"用于"我喜欢徒步旅行"和"每个人都应该理解数学".我怎样才能做到这一点?
import numpy as np
from sklearn.pipeline import Pipeline
from sklearn.feature_extraction.text import CountVectorizer
from sklearn.naive_bayes import MultinomialNB
from sklearn.feature_extraction.text import TfidfTransformer
X_train = np.array(["coffee is my favorite drink",
"i like to have tea in the morning",
"i like to eat italian food for dinner",
"i had pasta at this restaurant and it was amazing",
"pizza at this restaurant is the best in nyc",
"people like italian food these days",
"i like to have bagels for breakfast",
"olive oil …Run Code Online (Sandbox Code Playgroud) nlp machine-learning scikit-learn text-classification naivebayes
我打算使用朴素贝叶斯分类模型来实现垃圾邮件过滤器。
在网上,我看到了很多有关朴素贝叶斯分类的信息,但是问题在于它涉及很多数学知识,而不是清楚地说明其完成方式。问题是我更像是一个程序员而不是数学家(是的,我在学校学习过概率论和贝叶斯定理,但是很长一段时间没有联系,而且我现在还没有足够的学习能力(几乎3周内准备好工作原型))。
因此,如果有人可以向我解释或指向我为程序员而不是数学家解释的位置,那将是很大的帮助。
PS:如果您想知道的话,我必须在C中实现它。:(
问候,微内核
我正在使用TextBlob for python对推文进行一些情绪分析.TextBlob中的默认分析器是PatternAnalyzer,它可以很好地工作并且速度非常快.
sent = TextBlob(tweet.decode('utf-8')).sentiment
Run Code Online (Sandbox Code Playgroud)
我现在尝试切换到NaiveBayesAnalyzer,发现运行时对我的需求不切实际.(每条推文接近5秒.)
sent = TextBlob(tweet.decode('utf-8'), analyzer=NaiveBayesAnalyzer()).sentiment
Run Code Online (Sandbox Code Playgroud)
我之前使用过朴素贝叶斯分类器的scikit学习实现,并没有发现它这么慢,所以我想知道我是否正确使用它在这种情况下.
我假设分析仪是预训练的,至少文档说明"Naive Bayes分析仪是在电影评论数据集上训练的".但是它还有一个函数train(),被描述为"在电影评论语料库中训练朴素贝叶斯分类器".它是否在每次运行之前在内部训练分析仪?我希望不是.
有谁知道加速这个的方法?
我有一个Gaussian naive bayes针对数据集运行的算法。我需要的是获得目标类的特征重要性(特征的影响力)。
这是我的代码:
from sklearn.naive_bayes import GaussianNB
from sklearn.metrics import accuracy_score
from sklearn.model_selection import train_test_split
X_train, X_test, y_train, y_test = train_test_split(inputs, target, test_size=0.2)
gaussian_nb = GaussianNB()
Run Code Online (Sandbox Code Playgroud)
gaussian_nb.fit(X_train, y_train)
Run Code Online (Sandbox Code Playgroud)
gaussian_nb.score(X_test, y_test)*100
Run Code Online (Sandbox Code Playgroud)
我尝试过:
importance = gaussian_nb.coefs_ # and even tried coef_
Run Code Online (Sandbox Code Playgroud)
它给出了一个错误:
AttributeError:“GaussianNB”对象没有属性“coefs_”
有人可以帮帮我吗?
关于使用 SparkML 和朴素贝叶斯进行预测的小问题。
我有一个非常简单的数据集,它只是时间戳,代表一天,以及当天售出了多少煎饼:
dataSetPancakes.show();
+----------+-----+
| time|label|
+----------+-----+
|1622505600| 1|
|1622592000| 0|
|1622678400| 3|
|1622764800| 1|
|1622851200| 1|
|1622937600| 1|
|1623024000| 1|
|1623110400| 2|
|1623196800| 2|
|1623283200| 0|
+----------+-----+
only showing top 10 rows"
Run Code Online (Sandbox Code Playgroud)
很简单,我只是想预测明天、后天等煎饼会卖多少……
因此,我尝试了朴素贝叶斯模型,按照此处的教程https://spark.apache.org/docs/latest/ml-classification-regression.html#naive-bayes,我写道:
VectorAssembler vectorAssembler = new VectorAssembler().setInputCols(new String[]{"time"}).setOutputCol("features");
Dataset<Row> vectorData = vectorAssembler.transform(dataSetPancakes);
NaiveBayes naiveBayes = new NaiveBayes();
NaiveBayesModel model = naiveBayes.fit(vectorData);
Dataset<Row> predictions = model.transform(vectorData);
predictions.show();
model.predict(new DenseVector(new double[]{getTomorrowTimestamp()})));
Run Code Online (Sandbox Code Playgroud)
我什至看到了如下结果:
-RECORD 0--------------------------------------------------------------------------------------------------------------
time | 1622505600
label | 1
features | [1.6225056E9]
rawPrediction …Run Code Online (Sandbox Code Playgroud) 我正在使用朴素贝叶斯进行文本分类机器学习问题.我把每个单词都作为一个功能.我已经能够实现它,并且我的准确性很高.
我可以使用单词元组作为特征吗?
例如,如果有两个类,政治和体育.政府这个词可能出现在他们两个人身上.然而,在政治上我可以有一个元组(政府,民主),而在课堂体育中我可以有一个元组(政府,运动员).因此,如果一篇新的文章出现在政治中,那么元组(政府,民主)的概率比元组(政府,运动员)更具概率.
我问这是因为这样做是因为我违反了Naive Bayes问题的独立性假设,因为我也在考虑将单个单词作为特征.
另外,我正在考虑为功能添加权重.例如,3元组功能的重量将小于4元组功能.
从理论上讲,这两种方法是否都没有改变Naive Bayes分类器的独立性假设?此外,我还没有开始我提到的方法,但这会提高准确性吗?我认为准确性可能不会提高,但获得相同精度所需的训练数据量会更少.
当在matlab中测试天真分类器时,即使我在相同的样本数据上进行了训练和测试,我得到了不同的结果,我想知道我的代码是否正确以及是否有人可以帮助解释为什么这样做?
%% dimensionality reduction
columns = 6
[U,S,V]=svds(fulldata,columns);
%% randomly select dataset
rows = 1000;
columns = 6;
%# pick random rows
indX = randperm( size(fulldata,1) );
indX = indX(1:rows)';
%# pick random columns
%indY = randperm( size(fulldata,2) );
indY = indY(1:columns);
%# filter data
data = U(indX,indY);
%% apply normalization method to every cell
data = zscore(data);
%create a training set the same as datasample
training_data = data;
%match the class labels to the corresponding rows
target_class = classlabels(indX,:) …Run Code Online (Sandbox Code Playgroud) matlab classification machine-learning probability naivebayes
我有一个包含200000个标记的训练样例的数据集.对于每个训练示例,我有10个功能,包括连续和离散.我正在尝试使用sklearnpython包来训练模型并进行预测,但我遇到了一些麻烦(还有一些问题).
首先让我编写我到目前为止编写的代码:
from sklearn.naive_bayes import GaussianNB
# data contains the 200 000 examples
# targets contain the corresponding labels for each training example
gnb = GaussianNB()
gnb.fit(data, targets)
predicted = gnb.predict(data)
Run Code Online (Sandbox Code Playgroud)
问题是我的准确度非常低(错误分类标签太多) - 大约20%.但是我不太确定数据是否存在问题(例如需要更多数据或其他内容)或代码.
在给定具有离散和连续特征的数据集的情况下,这是实现朴素贝叶斯分类器的正确方法吗?
此外,在机器学习中,我们知道数据集应该分为训练和验证/测试集.这是由模型使用训练数据集自动执行sklearn还是我应该使用验证集fit调用predict?
任何想法或建议将不胜感激.
我曾经quanteda::textmodel_NB创建一个模型,将文本分为两类之一。我将模型拟合到去年夏天的训练数据集上。
现在,我试图在今年夏天使用它来对我们在工作中获得的新文本进行分类。我尝试这样做并收到以下错误:
Error in predict.textmodel_NB_fitted(model, test_dfm) :
feature set in newdata different from that in training set
Run Code Online (Sandbox Code Playgroud)
可以在此处的第 157 至 165 行找到生成错误的函数中的代码。
我认为这是因为训练数据集中的单词与测试数据集中使用的单词不完全匹配。但是为什么会出现这个错误呢?我觉得好像——在现实世界的例子中有用——模型应该能够处理包含不同特征的数据集,因为这在应用中很可能总是发生。
所以我的第一个问题是:
1. 这个错误是朴素贝叶斯算法的一个属性吗?还是函数的作者选择这样做?
这让我想到了我的第二个问题:
2. 我该如何解决这个问题?
为了解决第二个问题,我提供了可重现的代码(最后一行生成了上面的错误):
library(quanteda)
library(magrittr)
library(data.table)
train_text <- c("Can random effects apply only to categorical variables?",
"ANOVA expectation identity",
"Statistical test for significance in ranking positions",
"Is Fisher Sharp Null Hypothesis testable?",
"List major reasons for different results from survival analysis among different studies",
"How do the …Run Code Online (Sandbox Code Playgroud) naivebayes ×10
python ×3
scikit-learn ×3
nlp ×2
algorithm ×1
apache-spark ×1
bayesian ×1
gaussian ×1
java ×1
math ×1
matlab ×1
probability ×1
quanteda ×1
r ×1
statistics ×1
textblob ×1