标签: naivebayes

朴素贝叶斯算法的替代方案

我们正在尝试实现一种语义搜索算法,以根据用户的搜索词给出建议的类别。

目前,我们已经实现了朴素贝叶斯概率算法来返回数据中每个类别的概率,然后返回最高的概率。

然而,由于其天真,有时会得到错误的结果。

在不深入神经网络和其他极其复杂的东西的情况下,我们是否可以研究另一种替代方案?

bayesian naivebayes

6
推荐指数
1
解决办法
6404
查看次数

具有NLTK的半监督朴素贝叶斯

我基于EM(期望最大化算法)在Python中构建了一个半监督版的NLTK Naive Bayes.然而,在EM的一些迭代中,我得到负的对数似然(EM的对数似然性在每次迭代中必须是正的),因此我相信我的代码中肯定会有一些错误.仔细检查我的代码后,我不知道为什么会这样.如果有人能在我的代码中发现任何错误,我们将非常感激:

(半监督朴素贝叶斯的参考资料)

EM算法主循环

#initial assumptions:
#Bernoulli NB: only feature presence (value 1) or absence (value None) is computed 

#initial data:
#C: classifier trained with labeled data
#labeled_data: an array of tuples (feature dic, label)
#features: dictionary that outputs feature dictionary for a given document id  

