পাইথনে কাস্টম সম্ভাব্যতা ঘনত্ব ফাংশন সংজ্ঞায়িত করুন


20

আমার নিজস্ব সম্ভাব্যতা ঘনত্বের কার্যকারিতা সংজ্ঞায়িত করার জন্য কিছু প্রতিষ্ঠিত পাইথন প্যাকেজ (উদাহরণস্বরূপ SciPy) ব্যবহার করে কোনও উপায় নেই (কোনও পূর্বের তথ্য ছাড়াই, কেবল ), সুতরাং আমি তার সাথে গণনা করতে পারি (যেমন প্রাপ্তি হিসাবে) অবিচ্ছিন্ন র্যান্ডম ভেরিয়েবলের বৈকল্পিক)? অবশ্যই আমি বলতে পারি, সিমপাই বা সেজ, একটি প্রতীকী ফাংশন তৈরি করতে এবং অপারেশনগুলি করতে পারি, তবে আমি ভাবছি যে এই সমস্ত কাজটি নিজে করার পরিবর্তে আমি ইতিমধ্যে বাস্তবায়িত প্যাকেজটি ব্যবহার করতে পারি কিনা তা ভেবে ভাবছি।f(x)=ax+b


একটি সহজ উপায় জন্য ধন্যবাদ! আপনি কীভাবে কাস্টম ডিস্ট্রিবিউশন ফাংশনটি সংজ্ঞায়িত করার জন্য এলোমেলো সংখ্যার একটি হিস্টগ্রাম তৈরি করবেন?
অঙ্কুর অগ্রবাল

উত্তর:


23

আপনাকে scvy.statsrv_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যা সাবক্লাসিংয়ের কাজ করার জন্য অবশ্যই ওভাররাইট করা উচিত।


@ গ্রেটভিডিই: ডিএফ _পিডিএফ "স্ব" কী করে ??
শ্রীবতসান


সাধারণীকরণের ক্ষেত্রে এখানে একটি সমস্যা রয়েছে: আপনার একটি স্বাভাবিক সম্ভাব্যতা বিতরণ ফাংশন ( 3*x**2, এখানে) দেওয়া বা ফলস্বরূপ এলোমেলো ভেরিয়েবলের ভুল ফল দেওয়া উচিত ( my_cv.median()উদাহরণস্বরূপ আপনি পরীক্ষা করে দেখতে পারেন )। আমি কোডটি ঠিক করে দিয়েছি।
এরিক হে লেবিগোট

@ ইওল ​​আমি আপনার "নরমালাইজড" শব্দটি বিভ্রান্তিকর ব্যবহারের সন্ধান করছি। আমার বিশ্বাস, ফাংশনটি 0 এবং কেন্দ্রীয় 1 করার জন্য যা প্রয়োজন তা কিন্তু এটির উত্তরটি বোঝা যাচ্ছে যে স্বাভাবিককরণের x[0, 1] এর সীমার মধ্যে হওয়া দরকার । আপনি কি স্পষ্ট করতে পারেন?
dbliss

1
হতে পারে স্ট্যান্ডার্ড উপায়টি ব্যবহার করা my_cv.rvs()(যা একযোগে sizeএকাধিক নমুনা পাওয়ার জন্য যুক্তি নিতে পারে)। ডকুমেন্টেশন ( ডকস.স্কিপি.আর / ডক / স্কিপি / রেফারেন্স / জেনারেটেড /… ) থেকে এটিই আমি অনুমান করি ।
এরিক হে লেবিগোট

15

আপনার সিম্পি.স্ট্যাটগুলি পরীক্ষা করা উচিত। এটি এলোমেলো ভেরিয়েবলগুলি মোকাবেলা করার জন্য একটি ইন্টারফেস সরবরাহ করে। নিম্নলিখিত উদাহরণটি 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)

আপনি যদি আগ্রহী হন তবে এই বিমূর্ততাটি বেশ কয়েকটি জটিল জটিল হেরফের পরিচালনা করতে পারে।


বাহ ... এটা ঠিক দুর্দান্ত! এই অবদানের জন্য আপনাকে অনেক ধন্যবাদ। আমি এটি এবং আপনার ব্লগে নজর
রাখব
আমাদের সাইট ব্যবহার করে, আপনি স্বীকার করেছেন যে আপনি আমাদের কুকি নীতি এবং গোপনীয়তা নীতিটি পড়েছেন এবং বুঝতে পেরেছেন ।
Licensed under cc by-sa 3.0 with attribution required.