标签: bayesian

聚类和贝叶斯分类器Matlab

因此,我正处于下一步的交叉路上,我开始学习并在复杂的数据集上应用一些机器学习算法,现在我已经完成了这项工作.我的计划从一开始就是结合两种可能的分类器,试图建立一个多分类系统.

但这里是我被困的地方.我选择聚类算法(模糊C均值)(在学习一些样本K均值之后)和朴素贝叶斯作为MCS(多分类系统)的两个候选者.

我可以独立使用它们来对数据进行分类,但我正在努力以有意义的方式将两者结合起来.

例如,模糊聚类几乎捕获所有"蓝精灵"攻击,除了通常一个,我不知道为什么它没有抓住这个奇怪的球,但我所知道的是它没有.其中一个集群将由smurf攻击占主导地位,通常我会在其他集群中找到一个蓝精灵.如果我在所有不同的攻击类型(Smurf,普通,海王星......等)上训练贝叶斯分类器并将其应用于其余的群集以试图找到最后一个,那么这就是我遇到问题场景的地方剩下的蓝精灵会有很高的误报率.

我不确定如何继续,我不想将其他攻击带出训练集,但我只想训练贝叶斯分类器来发现"蓝精灵"攻击.目前,它经过培训可以尝试发现所有内容,在这个过程中,我认为(不确定)精确度会下降.

所以这是我在使用朴素贝叶斯分类器时的问题,你如何才能让它只查找smurf并将其他所有内容归类为"其他".

 rows = 1000;
 columns = 6;

 indX = randperm( size(fulldata,1) );
 indX = indX(1:rows)';

 data = fulldata(indX, indY)

 indX1 = randperm( size(fulldata,1) );
 indX1 = indX1(1:rows)';


%% apply normalization method to every cell
%data = zscore(data);

training_data = data;
target_class = labels(indX,:)

class  = classify(test_data,training_data, target_class, 'diaglinear')
confusionmat(target_class,class)
Run Code Online (Sandbox Code Playgroud)

我在想的是手动将target_class所有正常的流量和不是蓝精灵的攻击转换为其他流量.然后我已经知道FCM正确地对除了一个smurf攻击之外的所有类别进行分类,我只需要在剩余的集群上使用朴素的贝叶斯分类器.

例如:

群集1 = 500个smurf攻击(重复此步骤可能会将1000个样本中的"大多数"smurf攻击转移到不同的群集中,因此我必须检查或迭代群集中的最大大小,一旦找到我可以将其从朴素的贝叶斯分类器阶段)

然后我在每个剩余的集群上测试分类器(不知道如何在matlab中进行循环等)所以此刻我必须在处理过程中手动选择它们.

    clusters = 4;
    CM = colormap(jet(clusters));
    options(1) = 12.0;
    options(2) = …
Run Code Online (Sandbox Code Playgroud)

matlab classification cluster-analysis bayesian fuzzy-c-means

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

如何将权重纳入WinBUGS模型的可能性

我想将权重结合到WINBUGS模型brms用权重做的可能性中.

通常的BUGS方法来实现这一目标dnorm并且dpois不起作用dbin.

正如@ paul.buerkner 在这里所说的那样,这是用这样的Stan代码完成的:

vector[N] weights; \\ model weights 
target += weights[n] * neg_binommial_2_log_lpmf(Y[n] | mu[n], shape);
Run Code Online (Sandbox Code Playgroud)

当我在我的BUGS模型中实现这种方法时,我得到下面的详细错误(参见编辑).

以下是数据和模型:

library(R2WinBUGS)
dat <- data.frame(
  A = c(1, 1, 0, 0), B = c(1, 0, 1, 0),
  Pass = c(278, 100, 153, 79), Fail = c(743, 581, 1232, 1731), Weights= c(3, 1, 12, 3))
N <- length(dat$Pass)
case <- dat$Pass
nn <- dat$Fail+dat$Pass
A <- dat$A
B <- dat$B
data …
Run Code Online (Sandbox Code Playgroud)