for iteration in range(1, self.maxiter):    

  #Expectation: compute probabilities for each class for each unlabeled document
  #An array of tuples (feature dictionary, probability dist) is built       
  unlabeled_data = [(features[id],C.prob_classify(features[id])) for id in …
Run Code Online (Sandbox Code Playgroud)

python machine-learning nltk unsupervised-learning naivebayes

6
推荐指数
1
解决办法
1829
查看次数

如何训练大型数据集进行分类

我有一个1600000推文的训练数据集.我该如何训练这类巨大的数据.

我尝试了一些东西nltk.NaiveBayesClassifier.如果我跑步,训练需要5天以上.

def extract_features(tweet):

    tweet_words = set(tweet)
    features = {}
    for word in featureList:
        features['contains(%s)' % word] = (word in tweet_words)

    return features


training_set = nltk.classify.util.apply_features(extract_features, tweets)

NBClassifier = nltk.NaiveBayesClassifier.train(training_set)  # This takes lots of time  
Run Code Online (Sandbox Code Playgroud)

我该怎么办?

我需要使用SVM和朴素的bayes对我的数据集进行分类.

我想使用的数据集:链接

样本(培训数据集):

Label     Tweet
0         url aww bummer you shoulda got david carr third day
4         thankyou for your reply are you coming england again anytime soon
Run Code Online (Sandbox Code Playgroud)

示例(测试数据集):

Label     Tweet
4         love lebron url
0         lebron beast but still …
Run Code Online (Sandbox Code Playgroud)

python classification svm nltk naivebayes

6
推荐指数
1
解决办法
9811
查看次数

如何培养一个以pos-tag序列为特征的朴素贝叶斯分类器?

我有两类句子.每个都有相当明显的pos标签序列.如何训练以POS-Tag序列为特征的Naive-Bayes分类器?Stanford CoreNLP/NLTK(Java或Python)是否提供了使用pos-tag作为特征构建分类器的任何方法?我知道在python中NaiveBayesClassifier允许构建一个NB分类器,但它使用contains-a-wordas作为功能,但它可以扩展为使用pos-tag-sequence作为功能吗?

machine-learning nltk stanford-nlp text-classification naivebayes

6
推荐指数
1
解决办法
2100
查看次数

获得一个分类报告,说明使用10倍交叉验证的多项式朴素贝叶斯的类精确度和召回率

我有以下代码,它使用NB分类器来解决多类分类问题.该函数通过存储精度并稍后打印平均值来预先进行交叉验证.我想要的是一个分类报告,指定类别的精确度和召回,而不是最终的平均准确度分数.

   import random
   from sklearn import cross_validation
   from sklearn.naive_bayes import MultinomialNB

   def multinomial_nb_with_cv(x_train, y_train):
        random.shuffle(X)
        kf = cross_validation.KFold(len(X), n_folds=10)
        acc = []
        for train_index, test_index in kf:
            y_true = y_train[test_index]
            clf = MultinomialNB().fit(x_train[train_index],         
            y_train[train_index])
            y_pred = clf.predict(x_train[test_index])
            acc.append(accuracy_score(y_true, y_pred))
Run Code Online (Sandbox Code Playgroud)

如果我不进行交叉验证,我所要做的就是:

    from sklearn.metrics import classification_report
    from sklearn.naive_bayes import MultinomialNB

    def multinomial_nb(x_train, y_train, x_test, y_test):
        clf = MultinomialNB().fit(x_train, y_train)
        y_pred = clf.predict(x_test)
        y_true = y_test
        print classification_report(y_true, y_pred)
Run Code Online (Sandbox Code Playgroud)

它给了我一个这样的报告:

        precision    recall  f1-score   support

      0       0.50      0.24      0.33       221
      1       0.00      0.00      0.00 …
Run Code Online (Sandbox Code Playgroud)

python machine-learning scikit-learn naivebayes

6
推荐指数
1
解决办法
3922
查看次数

如何找到哪些列影响 R 中的预测

比如说,我正在使用朴素贝叶斯在 R 中开发机器学习模型。所以我将使用 naiveBayes 包构建一个模型,如下所示

model <- naiveBayes(Class ~ ., data = HouseVotes84)
Run Code Online (Sandbox Code Playgroud)

我还可以通过打印模型来打印模型的权重。

我按如下方式进行预测,这给了我一个作为预测的类

predict(model, HouseVotes84[1:10,], type = "raw")
Run Code Online (Sandbox Code Playgroud)

但是,我的问题是,有没有办法查看哪些列对这个预测影响最大?因此,我可以了解导致学生不及格的最重要因素是什么,例如,如果这是响应变量,而各种可能的因素是其他预测变量列。

我的问题是对于 R 中的任何包,上面的 naiveBayes 只是一个例子。

r naivebayes

6
推荐指数
1
解决办法
2233
查看次数

在java中使用朴素贝叶斯(weka)进行简单的文本分类

我尝试在我的java代码中进行文本分类天真贝叶斯weka libarary,但我认为分类的结果不正确,我不知道是什么问题.我使用arff文件作为输入.

这是我的训练数据:

@relation hamspam

@attribute text string
@attribute class {spam,ham}

@data
'good',ham
'good',ham
'very good',ham
'bad',spam
'very bad',spam
'very bad, very bad',spam
'good good bad',ham
Run Code Online (Sandbox Code Playgroud)

这是我的testing_data:

@relation test

@attribute text string
@attribute class {spam,ham}

@data
'good bad very bad',?
'good bad very bad',?
'good',?
'good very good',?
'bad',?
'very good',?
'very very good',?
Run Code Online (Sandbox Code Playgroud)

这是我的代码:

public static void NaiveBayes(String training_file, String testing_file) throws FileNotFoundException, IOException, Exception{
         //filter
        StringToWordVector filter = new StringToWordVector();

        Classifier naive = new NaiveBayes();

        //training data
        Instances …
Run Code Online (Sandbox Code Playgroud)

java weka arff text-classification naivebayes

6
推荐指数
1
解决办法
2856
查看次数

空切片的平均值和自由度&lt;= 0

下面的代码假设为完整的高斯高斯(http://courses.ee.sun.ac.za/Pattern_Recognition_813/lectures/lecture03/node2.html)运行Bayes分类器,但是当我运行码。他们是:

RuntimeWarning: Mean of empty slice.
  warnings.warn("Mean of empty slice.", RuntimeWarning)
Run Code Online (Sandbox Code Playgroud)

RuntimeWarning: Degrees of freedom <= 0 for slice
  warnings.warn("Degrees of freedom <= 0 for slice", RuntimeWarning)
Run Code Online (Sandbox Code Playgroud)

这是我的代码:

def modelFull(train, test):
    err_train = 0
    err_test = 0
    x_train = []
    x_test = []
    labels = []
    train_labels = []
    test_labels = []
    for i in train:
        x_train.append(i[:-1]/255)
        labels.append(i[-1])
        train_labels.append(i[-1])
    for i in test:
        x_test.append(i[:-1]/255)
        labels.append(i[-1])
        test_labels.append(i[-1])
    x_train = np.array(x_train)
    x_0 = []
    x_1 = []
    for i …
Run Code Online (Sandbox Code Playgroud)

python numpy gaussian naivebayes

6
推荐指数
1
解决办法
1万
查看次数

用nltk训练自己的分类器后,如何将其加载到textblob中?

textblob中的内置分类器非常笨。它是根据电影评论进行训练的,所以我在上下文中创建了大量示例(57,000个故事,分为正面或负面故事),然后使用nltk.尝试使用textblob对其进行训练的方式进行了训练,但始终失败:

with open('train.json', 'r') as fp:
    cl = NaiveBayesClassifier(fp, format="json")
Run Code Online (Sandbox Code Playgroud)

那将运行数小时,并最终导致内存错误。

我查看了源代码,发现它只是使用nltk并将其包装起来,所以我改用了它,并且可以正常工作。

nltk训练集的结构必须是一个元组列表,其中第一部分是文本中的单词计数器和出现频率。元组的第二部分是“ pos”或“ neg”。

>>> train_set = [(Counter(i["text"].split()),i["label"]) for i in data[200:]]
>>> test_set = [(Counter(i["text"].split()),i["label"]) for i in data[:200]] # withholding 200 examples for testing later

>>> cl = nltk.NaiveBayesClassifier.train(train_set) # <-- this is the same thing textblob was using

>>> print("Classifier accuracy percent:",(nltk.classify.accuracy(cl, test_set))*100)
('Classifier accuracy percent:', 66.5)
>>>>cl.show_most_informative_features(75)
Run Code Online (Sandbox Code Playgroud)

然后我腌了。

with open('storybayes.pickle','wb') as f:
    pickle.dump(cl,f)
Run Code Online (Sandbox Code Playgroud)

现在...我拿了这个腌制的文件,然后重新打开它以获取nltk.classifier'nltk.classify.naivebayes.NaiveBayesClassifier'>-并尝试将其输入到textblob中。代替

from textblob.classifiers import NaiveBayesClassifier
blob = TextBlob("I love this …
Run Code Online (Sandbox Code Playgroud)

python nltk textblob naivebayes

6
推荐指数
1
解决办法
572
查看次数

class_weight = '平衡' 相当于朴素贝叶斯

我正在使用两个不同的分类器对相同的不平衡数据执行一些(二进制)文本分类。我想比较两个分类器的结果。

使用 sklearn 逻辑回归时,我可以选择设置class_weight = 'balanced'sklearn 朴素贝叶斯,但没有可用的参数。

我知道,我可以从较大的类中随机抽样,以便最终使两个类的大小相等,但随后数据就会丢失。

为什么朴素贝叶斯没有这样的参数?我猜想这与算法的性质有关,但找不到任何关于这个具体问题的信息。我也想知道相当于什么?如何实现类似的效果(分类器意识到数据不平衡,并给予少数类别更多的权重,而给予多数类别较少的权重)?

python scikit-learn logistic-regression naivebayes

6
推荐指数
1
解决办法
2994
查看次数