标签: probability

生成泊松和二项式随机数的算法?

我一直在四处寻找,但我不知道该怎么办.

我发现这个页面在最后一段中说:

使用这个简单的方法得到一个从泊松分布中取得的随机数的简单生成器:如果x 1,x 2,...是一个在0和1之间均匀分布的随机数序列,k是第一个整数,乘积x 1 ·x 2 ·...·x k + 1 <e

我发现了另一个描述如何生成二项式数的页面,但我认为它使用的是泊松生成的近似值,这对我没有帮助.

例如,考虑二项式随机数.二项式随机数是硬币的N次投掷中的头数,在任何单次投掷中具有头部的概率p.如果在区间(0,1)上生成N个均匀随机数并计算小于p的数,则计数是具有参数N和p的二项式随机数.

我知道有库可以做到这一点,但我不能使用它们,只能使用语言提供的标准统一生成器(在本例中为java).

java random math probability poisson

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

使用matplotlib通过样本绘制概率密度函数

我想根据我的样本绘制概率密度函数的近似值; 模拟直方图行为的曲线.我可以提供我想要的样品.

python probability matplotlib histogram

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

什么是概率数据结构?

我已经阅读过像bloom过滤器和跳过列表这样的数据结构.

概率数据结构的共同特征是什么?它们用于什么?

algorithm probability data-structures

20
推荐指数
3
解决办法
9158
查看次数

从numpy/scipy中的小对数概率向量中抽取多项式

numpy/scipy中是否有一个函数可以让你从一个小的日志概率向量中采样多项式,而不会丢失精度?例:

# sample element randomly from these log probabilities
l = [-900, -1680]
Run Code Online (Sandbox Code Playgroud)

由于下溢,天真的方法失败了:

import scipy
import numpy as np
# this makes a all zeroes
a = np.exp(l) / scipy.misc.logsumexp(l)
r = np.random.multinomial(1, a)
Run Code Online (Sandbox Code Playgroud)

这是一次尝试:

def s(l):
    m = np.max(l)
    norm = m + np.log(np.sum(np.exp(l - m)))
    p = np.exp(l - norm)
    return np.where(np.random.multinomial(1, p) == 1)[0][0]
Run Code Online (Sandbox Code Playgroud)

这是最好/最快的方法,可以np.exp()在最后一步避免吗?

python precision numpy probability scipy

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

排列组合访谈

这是一个很好的,因为它是非常直观的:

想象一下,一个装满球的骨灰盒,其中三分之二是一种颜色,三分之一是另一种颜色.一个人从瓮中抽出5个球,发现4个是红色的,1个是白色的.另一个人抽出20个球,发现12个是红色的,8个是白色的.两个人中哪一个应该更有信心,瓮包含三分之二的红球和三分之一的白球,而不是相反?每个人应该承担多少赔率?

我知道正确的答案,但也许我没有得到赔率计算.谁能解释一下?

math probability bayesian

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

结合朴素贝叶斯垃圾邮件过滤中的个体概率

我目前正试图通过分析我积累的语料库来生成垃圾邮件过滤器.

我正在使用维基百科条目http://en.wikipedia.org/wiki/Bayesian_spam_filtering来开发我的分类代码.

我已经实现了代码来计算消息是垃圾邮件的概率,因为它包含一个特定的单词,通过从wiki实现以下公式:

pr(S | W)=(pr(W | S)*pr(S))/(pr(W | S)*pr(S)+ pr(W | H)*pr(H))

我的PHP代码:

public function pSpaminess($word)
{
    $ps = $this->pContentIsSpam();
    $ph = $this->pContentIsHam();
    $pws = $this->pWordInSpam($word);
    $pwh = $this->pWordInHam($word);
    $psw = ($pws * $ps) / ($pws * $ps + $pwh * $ph);
    return $psw;
}
Run Code Online (Sandbox Code Playgroud)

根据组合个体概率部分,我实现了代码,以组合测试消息中所有唯一单词的概率来确定垃圾邮件.

从维基公式:

P =(P1*PN)/((P 1*PN)+(1-P)(1-PN))

我的PHP代码:

public function predict($content)
{
    $words = $this->tokenize($content);
    $pProducts = 1;
    $pSums = 1;
    foreach($words as $word)
    {
        $p = $this->pSpaminess($word);
        echo "$word: $p\n";
        $pProducts *= $p;
        $pSums *= (1 - $p);
    }
    return $pProducts / ($pProducts + $pSums);
} …
Run Code Online (Sandbox Code Playgroud)

php probability spam-prevention

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

计算两个列表之间的相似性

编辑:因为每个人都感到困惑,我想简化我的问题.我有两个有序列表.现在,我只想计算一个列表与另一个列表的相似程度.

例如,

1,7,4,5,8,9
1,7,5,4,9,6
Run Code Online (Sandbox Code Playgroud)

这两个列表之间的相似性的良好衡量标准是什么,以便顺序很重要.例如,我们应该惩罚相似性,因为在这两个列表中交换了4,5?

我有2个系统.一个最先进的系统和我实施的一个系统.给定查询,两个系统都返回排序的文档列表.现在,我想比较我的系统和"最先进的系统"之间的相似性,以便衡量我的系统的正确性.请注意,文档的顺序很重要,因为我们正在讨论排名系统.有没有人知道任何可以帮助我找到这两个列表之间相似性的措施.

