所以我有两种分类方法,判别分析双线性分类(朴素贝叶斯)和matlab实现的纯朴朴贝叶斯分类器,整个数据集中有23个类.第一种方法判别分析:
%% Classify Clusters using Naive Bayes Classifier and classify
training_data = Testdata;
target_class = TestDataLabels;
[class, err] = classify(UnseenTestdata, training_data, target_class,'diaglinear')
cmat1 = confusionmat(UnseenTestDataLabels, class);
acc1 = 100*sum(diag(cmat1))./sum(cmat1(:));
fprintf('Classifier1:\naccuracy = %.2f%%\n', acc1);
fprintf('Confusion Matrix:\n'), disp(cmat1)
Run Code Online (Sandbox Code Playgroud)
从混淆矩阵中得出准确度为81.49%,错误率(err)为0.5040(不知道如何解释).
第二种方法朴素贝叶斯分类器:
%% Classify Clusters using Naive Bayes Classifier
training_data = Testdata;
target_class = TestDataLabels;
%# train model
nb = NaiveBayes.fit(training_data, target_class, 'Distribution', 'mn');
%# prediction
class1 = nb.predict(UnseenTestdata);
%# performance
cmat1 = confusionmat(UnseenTestDataLabels, class1);
acc1 = 100*sum(diag(cmat1))./sum(cmat1(:)); …Run Code Online (Sandbox Code Playgroud) 做天真的贝叶斯分类时,有没有人知道如何设置alpha的参数?
例如,我首先使用词袋来构建特征矩阵,矩阵的每个单元都是单词的计数,然后我用tf(术语频率)对矩阵进行归一化.
但是当我使用朴素贝叶来构建分类器模型时,我选择使用多项式NB(我认为这是正确的,而不是伯努利和高斯).默认的alpha设置是1.0(文档说拉普拉斯平滑,我不知道是什么).
结果非常糟糕,就像只有21%的人回忆起找到积极的类(目标类).但是当我设置alpha = 0.0001(我随机选择)时,结果得到95%的回忆得分.
此外,我检查了多项式NB 公式,我认为这是因为alpha问题,因为如果我使用单词计数作为特征,则alpha = 1不会影响结果,但是,因为tf介于0- 1,alpha = 1确实会影响这个公式的结果.
我也测试了结果不使用tf,只使用了一堆字数,结果也是95%,那么,有没有人知道如何设置alpha值?因为我必须使用tf作为特征矩阵.
谢谢.
LDA 与朴素贝叶斯在机器学习分类方面的优缺点是什么?
我知道一些差异,比如朴素贝叶斯假设变量是独立的,而 LDA 假设高斯类条件密度模型,但我不明白什么时候使用 LDA,什么时候使用 NB 取决于情况?
classification machine-learning naivebayes linear-discriminant machine-learning-model
天真贝叶斯过滤对过滤垃圾邮件的效果如何?
我听说垃圾邮件发送者可以通过填充额外的非垃圾邮件相关词语来轻松绕过它们.您可以使用哪些编程技术与贝叶斯过滤器进行预防?
试图适应朴素贝叶斯时:
training_data = sample; %
target_class = K8;
# train model
nb = NaiveBayes.fit(training_data, target_class);
# prediction
y = nb.predict(cluster3);
Run Code Online (Sandbox Code Playgroud)
我收到一个错误:
??? Error using ==> NaiveBayes.fit>gaussianFit at 535
The within-class variance in each feature of TRAINING
must be positive. The within-class variance in feature
2 5 6 in class normal. are not positive.
Error in ==> NaiveBayes.fit at 498
obj = gaussianFit(obj, training, gindex);
Run Code Online (Sandbox Code Playgroud)
任何人都可以阐明这一点以及如何解决它?请注意,我在这里阅读了类似的帖子,但我不知道该怎么办?似乎它试图基于列而不是行来拟合,类方差应该基于属于特定类的每一行的概率.如果我删除那些列然后它可以工作,但显然这不是我想要做的.
我在python中尝试这个Naive Bayes分类器:
classifier = nltk.NaiveBayesClassifier.train(train_set)
print "Naive Bayes Accuracy " + str(nltk.classify.accuracy(classifier, test_set)*100)
classifier.show_most_informative_features(5)
Run Code Online (Sandbox Code Playgroud)
我有以下输出:
可以清楚地看到哪些单词更多地出现在"重要"中,哪些出现在"垃圾邮件"类别中.但我无法使用这些值.我实际上想要一个如下所示的列表:
[[pass,important],[respective,spam],[investment,spam],[internet,spam],[understands,spam]]
Run Code Online (Sandbox Code Playgroud)
我是python的新手并且很难搞清楚所有这些,有人可以帮忙吗?我会非常感激的.
我有一个评论集,它的类别标签为正/负。我正在将朴素贝叶斯应用于该评论数据集。首先,我要转换成单词袋。这里sorted_data ['Text']是评论,而final_counts是稀疏矩阵
count_vect = CountVectorizer()
final_counts = count_vect.fit_transform(sorted_data['Text'].values)
Run Code Online (Sandbox Code Playgroud)
我将数据分为训练和测试数据集。
X_1, X_test, y_1, y_test = cross_validation.train_test_split(final_counts, labels, test_size=0.3, random_state=0)
Run Code Online (Sandbox Code Playgroud)
我正在应用朴素贝叶斯算法如下
optimal_alpha = 1
NB_optimal = BernoulliNB(alpha=optimal_aplha)
# fitting the model
NB_optimal.fit(X_tr, y_tr)
# predict the response
pred = NB_optimal.predict(X_test)
# evaluate accuracy
acc = accuracy_score(y_test, pred) * 100
print('\nThe accuracy of the NB classifier for k = %d is %f%%' % (optimal_aplha, acc))
Run Code Online (Sandbox Code Playgroud)
这里X_test是测试数据集,其中pred变量为我们提供X_test中的向量是正类还是负类。
X_test形状为(54626行,尺寸为82343)
pred的长度是54626
我的问题是我想获得每个向量中概率最高的单词,以便我可以通过单词了解为什么它预测为正类或负类。因此,如何获得每个向量中概率最高的单词?
我们正在尝试实现一种语义搜索算法,以根据用户的搜索词给出建议的类别。
目前,我们已经实现了朴素贝叶斯概率算法来返回数据中每个类别的概率,然后返回最高的概率。
然而,由于其天真,有时会得到错误的结果。
在不深入神经网络和其他极其复杂的东西的情况下,我们是否可以研究另一种替代方案?
我正在使用两个不同的分类器对相同的不平衡数据执行一些(二进制)文本分类。我想比较两个分类器的结果。
使用 sklearn 逻辑回归时,我可以选择设置class_weight = 'balanced'sklearn 朴素贝叶斯,但没有可用的参数。
我知道,我可以从较大的类中随机抽样,以便最终使两个类的大小相等,但随后数据就会丢失。
为什么朴素贝叶斯没有这样的参数?我猜想这与算法的性质有关,但找不到任何关于这个具体问题的信息。我也想知道相当于什么?如何实现类似的效果(分类器意识到数据不平衡,并给予少数类别更多的权重,而给予多数类别较少的权重)?
naivebayes ×10
python ×4
scikit-learn ×4
bayesian ×3
matlab ×2
nltk ×1
python-3.x ×1
statistics ×1
variance ×1