2013-03-14 10 views
15

के साथ नमूना द्वारा संभाव्यता घनत्व फ़ंक्शन प्लॉटिंग मैं पर आधारित नमूना घनत्व फ़ंक्शन का अनुमान लगा सकता हूं जो मेरे पास है; वक्र जो हिस्टोग्राम व्यवहार की नकल करता है। मैं के रूप में बड़े आकार के नमूने कर सकते हैं।matplotlib

+0

आपका नमूना क्या है? क्या यह एक वितरण, या वास्तविक डेटा है? – askewchan

+1

मुझे समझ में नहीं आता कि कोई इस सवाल को कैसे वोट दे सकता है ?! मेरा मतलब क्या है ??? – Cupitor

+2

आमतौर पर [SO] लोग उन प्रश्नों को ऊपर उठाएंगे जो तुरंत स्पष्ट होते हैं और पूछताछकर्ता द्वारा अपने स्वयं के प्रश्न का उत्तर देने के कुछ प्रयास भी दिखाते हैं। "आपने क्या कोशिश की है?" आमतौर पर डाउनवॉट्स टिप्पणियों के साथ होते हैं, इसलिए मुझे यकीन नहीं है कि इस मामले में ऐसा क्यों नहीं हुआ। – askewchan

उत्तर

25

आप एक वितरण साजिश करना चाहते हैं, और आप इसे जानते हैं, तो एक समारोह के रूप में यह परिभाषित है, और यह के रूप में इतना साजिश:

import numpy as np 
from matplotlib import pyplot as plt 

def my_dist(x): 
    return np.exp(-x ** 2) 

x = np.arange(-100, 100) 
p = my_dist(x) 
plt.plot(x, p) 
plt.show() 

आप एक के रूप में सटीक वितरण नहीं है, तो विश्लेषणात्मक समारोह, शायद आप एक बड़े नमूना उत्पन्न कर सकते हैं, एक हिस्टोग्राम लेने के लिए और किसी भी तरह डेटा चिकनी: UnivariateSpline च भीतर

import numpy as np 
from scipy.interpolate import UnivariateSpline 
from matplotlib import pyplot as plt 

N = 1000 
n = N//10 
s = np.random.normal(size=N) # generate your data sample with N elements 
p, x = np.histogram(s, bins=n) # bin it into n = N//10 bins 
x = x[:-1] + (x[1] - x[0])/2 # convert bin edges to centers 
f = UnivariateSpline(x, p, s=n) 
plt.plot(x, f(x)) 
plt.show() 

आप को बढ़ाने या s (चौरसाई कारक) कम कर सकते हैं चिकनाई बढ़ाने या घटाने के लिए एकक्शन कॉल। उदाहरण के लिए, आप दोनों को प्राप्त करते हैं: dist to func

+0

जो मेरे मामले में मदद नहीं करता है। मैंने पहले से ही अपना नमूना समारोह लिखा है और यह आकार के नमूने के लिए सटीक नहीं है एक कहने देता है! – Cupitor

+0

तब मुझे लगता है कि आपको अपने प्रश्न को और स्पष्ट होने के लिए संपादित करना चाहिए। यह आपके प्रश्न का उत्तर देता है कि आपको "वितरण है"। – askewchan

+0

धन्यवाद। लेकिन मुझे निम्न त्रुटि मिलती है: वैल्यूएरर बढ़ाएं ("x और y arrays लंबाई के बराबर होना चाहिए" ValueError: x और y arrays इंटरपोलेशन अक्ष के साथ लंबाई में बराबर होना चाहिए। – Cupitor

18

आपको क्या करना है scipy.stats.kde पैकेज से gaussian_kde का उपयोग करना है।

अपने डेटा को देखते हुए आप कुछ इस तरह कर सकते हैं:

from scipy.stats.kde import gaussian_kde 
from numpy import linspace 
# create fake data 
data = randn(1000) 
# this create the kernel, given an array it will estimate the probability over that values 
kde = gaussian_kde(data) 
# these are the values over wich your kernel will be evaluated 
dist_space = linspace(min(data), max(data), 100) 
# plot the results 
plt.plot(dist_space, kde(dist_space)) 

कर्नेल घनत्व होगा पर विन्यस्त किया जा सकता और आसानी के साथ एन आयामी डेटा को संभाल कर सकते हैं। यह पूछताछ द्वारा दी गई साजिश में आप देख सकते हैं कि स्पलीन विचलन से भी बचेंगे।

enter image description here

+0

मैं एक समान समाधान की तलाश में हूं। मेरे पास पहले से ही डेटा-सेट है लेकिन मुझे नहीं पता कि इसका वितरण क्या है, इसलिए मैं पाइथन का उपयोग करके संभाव्यता वितरण फ़ंक्शन प्लॉट करने की कोशिश कर रहा हूं और मुझे यह नहीं पता कि उसे कैसे प्लॉट करना है। उस मामले में किसी भी मदद की सराहना की जाती है। –

+1

@SitzBlogz मान लें कि आपके डेटा-सेट को 'डेटा' कहा जाता है, फिर बस @EnricoGiampieri उत्तर में' डेटा = रैंडन (1000) 'पंक्ति को हटा दें और आप कर चुके हैं! –