파이썬에서 커스텀 확률 밀도 함수 정의


20

기존의 파이썬 패키지 (예 : SciPy)를 사용하여 내 확률 밀도 함수 를 정의하는 방법이 있습니까 (예전의 데이터없이 ) 연속 랜덤 변수의 분산을 얻는가?) 물론 SymPy 또는 Sage를 사용하여 기호 기능을 작성하고 작업을 수행 할 수 있지만이 모든 작업을 직접 수행하는 대신 이미 구현 된 패키지를 사용할 수 있는지 궁금합니다.에프(엑스)=에이엑스+


쉬운 방법에 감사드립니다! 이 방법으로 사용자 정의 분포 함수를 구현하는 난수 히스토그램을 어떻게 생성합니까?
Ankur Agrawal

답변:


23

scipy.stats 에서 rv_continuous 클래스 를 서브 클래 싱해야합니다.

import scipy.stats as st

class my_pdf(st.rv_continuous):
    def _pdf(self,x):
        return 3*x**2  # Normalized over its range, in this case [0,1]

my_cv = my_pdf(a=0, b=1, name='my_pdf')

이제 my_cv는 주어진 PDF와 범위 [0,1]의 연속 랜덤 변수입니다.

참고이 예에서 my_pdfmy_cv임의의 이름 (즉 어떤 수 있었다), 그러나있는 _pdf것입니다 하지 임의; 그와 _cdf의 방법이 있습니다 st.rv_continuous작업에 서브 클래 싱 위해서는 덮어해야 그 중 하나.


@GertVdE : def _pdf에서 "self"는 무엇을합니까?
Srivatsan 2016 년

@Srivatsan : Stack Overflow
GertVdE

정규화에 문제가 있습니다. 여기서 정규화 확률 분포 함수 ( 3*x**2, here)를 제공하거나 결과 임의 변수가 잘못된 결과를 생성합니다 ( my_cv.median()예 : 확인 가능 ). 코드를 수정했습니다.
Eric O Lebigot

@EOL "정규화 된"이라는 용어를 사용하는 것이 혼란 스럽습니다. 필요한 것은 함수가 0에 중심을두고 1로 스케일링하는 것입니다. 그러나이 대답은 정규화가 x[0, 1] 범위를 넘어야 함을 암시하는 것 같습니다 . 당신은 명확히 할 수 있습니까?
dbliss

1
아마도 표준 방법은 사용하는 것입니다 my_cv.rvs()(한 size번에 여러 샘플을 얻기 위해 인수를 취할 수 있음 ). 이것이 문서 ( docs.scipy.org/doc/scipy/reference/generated/… ) 에서 추측 한 것 입니다.
Eric O Lebigot

15

sympy.stats를 확인해야합니다. 임의의 변수를 처리하는 인터페이스를 제공합니다. 다음 예제는 X밀도로 단위 간격에 정의 된 임의 변수를 제공합니다.2x

In [1]: from sympy.stats import *
In [2]: x = Symbol('x')
In [3]: X = ContinuousRV(x, 2*x, Interval(0, 1))

In [4]: P(X>.5) 
Out[4]: 0.750000000000000

In [5]: Var(X) # variance
Out[5]: 1/18

In [6]: E(2*cos(X)+X**2) # complex expressions are ok too
Out[6]: -7/2 + 4cos(1) + 4sin(1)

관심이 있다면이 추상화는 상당히 복잡한 조작을 처리 할 수 ​​있습니다.


와우 ... 이거 정말 대단해! 이 공헌에 감사드립니다. 나는 이것과 당신의 블로그를 계속 지켜 볼 것입니다
astrojuanlu
당사 사이트를 사용함과 동시에 당사의 쿠키 정책개인정보 보호정책을 읽고 이해하였음을 인정하는 것으로 간주합니다.
Licensed under cc by-sa 3.0 with attribution required.