पाइथन में कस्टम संभाव्यता घनत्व फ़ंक्शन को परिभाषित करें


20

वहाँ एक तरीका है, कुछ स्थापित पायथन पैकेज (जैसे SciPy) का उपयोग करके अपने स्वयं के संभाव्यता घनत्व फ़ंक्शन (किसी भी पूर्व डेटा के बिना, बस ) को परिभाषित करने के लिए , इसलिए मैं इसके साथ गणना कर सकता हूं (जैसे निरंतर यादृच्छिक चर का विचरण प्राप्त करना)? बेशक, मैं कह सकता हूं, सिम्पी या ऋषि, एक प्रतीकात्मक कार्य बना सकते हैं और संचालन कर सकते हैं, लेकिन मैं सोच रहा हूं कि क्या यह सब काम खुद करने के बजाय मैं पहले से लागू पैकेज का उपयोग कर सकता हूं।(एक्स)=एक्स+


एक आसान तरीका के लिए धन्यवाद! आप कस्टम वितरण फ़ंक्शन को परिभाषित करने के इस तरीके को लागू करने वाले यादृच्छिक संख्याओं का एक हिस्टोग्राम कैसे उत्पन्न करते हैं?
अंकुर अग्रवाल

जवाबों:


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 दिए गए पीडीएफ और रेंज के साथ एक निरंतर यादृच्छिक चर है [0,1]

ध्यान दें कि इस उदाहरण में my_pdfऔर my_cvमनमाने ढंग से नाम हैं (जो कुछ भी हो सकता था), लेकिन _pdfहै नहीं मनमाना; यह एक _cdfतरीका है st.rv_continuousजिसमें काम करने के लिए उपवर्ग के क्रम में ओवरराइट किया जाना चाहिए।


@GertVdE: डीईएफ़डी क्या करता है में "स्व" क्या करता है ??
श्रीवत्स


सामान्यीकरण के साथ एक समस्या है, यहां आपको एक सामान्यीकृत संभाव्यता वितरण फ़ंक्शन ( 3*x**2यहां,), या परिणामस्वरूप यादृच्छिक चर पैदावार गलत परिणाम देने की आवश्यकता है (आप my_cv.median()उदाहरण के लिए, जांच कर सकते हैं )। मैंने कोड तय किया।
एरिक ओ लेबिगॉट

@ ईओएल मुझे "सामान्यीकृत" शब्द के आपके उपयोग को भ्रमित करने वाला लगता है। मुझे इसकी आवश्यकता है, मेरा मानना ​​है कि यह फ़ंक्शन 0 पर केंद्रित है और इसे 1. पर स्केल किया गया है, लेकिन इसका उत्तर यह प्रतीत होता है कि सामान्यीकरण को x[0, 1] की सीमा से अधिक होना चाहिए । क्या आप स्पष्ट कर सकते हो?
dbliss

1
शायद मानक तरीका उपयोग करना है my_cv.rvs()(जो एक बार sizeमें कई नमूने प्राप्त करने के लिए एक तर्क ले सकता है )। यह मैं दस्तावेज़ीकरण ( docs.scipy.org/doc/scipy/reference/generated/… ) से अनुमान लगाता हूं
एरिक ओ लेबिगॉट

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)

यदि आप रुचि रखते हैं तो यह अमूर्त कुछ काफी जटिल जोड़तोड़ को संभाल सकता है।


वाह ... यह सिर्फ भयानक है! इस योगदान के लिए बहुत-बहुत धन्यवाद। मैं इस और आपके ब्लॉग पर नजर
रखूंगा
हमारी साइट का प्रयोग करके, आप स्वीकार करते हैं कि आपने हमारी Cookie Policy और निजता नीति को पढ़ और समझा लिया है।
Licensed under cc by-sa 3.0 with attribution required.