标签: bayesian

朴素贝叶斯分类(垃圾邮件过滤) - 哪种计算是正确的?

我正在实施朴素贝叶斯分类器进行垃圾邮件过滤.我对某些计算有疑问.请澄清我该怎么做.这是我的问题.

在这种方法中,你必须计算

替代文字

P(S | W) - >消息是垃圾邮件的概率,因为字W出现在其中.

P(W | S) - >垃圾邮件中出现单词W的概率.

P(W | H) - >在Ham消息中出现字W的概率.

所以要计算P(W | S),以下哪项是正确的:

  1. (垃圾邮件中出现W的次数)/(所有邮件中出现W的总次数)

  2. (垃圾邮件中出现W字的次数)/(垃圾邮件中的字总数)

那么,要计算P(W | S),我应该做(1)还是(2)?(我认为是(2),但我不确定.)

我顺便提一下http://en.wikipedia.org/wiki/Bayesian_spam_filtering的信息.

我必须在本周末完成实施:(


不应该重复出现'W'字样增加邮件的垃圾邮件分数?在你的方法中它不会,对吧?

可以说,我们有100条培训信息,其中50条是垃圾邮件,50条是火腿.并说每条消息的word_count = 100.

并且假设,在垃圾邮件中,单词W在每个消息中出现5次,单词W在Ham消息中出现1次.

因此,在所有垃圾邮件中出现的总W次数= 5*50 = 250次.

并且所有Ham消息中出现的总W次数= 1*50 = 50次.

所有训练消息中W的总出现次数=(250 + 50)= 300次.

那么,在这种情况下,你如何计算P(W | S)和P(W | H)?

当然我们应该期待,P(W|S) > P(W|H)对吧?

algorithm math statistics spam-prevention bayesian

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

Nltk天真的贝叶斯分类器记忆问题

我的第一篇文章!我在使用nltk NaiveBayesClassifier时遇到了问题.我有7000个训练项目.每个培训项目都有2或3个世界的描述和代码.我想使用代码作为类的标签和描述的每个世界作为功能.一个例子:

"我叫奥巴马",001 ......

训练集= {[feature ['My'] = True,feature ['name'] = True,feature ['is'] = True,feature [Obama] = True],001}

不幸的是,使用这种方法,训练程序NaiveBayesClassifier.train使用高达3 GB的ram ..我的方法有什么问题?谢谢!

def document_features(document): # feature extractor
document = set(document)
return dict((w, True) for w in document)

...
words=set()
entries = []
train_set= []
train_length = 2000
readfile = open("atcname.pl", 'r')
t = readfile.readline()
while (t!=""):
  t = t.split("'")
  code = t[0] #class
  desc = t[1] # description
  words = words.union(s) #update dictionary with the new words in the description
  entries.append((s,code)) …
Run Code Online (Sandbox Code Playgroud)

python classification bayesian nltk

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

WinBUGS代码出错

我无法获得下面的WinBUGS代码.它适用于普通的先验,但不适用于均匀的先验.单击后显示的错误消息compilearray index is greater than array upper bound for age.那是什么意思?请问任何人请帮我处理下面的代码吗?

model
{
for (i in 1:n) {
# Linear regression on logit
logit(p[i]) <- alpha + b.sex*sex[i] + b.age*age[i]
# Likelihood function for each data point
frac[i] ~ dbern(p[i])
}
alpha ~ dunif(0, 1) # Prior for intercept
b.sex ~ dunif(0, 1) # Prior for slope of sex
b.age ~ dunif(0, 1) # Prior for slope of age
}
Data
list(sex=c(1, 1, 1, 0, 1, 1, …
Run Code Online (Sandbox Code Playgroud)

r bayesian winbugs

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

使用WinBUGS/R2WinBUGS的Logit回归未收敛到可能性估计值

我是R 2.15.2的Win-7用户

有人可以帮助我为什么以下模型不能很好地接近简单的logit模型估计?

编辑

 Mydata <- structure(list(gg = c(13.659955, 6.621436486, 3.017166776, 2.516795069, 
3.928538296, 4.211960532, 3.235445955, 5.152860411, 18.96466673, 
5.904678823, 4.987622293, 1.170687541, 3.088224149, 4.738065529, 
3.263022593, 6.050017999, 5.650762257, 2.058924721, 3.138591919, 
7.169083435, 11.30381738, 3.036991188, 4.559013218, 3.978760664, 
3.617455798, 2.430111184, 4.440319959, 2.200267742, 6.003166495, 
3.114161526, 3.812363457, 11.12816724, 15.6564348, 13.50562576, 
5.154056904, 6.26451889, 1.849669635, 1.816757851, 3.861868285, 
2.884542233, 2.993444924, 2.724235493, 2.694159089, 1.973597356, 
4.371300647, 3.559035718, 3.59124243, 6.587196681, 10.03402072, 
4.805158339, 4.491460392, 1.627936721, 1.278291553, 0.978710462, 
3.08635052, 2.58594947, 2.354973563, 1.657519171, 2.946994656, 
2.110549733, 6.095182338, 6.000660354, 6.691960157, 1.796172588, 
2.531234555, 2.992017156, 2.882403206, 6.066420081, 5.930524609, 
5.972280022, 0.915755208, 2.398369176, …
Run Code Online (Sandbox Code Playgroud)

r bayesian winbugs r2winbugs

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

sklearn GaussianNB - 结果不佳,[nan]概率

我正在为一堂课做一些关于性别分类的工作.我一直在使用SVMLight,结果不错,但我想在我的数据上尝试一些贝叶斯方法.我的数据集由文本数据组成,我已经完成了功能缩减,以便将某些贝叶斯方法的特征空间削减到更合理的大小.所有实例都通过tf-idf运行,然后规范化(通过我自己的代码).

我抓住了sklearn工具包,因为它很容易与我当前的代码库集成,但我从GaussianNB获得的结果都是一个类(在这种情况下为-1),并且预测的概率都是[nan].

我贴了一些相关的代码; 我不知道这是否足以继续下去,但我希望我只是在使用sklearn api时忽略了一些明显的东西.我有几个不同的功能集,我尝试通过它,也有相同的结果.使用训练集和交叉验证也是如此.有什么想法吗?可能是因为我的功能空间太稀疏了才能使用吗?我有300多个实例,其中大多数具有数百个非零特征.

class GNBLearner(BaseLearner):
    def __init__(self, featureCount):
        self.gnb = GaussianNB()
        self.featureCount = featureCount

    def train(self, instances, params):
        X = np.zeros( (len(instances), self.featureCount) )
        Y = [0]*len(instances)
        for i, inst in enumerate(instances):
            for idx,val in inst.data:
                X[i,idx-1] = val
            Y[i] = inst.c
        self.gnb.fit(X, Y)

    def test(self, instances, params):
        X = np.zeros( (len(instances), self.featureCount) )
        for i, inst in enumerate(instances):
            for idx,val in inst.data:
                X[i,idx-1] = val
        return self.gnb.predict(X)

    def conf_mtx(self, res, test_set):
        conf = [[0,0],[0,0]]
        for r, x …
Run Code Online (Sandbox Code Playgroud)

python machine-learning bayesian scikit-learn

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

在python中建立redis连接

我在python中使用redisbayes库来实现朴素的贝叶斯分类.但是当我写作 -

rb = redisbayes.RedisBayes(redis=redis.Redis())
rb.train('good', 'sunshine drugs love sex lobster sloth')
Run Code Online (Sandbox Code Playgroud)

它给出以下错误 -

ConnectionError: Error 10061 connecting localhost:6379. 
No connection could be made because the target machine actively refused it.
Run Code Online (Sandbox Code Playgroud)

我试过这样做 -

pool = redis.ConnectionPool(host='localhost', port=6379, db=0)
rb = redisbayes.RedisBayes(redis=redis.Redis(connection_pool=pool))
Run Code Online (Sandbox Code Playgroud)

但它给出了同样的错误.我无法找到解决方案.如何使用python建立与redis的连接,或者使用MySQL的训练数据以任何其他方式在python中进行naive bayes分类?

python bayesian redis

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

最大似然参数估计

鉴于此数据集:

颜色 | 尺寸

红色 | 大

白色 | 小的

红色 | 大

红色 | 小的

白色 | 大

红色 | 大

以及以下贝叶斯网络:Color --> Size,我应该找到贝叶斯网络的最大似然参数。估算器是什么?我不确定如何在这里进行,因此将不胜感激任何帮助。

machine-learning bayesian mle

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

使用pymc的Python中的贝叶斯IRT模型

我想用Python估计一个项目响应理论(IRT)模型.更具体地说,参考学生参加考试的典型IRT示例.对于每个学生,我们观察他们是否对他们在考试中回答的问题给出了正确的答案.这给了我们一个观察结果矩阵X,从中我们想要估计每个问题(1)难度参数α和(2)辨别参数β,这样我们也可以估计每个学生潜在能力Y作为他们是否的函数在每个测试问题上得到正确的答案,即α+βX.我可以找到如何在Python中使用MCMC估计这种类型的IRT贝叶斯模型的最好例子就是这个例子.从这个例子中我不明白的是,学生是否在测试问题上得到正确答案的X矩阵进入模型.以下是此代码的略微修改版本,旨在估计每个学生的潜在能力:

#from pylab import * #Pylab will not install with pip so I just loaded numpy itself
from numpy import *
import numpy
from pymc import *
from pymc.Matplot import plot as mplot

numquestions = 300 # number of test items being simulated
numpeople = 10 # number of participants
numthetas = 1 # number of latent proficiency variables

generating = 0
theta_initial = zeros((numthetas, numpeople))
correctness = np.random.randint(2, size= numquestions * numpeople) == 1 #Produces Error
#correctness …
Run Code Online (Sandbox Code Playgroud)

python bayesian pymc

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

贝叶的规则 - 如何计算可能性

给定的是一些数据,data它对应于硬币翻转的二进制序列,其中头部为1,尾部为0.θ是介于0和1之间的值,表示硬币在翻转时产生头部的概率.

如何计算可能性?我依稀记得一个公式,其中:

likelihood = (theta)^(h)*(1-theta)^(1-h) 
Run Code Online (Sandbox Code Playgroud)

其中h如果是头部则为1,如果是尾部则为0.我实现了以下代码:

import numpy as np
(np.prod([theta*1 for i in data if i==1]) * np.prod([1-theta for i in data if i==0]))
Run Code Online (Sandbox Code Playgroud)

这段代码适用于某些情况,但不适用于某些隐藏的情况(所以我不确定它有什么问题).

python statistics numpy probability bayesian

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

从 R 中的 runjags 对象中删除链

我有一个 runjags 对象,它有两条混合得很好的链(链 1 和 3),还有一条混合得很好(链 2)。我怎样才能修剪 runjags 对象以仅包含链 1 和 3?

这是使用 runjags 生成 JAGS 模型的可重现示例(尽管这里的链混合得很好)。

library(runjags)

#generate the data
x <- seq(1,10, by = 0.1)
y <- x + rnorm(length(x))

#write a jags model
j.model = "
model{
#this is the model loop.
for(i in 1:N){
y[i] ~dnorm(y.hat[i], tau)
y.hat[i] <- m*x[i]
}

#priors
m ~ dnorm(0, .0001)
tau <- pow(sigma, -2)
sigma ~ dunif(0, 100)
}
"

#put data in a list.
data = list(y=y, x=x, N=length(y)) …
Run Code Online (Sandbox Code Playgroud)

r bayesian jags runjags rjags

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