r bayesian winbugs rstan

9
推荐指数
0
解决办法
353
查看次数

编码自定义似然 Pymc3

我正在努力在 pymc3 中实现具有自定义可能性的线性回归。

我之前在 CrossValidated 上发布过这个问题,建议在此处发布,因为该问题更面向代码(此处已关闭帖子)

假设您有两个自变量 x1、x2 和一个目标变量 y,以及一个称为 delta 的指示变量。

  • 当 delta 为 0 时,似然函数为标准最小二乘
  • 当 delta 为 1 时,仅当目标变量大于预测时,似然函数才是最小二乘贡献

在此输入图像描述

观察到的数据的示例片段:

x_1  x_2     observed_target  
10    1   0   100              
20    2   0   50               
5    -1   1   200             
10   -2   1   100             
Run Code Online (Sandbox Code Playgroud)

有谁知道如何在 pymc3 中实现这一点?作为起点...

model =  pm.Model()
with model as ttf_model:

  intercept = pm.Normal('param_intercept', mu=0, sd=5)
  beta_0 = pm.Normal('param_x1', mu=0, sd=5)
  beta_1 = pm.Normal('param_x2', mu=0, sd=5)
  std = pm.HalfNormal('param_std', beta = 0.5)

  x_1 = pm.Data('var_x1', df['x1'])
  x_2 …
Run Code Online (Sandbox Code Playgroud)

python statistics bayesian pymc3

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

从采样用户名中推断网站用户群的大小的方法

假设您想要估计不公布此信息的站点的用户群的大小.

人们更有可能获得具有不同概率的不同用户名.例如,如果系统上不存在用户名"nick",则可能具有极小的用户群.如果用户名为"starbaby",则可能是一个更大的网站.这似乎是一个简单的贝叶斯问题.

存在的问题是,不同的站点可能具有不同的允许用户名空间.我想,最大的问题是空间等常见字符的合法性.另一个可能会污染先前发布的问题是网站是否会在您想要的网站上显示名称,或者让您自己想出更具创意的名称.

您如何构建跨不同系统的用户名出现频率的训练集?有没有办法使用贝叶斯进行数值估算而不是分类到固定宽度的桶?

math machine-learning probability bayesian collective-intelligence

8
推荐指数
2
解决办法
267
查看次数

想知道贝叶斯分类器是否合适?

我想知道贝叶斯分类器是否适用于一个应用程序,其中相同的短语"冷却"(例如)与某些东西(啤酒,苏打水)相关时"好"但与其他东西相关时"坏"(牛排,披萨,汉堡)?

我想知道的是,如果训练一个贝叶斯分类器("啤酒冷"和"苏打冷"是"好")取消训练它"牛排冷"和"汉堡冷"是"坏").

或者,贝叶斯(正确)可以训练"服务冷"可能是"好"或"坏"取决于它与什么相关联?

我在这里和其他地方找到了很多关于贝叶斯的好信息,但无法确定它是否适合这种类型的应用程序,其中一个好的或坏的短语的答案是"它取决于"?

algorithm bayesian

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

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

朴素贝叶斯分类器和判别分析的准确性是远离的

所以我有两种分类方法,判别分析双线性分类(朴素贝叶斯)和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)

statistics matlab cluster-analysis bayesian naivebayes

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

确定句子是英语的概率的相对简单的方法是什么?

我有许多字符串(字符集合)代表不同语言的句子,例如:

你好,我的名字是乔治.

Das brot ist gut.

...等

我想分配每个分数(从0 ... 1),表明它们是英语句子的可能性.是否有可接受的算法(或Python库)来执行此操作?

注意:我不在乎英语句子的语法是否完美.

python string nlp bayesian

8
推荐指数
2
解决办法
1162
查看次数

WinBUGS Weibull网络元分析

我目前正在对几项临床试验中的生存数据进行荟萃分析.

为此,我使用相同的方法从已发布的分析中获取代码.但是,使用已发布分析中的数据运行此代码时,我无法复制其结果.事实上,结果未能收敛到任何合理的估计.