algorithm statistics search information-retrieval probability

19
推荐指数
2
解决办法
7561
查看次数

计算滚动某个数字的方式数

我是一名高中计算机科学专业的学生,​​今天我遇到了一个问题:

节目描述:骰子玩家有一种信念,即投掷三个骰子十分比一个骰子更容易获得.你能写一个证明或反驳这种信念的程序吗?

让计算机计算所有可能的方式可以抛出三个骰子:1 + 1 + 1,1 + 1 + 2,1 + 1 + 3等.将这些可能性加起来,看看有多少给出九个结果,多少给十.如果更多给十,那么信念就会得到证实.

我很快就制定了一个强力解决方案

int sum,tens,nines;
    tens=nines=0;

    for(int i=1;i<=6;i++){
        for(int j=1;j<=6;j++){
            for(int k=1;k<=6;k++){
                sum=i+j+k;
                //Ternary operators are fun!
                tens+=((sum==10)?1:0);
                nines+=((sum==9)?1:0);
            }
        }

    }
    System.out.println("There are "+tens+" ways to roll a 10");
    System.out.println("There are "+nines+" ways to roll a 9");
Run Code Online (Sandbox Code Playgroud)

哪个工作得很好,蛮力解决方案就是老师要我们做的事情.但是,它不适合,我试图找到一种方法,使算法可以计算的方式来推出数Ñ骰子得到一个具体的数字.因此,我开始生成用n个骰子获得每个总和的方法的数量.使用1个模具,每个模具显然有1个解决方案.然后我通过蛮力计算了2和3个骰子的组合.这些是两个:

有1种方法可以滚动2种
有2种方式可以滚动3种
有3种方式可以滚动4种
有4种方式可以滚动5种
有5种方式可以滚动6种
有6种方式可以滚动7种
有5种滚动方式8滚动方式
有4种方式滚动方式
有3种方式
有2种滚动方式有11
种滚动方式有1种方式

这看起来很简单; 它可以用简单的线性绝对值函数计算.但事情变得越来越棘手.有3:

有1种方法可以滚动3种
有3种方式可以滚动4种
有6种方式可以滚动5种
有10种方式可以滚动6种
有15种方式可以滚动7种
有21种方式可以滚动8
种滚动的25种方式9
有27种方式滚动10
种滚动方式有27种方式
有25种方式滚动12
种滚动方式有21种方式有13 …

java algorithm probability combinatorics

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

scikit-learn LogisticRegression.predict_proba的返回值

LogisticRegression.predict_proba功能究竟返回了什么?

在我的例子中,我得到这样的结果:

[[  4.65761066e-03   9.95342389e-01]
 [  9.75851270e-01   2.41487300e-02]
 [  9.99983374e-01   1.66258341e-05]]
Run Code Online (Sandbox Code Playgroud)

从其他计算中,我知道,使用sigmoid函数,第二列是概率.该文件说,第一列是n_samples,但那是不可能的,因为我的样品的评价,这是文字和数字没有.文档还说,第二列是n_classes.这当然不可能,因为我只有两个类(即+1-1),并且该函数应该是关于计算真正属于类的样本的概率,而不是类本身.

真正的第一列是什么?它为什么存在?

python machine-learning probability scikit-learn logistic-regression

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

拟合分布,拟合优度,p值.用Scipy(Python)可以做到这一点吗?

简介:我是生物信息学家.在我对所有人类基因(约20 000)进行的分析中,我搜索特定的短序列基序,以检查每个基因中出现这个基序的次数.

基因以四个字母(A,T,G,C)的线性序列"书写".例如:CGTAGGGGGTTTAC ......这是遗传密码的四个字母的字母表,就像每个细胞的秘密语言一样,它就是DNA实际存储信息的方式.

我怀疑在一些基因中频繁重复特定的短基序列(AGTGGAC)在细胞的特定生化过程中是至关重要的.由于基序本身非常短,因此用计算工具很难区分基因中的真实功能性实例和偶然看起来相似的实例.为了避免这个问题,我得到了所有基因的序列并连接成一个字符串并进行了改组.存储每个原始基因的长度.然后,对于每个原始序列长度,通过从连接序列中随机重复地挑选A或T或G或C并将其转移到随机序列来构建随机序列.以这种方式,得到的随机序列组具有相同的长度分布,以及总体A,T,G,C组成.然后我在这些随机序列中搜索主题.我将此程序置于1000次并对结果取平均值.

15000个不含给定基序的基因5000个基因含有1个基序3000个基因,含有2个基序1000个含有3个基序的基因... 1个含有6个基序的基因

因此,即使经过1000次真正遗传密码的随机化,也没有任何基因具有超过6个基序.但是在真正的遗传密码中,有一些基因含有超过20个基序的出现,这表明这些重复可能是有效的,并且它不可能通过纯粹的机会找到它们如此丰富.

问题:我想知道找到一个基因的可能性,假设我的分布中出现了20个基序.所以我想知道偶然发现这样一个基因的可能性.我想在Python中实现它,但我不知道如何.

我可以在Python中进行这样的分析吗?

任何帮助,将不胜感激.

python statistics numpy probability scipy

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