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

P(S | W) - >消息是垃圾邮件的概率,因为字W出现在其中.
P(W | S) - >垃圾邮件中出现单词W的概率.
P(W | H) - >在Ham消息中出现字W的概率.
所以要计算P(W | S),以下哪项是正确的:
(垃圾邮件中出现W的次数)/(所有邮件中出现W的总次数)
(垃圾邮件中出现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)对吧?
我的第一篇文章!我在使用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) 我无法获得下面的WinBUGS代码.它适用于普通的先验,但不适用于均匀的先验.单击后显示的错误消息compile是array 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 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) 我正在为一堂课做一些关于性别分类的工作.我一直在使用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中使用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分类?
鉴于此数据集:
颜色 | 尺寸
红色 | 大
白色 | 小的
红色 | 大
红色 | 小的
白色 | 大
红色 | 大
以及以下贝叶斯网络:Color --> Size,我应该找到贝叶斯网络的最大似然参数。估算器是什么?我不确定如何在这里进行,因此将不胜感激任何帮助。
我想用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) 给定的是一些数据,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)
这段代码适用于某些情况,但不适用于某些隐藏的情况(所以我不确定它有什么问题).
我有一个 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)