代码本身(不包括数据)应该是正确的,因为它直接来自作者.我假设问题必须是w /初始值或如何运行采样的参数,但是在玩了很多初始值之后,燃烧,稀释等的长度......我没有得到有意义的结果.

我将不胜感激任何关于如何运行它(初始值等等)的建议,以使其正常运行.或者,如果代码中存在问题或者数据的设置方式与代码不匹配,那么知道这将是有用的.

作为旁注,我正在使用R2WinBUG进行分析,尽管我单独使用WinBUG遇到了同样的问题.

关于该方法的一些额外背景:

这种方法的工作方式是通过使用随机效应估计多个研究中处理之间重新参数化的Weibull分布的形状和尺度参数的差异.

威布尔分布被重新参数化,使得危险率的对数是a + b*log(t),其中a是比例参数,b是形状参数.由此,您可以计算一定间隔内给定数量的患者中给定数量的失败的似然函数.

不幸的是,这篇文章是公开的,但如果你可以访问这里是链接:http: //onlinelibrary.wiley.com/doi/10.1002/jrsm.25/abstract;jsessionid=2BA8F0D9BEF9A33F84975618D33F8DD9.f03t03?userIsAuthenticated=false&deniedAccessCustomisedMessage=

输入模型的变量的快速摘要:

NT:包括的单独治疗数量.

N:主数据集中的行数.NS:研究数量

s:研究数据线对应(编号为1:6)

r:该治疗/研究的间隔失败的患者数量

n:该治疗/研究的间隔开始时有风险的患者数

t:此数据对应的处理(编号1:3)

b:指示哪个治疗是与其他治疗比较的基线治疗(每条线设置为1).

bs:治疗是本研究的对照组

bt:治疗是本研究的研究部门

WinBUGS代码(包括数据):

#Winbugs code for random effects networks meta-analysis model
Model
{
  for (i in 1:N)
  { # N=number of data points in dataset
    #likelihood
    r[i]~ dbin(p[i],n[i])
    p[i]<-1-exp(-h[i]*dt[i]) # hazard h over interval [t,t+dt] # expressed as deaths per unit person-time (e.g. months)
    #random effects model
    log(h[i])<-nu[i]+log(time[i])*theta[i]
    nu[i]<-mu[s[i],1]+delta[s[i],1]*(1-equals(t[i],b[i]))
    theta[i]<-mu[s[i],2]+ delta[s[i],2]*(1-equals(t[i],b[i]))
  }
  for(k in 1 :NS)
  { …
Run Code Online (Sandbox Code Playgroud)

bayesian winbugs r2winbugs winbugs14 survival-analysis

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

从 Pyro 的联合分布中采样

我了解如何从多维分类或多变量正态分布(每列内具有依赖性)进行采样。例如,对于多元分类,可以按如下方式完成:

import pyro as p
import pyro.distributions as d
import torch as t
p.sample("obs1", d.Categorical(logits=logit_pobs1).independent(1), obs=t.t(obs1))
Run Code Online (Sandbox Code Playgroud)

我的问题是,如果有多个发行版,我们该如何做同样的事情?例如,下面的不是我想要的obs1obs2并且obs3是相互独立的。

p.sample("obs1", d.Categorical(logits=logit_pobs1).independent(1), obs=t.t(obs1))
p.sample("obs2", d.Normal(loc=mu_obs2, scale=t.ones(mu_obs2.shape)).independent(1), obs=t.t(obs2))
p.sample("obs3", d.Bernoulli(logits=logit_pobs3).independent(1),obs3)
Run Code Online (Sandbox Code Playgroud)

我想做类似的事情

p.sample("obs", d.joint(d.Bernoulli(...), d.Normal(...), d.Bernoulli(...)).independent(1),obs)
Run Code Online (Sandbox Code Playgroud)

probability bayesian sampling pytorch pyro.ai

8
推荐指数
0
解决办法
881
查看次数