我在这里找到了一个类似的项目:用Python进行Twitter的情感分析.但是,我正在研究C#,需要使用一个开源的朴素贝叶斯分类器.除非有人能够阐明我如何利用python贝叶斯分类器来实现相同的目标.有任何想法吗?
我试图找到/找出一个可以更新概率的函数。
假设有三个玩家,他们每个人都从篮子里得到一个水果: ["apple", "orange", "banana"]
我将每个玩家拥有每个水果的概率存储在一个矩阵中(如这张表):
| 苹果 | 橘子 | 香蕉 | |
|---|---|---|---|
| 玩家 1 | 0.3333 | 0.3333 | 0.3333 |
| 玩家 2 | 0.3333 | 0.3333 | 0.3333 |
| 玩家 3 | 0.3333 | 0.3333 | 0.3333 |
该表可以解释为不知道谁拥有什么的人 ( S )的信念。每行和每列的总和为 1.0,因为每个玩家都有一个水果,每个水果都属于其中一个玩家。
我想根据S获得的一些知识更新这些概率。示例信息:
玩家 1做了 X。我们知道玩家 1有 80% 的概率做了 X,如果他有一个苹果。如果他有橙子,则为 50% 。如果他有香蕉,则为 10% 。
这可以写得更简洁[0.8, 0.5, 0.1],让我们称之为reach_probability。
一个相当容易理解的例子是:
probabilities = [
[0.5, 0.5, 0.0],
[0.0, 0.5, 0.5],
[0.5, 0.0, 0.5],
]
# Player 1's
reach_probability = [1.0, 0.0, …Run Code Online (Sandbox Code Playgroud) 使用下面的数据框,我想优化总回报,同时满足某些界限。
d = {'Win':[0,0,1, 0, 0, 1, 0],'Men':[0,1,0, 1, 1, 0, 0], 'Women':[1,0,1, 0, 0, 1,1],'Matches' :[0,5,4, 7, 4, 10,13],
'Odds':[1.58,3.8,1.95, 1.95, 1.62, 1.8, 2.1], 'investment':[0,0,6, 10, 5, 25,0],}
data = pd.DataFrame(d)
Run Code Online (Sandbox Code Playgroud)
我想最大化以下等式:
totalreturn = np.sum(data['Odds'] * data['investment'] * (data['Win'] == 1))
Run Code Online (Sandbox Code Playgroud)
函数应该最大化满足以下边界:
for i in range(len(data)):
investment = data['investment'][i]
C = alpha0 + alpha1*data['Men'] + alpha2 * data['Women'] + alpha3 * data['Matches']
if (lb < investment ) & (investment < ub) & (investment > C) == False:
data['investment'][i] = …Run Code Online (Sandbox Code Playgroud) 我的数据集看起来像这样:
data.flu <- data.frame(chills = c(1,1,1,0,0,0,0,1), runnyNose = c(0,1,0,1,0,1,1,1), headache = c("M", "N", "S", "M", "N", "S", "S", "M"), fever = c(1,0,1,1,0,1,0,1), flu = c(0,1,1,1,0,1,0,1) )
> data.flu
chills runnyNose headache fever flu
1 1 0 M 1 0
2 1 1 N 0 1
3 1 0 S 1 1
4 0 1 M 1 1
5 0 0 N 0 0
6 0 1 S 1 1
7 0 1 S 0 0
8 1 1 M 1 …Run Code Online (Sandbox Code Playgroud) 我有一种仪器可以通过或不通过一系列三次测试.该仪器必须通过所有三项测试才能被认为是成功的.我如何使用贝叶斯推理来查看基于证据传递每个案例的概率?(基于依次通过每个过去测试的工具).
只看第一次测试 - 我从仪器测试的历史记录中了解到这一点.您还可以看到每个测试的接受边界为-3%到+ 3%:

我的假设:
概率相互依赖 - 我们在所有三个测试中都在查看相同的仪器
从这个历史数据我看到通过测试A的概率是P(A)= 0.84,所以失败的是P('A)= 0.16
在不知道任何关于仪器的情况下,一个好的假设是第一次测试通过和失败的等概率 - 假设(H)是仪器通过P(H)= 0.5; 这也给我们失败概率P('H)= 0.5.
根据我的理解,我需要找到P(H)给定数据(D),用贝叶斯术语 - 我会在给定测试A的结果的情况下更新P(H) -
**P(H|D) = P(H) P(D|H) / P(D)** Where:
**P(D) = P(D|H)*P(H) + P(D|’H) P(‘H)**
Run Code Online (Sandbox Code Playgroud)
这是我迷路的地方,我认为这是正确的:
P(H) = P('H) = 0.5 // prob of passing/failing test-A without any information
P(D|H) = 0.84 // prob of passing test-A from historical records
P('D|H) = 0.16 // prob of failing test-A from historical records
P(D) = P(D|H)*P(H) + P(D|’H) P(‘H) = 0.84*0.5 + …Run Code Online (Sandbox Code Playgroud) 我试图在pymc3中创建一个三级逻辑回归模型.有一个顶级,中级和一个单独的级别,其中中级系数是从顶级系数估算的.但是,我很难为中级指定正确的数据结构.
这是我的代码:
with pm.Model() as model:
# Hyperpriors
top_level_tau = pm.HalfNormal('top_level_tau', sd=100.)
mid_level_tau = pm.HalfNormal('mid_level_tau', sd=100.)
# Priors
top_level = pm.Normal('top_level', mu=0., tau=top_level_tau, shape=k_top)
mid_level = [pm.Normal('mid_level_{}'.format(j),
mu=top_level[mid_to_top_idx[j]],
tau=mid_level_tau)
for j in range(k_mid)]
intercept = pm.Normal('intercept', mu=0., sd=100.)
# Model prediction
yhat = pm.invlogit(mid_level[mid_to_bot_idx] + intercept)
# Likelihood
yact = pm.Bernoulli('yact', p=yhat, observed=y)
Run Code Online (Sandbox Code Playgroud)
我收到了错误"only integer arrays with one element can be converted to an index"(第16行),我认为这与mid_level变量是一个列表,而不是一个合适的pymc容器有关.(我也没有在pymc3源代码中看到Container类.)
任何帮助,将不胜感激.
编辑:添加一些模拟数据
y = np.array([0, 1, 0, 1, 0, 0, 0, …Run Code Online (Sandbox Code Playgroud) 我想使用朴素的贝叶斯将文档分类为相对大量的类.我想确认一篇文章中实体名称的提及是否真的是该实体,这取决于该文章是否与该实体已被正确验证的文章类似.
比如说,我们在一篇文章中找到了"通用汽车"的文字.我们有一组数据,其中包含文章和中提到的正确实体.因此,如果我们在新文章中找到"通用汽车",那么它是否属于先前数据中包含已知正版的那类文章提到"通用汽车"与没有提到该实体的文章类别?
(我不是为每个实体创建一个类,并试图将每个新文章分类到每个可能的类中.我已经有一个启发式方法来查找实体名称的合理提及,我只是想验证有限数量的实体的可信度.实体名称提到该方法已经检测到的每篇文章.)
鉴于潜在的类和文章的数量相当大,天真的贝叶斯相对简单,我想在sql中完成整个过程,但我在评分查询时遇到问题...
这是我到目前为止所拥有的:
CREATE TABLE `each_entity_word` (
`word` varchar(20) NOT NULL,
`entity_id` int(10) unsigned NOT NULL,
`word_count` mediumint(8) unsigned NOT NULL,
PRIMARY KEY (`word`, `entity_id`)
);
CREATE TABLE `each_entity_sum` (
`entity_id` int(10) unsigned NOT NULL DEFAULT '0',
`word_count_sum` int(10) unsigned DEFAULT NULL,
`doc_count` mediumint(8) unsigned NOT NULL,
PRIMARY KEY (`entity_id`)
);
CREATE TABLE `total_entity_word` (
`word` varchar(20) NOT NULL,
`word_count` int(10) unsigned NOT NULL,
PRIMARY KEY (`word`)
);
CREATE TABLE `total_entity_sum` (
`word_count_sum` bigint(20) unsigned NOT NULL,
`doc_count` …Run Code Online (Sandbox Code Playgroud) 我正在为Tensorflow(不是Keras或Tflearn)中直接编写的代码搜索超参数调整包.你能提一些建议吗?
optimization machine-learning bayesian hyperparameters tensorflow
我正在学习PyMC3进行贝叶斯建模.您可以使用以下命令创建模型和示例:
import pandas as pd
import pymc3 as pm
# obs is a DataFrame with a single column, containing
# the observed values for variable height
obs = pd.DataFrame(...)
# we create a pymc3 model
with pm.Model() as m:
mu = pm.Normal('mu', mu=178, sd=20)
sigma = pm.Uniform('sigma', lower=0, upper=50)
height = pm.Normal('height', mu=mu, sd=sigma, observed=obs)
trace = pm.sample(1000, tune=1000)
pm.traceplot(trace)
Run Code Online (Sandbox Code Playgroud)
当我检查trace(在这种情况下来自后验概率的1000个样本)时,我注意到创建了2个链:
>>> trace.nchains
2
Run Code Online (Sandbox Code Playgroud)
我阅读了关于PyMC3的教程,并查看了API,但我不清楚链表示什么(在这种情况下,我从后面询问了1000个样本,但我得到了2个链,每个链有1000个来自后面的样本).
链条是否具有相同参数的采样器的不同运行,或者它们是否具有其他一些含义/目的?
我想将权重结合到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)