我发现很难理解Naive Bayes的过程,我想知道是否有人可以用英语简单的一步一步解释它.我理解它需要按时间比较概率,但我不知道训练数据如何与实际数据集相关.
请给我一个关于训练集扮演什么角色的解释.我在这里给出一个非常简单的水果例子,例如香蕉
training set---
round-red
round-orange
oblong-yellow
round-red
dataset----
round-red
round-orange
round-red
round-orange
oblong-yellow
round-red
round-orange
oblong-yellow
oblong-yellow
round-red
Run Code Online (Sandbox Code Playgroud) algorithm classification machine-learning dataset naivebayes
我使用Naive Bayes分类器将数千个文档分类为30个不同的类别.我已经实现了Naive Bayes分类器,并且通过一些特征选择(主要是过滤无用的单词),我获得了大约30%的测试精度,45%的训练准确度.这明显优于随机,但我希望它更好.
我尝试用NB实现AdaBoost,但它似乎没有给出明显更好的结果(文献似乎对此有所分歧,一些论文称AdaBoost与NB没有给出更好的结果,其他人这样做).你知道NB的任何其他扩展可能会提供更好的准确性吗?
关于如何保存训练有素的分类器,我有点困惑.就像在每次我想要使用它时重新训练分类器显然是非常糟糕和缓慢的,我如何保存它并在需要时再次加载它?代码如下,提前感谢您的帮助.我正在使用Python和NLTK朴素贝叶斯分类器.
classifier = nltk.NaiveBayesClassifier.train(training_set)
# look inside the classifier train method in the source code of the NLTK library
def train(labeled_featuresets, estimator=nltk.probability.ELEProbDist):
# Create the P(label) distribution
label_probdist = estimator(label_freqdist)
# Create the P(fval|label, fname) distribution
feature_probdist = {}
return NaiveBayesClassifier(label_probdist, feature_probdist)
Run Code Online (Sandbox Code Playgroud) 我在Postgres数据库中存储了大约300k文档,这些文档标记有主题类别(总共有大约150个类别).我有另外150k文件还没有类别.我正在努力寻找以编程方式对它们进行分类的最佳方法.
我一直在探索NLTK及其朴素贝叶斯分类器.似乎是一个很好的起点(如果你可以建议一个更好的分类算法来完成这项任务,我会全力以赴).
我的问题是我没有足够的RAM来同时训练所有150个categoies/300k文件上的NaiveBayesClassifier(5个类别的培训使用8GB).此外,随着我在更多类别上的训练,分类器的准确性似乎下降(2个类别的准确度为90%,5%为61%,10个为61%).
我是否应该一次训练5个类别的分类器,并通过分类器运行所有150k文件以查看是否有匹配?看起来这样可行,除了会有很多误报,其中没有真正匹配任何类别的文档因为它是可用的最佳匹配而被分类器打开了...是否存在如果文档不适合任何类别,为分类器提供"无上述"选项的方法是什么?
我有一个小语料库,我想用10倍交叉验证来计算朴素贝叶斯分类器的准确性,怎么做呢.
我想知道是否有针对垃圾邮件和文本分类的贝叶斯过滤的任何良好和干净的面向对象编程(OOP)实现?这仅用于学习目的.
我尝试了橙色框架的朴素贝叶斯分类.这些方法非常不直观,文档非常无组织.这里有没有人推荐另一个框架?
我现在主要使用NaiveBayesian.我正在考虑使用nltk的NaiveClassification,但他们认为他们不能处理连续变量.
我有什么选择?
我想学习Naive Bayes模型,解决类是布尔值的问题(取两个值中的一个).某些功能是布尔值,但其他功能是分类的,可以采用少量值(~5).
如果我的所有功能都是布尔值,那么我想使用sklearn.naive_bayes.BernoulliNB
.似乎很清楚,sklearn.naive_bayes.MultinomialNB
是不是我想要的.
一种解决方案是将我的分类特征拆分为布尔特征.例如,如果变量"X"取值"红色","绿色","蓝色",我可以有三个变量:"X是红色","X是绿色","X是蓝色".这违反了给予类的变量的条件独立性假设,因此它似乎完全不合适.
另一种可能性是将变量编码为实值变量,其中0.0表示红色,1.0表示绿色,2.0表示蓝色.这似乎完全不适合使用GaussianNB(出于显而易见的原因).
我想要做的事情似乎并不奇怪,但我不明白如何将它融入sklearn给我的Naive Bayes模型中.我自己编写代码很容易,但是如果可能的话,我更喜欢使用sklearn,原因很明显(大多数:避免错误).
[编辑解释为什么我不认为多项式NB是我想要的]:
我的理解是,在多项式NB中,特征向量包括在k
iid样本中观察到令牌的次数.
我的理解是,这适用于分类文档,其中存在基础类文档,然后假定文档中的每个单词都是从特定于该类的分类分布中提取的.文档将具有k
令牌,特征向量的长度将等于词汇量大小,并且特征计数的总和将是k
.
就我而言,我有一些bernoulli变量,加上几个分类变量.但这里没有"计数"的概念.
示例:课程是喜欢或不喜欢数学的人.预测因子是大学专业(分类)以及他们是否进入研究生院(布尔).
我认为这不符合多项式,因为这里没有任何重要性.
naivebayes ×10
python ×5
nltk ×4
algorithm ×2
nlp ×2
scikit-learn ×2
dataset ×1
email-spam ×1
oop ×1
statistics ×1