피팅과 난수 생성에 관한 질문이 있습니다. 우선 I 데이터 요소의 히스토그램을python의 히스토그램에서 다른 histrogram에 맞는 확률 밀도 함수
: 같은
상황이다. 이 히스토그램을 확률 밀도 함수 (예 : 2 자유 매개 변수)로 해석하여 임의의 숫자를 생성하는 데 사용할 수 있으며이 함수를 다른 막대 그래프에 맞게 사용하고 싶습니다.
피팅과 난수 생성에 관한 질문이 있습니다. 우선 I 데이터 요소의 히스토그램을python의 히스토그램에서 다른 histrogram에 맞는 확률 밀도 함수
: 같은
상황이다. 이 히스토그램을 확률 밀도 함수 (예 : 2 자유 매개 변수)로 해석하여 임의의 숫자를 생성하는 데 사용할 수 있으며이 함수를 다른 막대 그래프에 맞게 사용하고 싶습니다.
누적 밀도 함수를 사용하여 임의의 분포에서 임의의 숫자를 생성 할 수 있습니다 (described here).
부드러운 누적 밀도 함수를 생성하기 위해 히스토그램을 사용하는 것은 완전히 사소한 것은 아닙니다. 예를 들어 scipy.interpolate.interp1d()와 같이 보간을 사용하여 저장소의 가운데에있는 값을 구할 수 있으며 저장소와 항목 수가 합리적으로 많은 막대 그래프에서 제대로 작동합니다. 그러나 확률 함수의 꼬리 형태, 즉 최소 빈보다 작거나 가장 큰 빈보다 큰 값을 결정해야합니다. 예를 들어 히스토그램에 가우스를 맞추는 등의 방법으로 분포 가우시안 꼬리를 줄 수 있습니다. 또는 문제에 적합한 다른 꼬리 형태를 사용하거나 단순히 분포를자를 수 있습니다.
예 :이 꼬리를 처리하지 않습니다, 그것은 빈 더 나은 가장자리를 처리 할 수 있지만이 같은 분포 이상의 값을 생성하기 위해 히스토그램을 사용하여 시작하는 것이
import numpy
import scipy.interpolate
import random
import matplotlib.pyplot as pyplot
# create some normally distributed values and make a histogram
a = numpy.random.normal(size=10000)
counts, bins = numpy.histogram(a, bins=100, density=True)
cum_counts = numpy.cumsum(counts)
bin_widths = (bins[1:] - bins[:-1])
# generate more values with same distribution
x = cum_counts*bin_widths
y = bins[1:]
inverse_density_function = scipy.interpolate.interp1d(x, y)
b = numpy.zeros(10000)
for i in range(len(b)):
u = random.uniform(x[0], x[-1])
b[i] = inverse_density_function(u)
# plot both
pyplot.hist(a, 100)
pyplot.hist(b, 100)
pyplot.show()
.
P. 몇 가지 값으로 설명 된 특정 알려진 분포를 맞출 수도 있지만 (위의 질문에서 언급 한 것 같음) 위의 비모수 적 접근은 좀 더 일반적인 목적입니다.
, 빠른 답장을 보내 주셔서 감사합니다, 보간 내 마음에 있었지만, 처음으로 그것은 outliers를 돌볼 수 없으며 또한 실제로는 밀도 함수가 아니라 초기 히스토그램의 복사본이 아닙니다. – madzone
이것은 내 마지막 버전입니다. 부드럽게 작동합니다. 다시 한 번 감사드립니다. 'bins = np.linspace (0, .5, num = 800) counts18, bins = np.histogram (Z_DATA [InData18], bins = bin) x = np.cumsum (counts18) * 1./np. 합계 (counts18) * 1. y = bins [range (len (x) +1)] y = y [1 :] fit = scipy.interpolate.interp1d (x, y) plt.hist (fit (np.random.uniform (데이터, 알파 = 0.3, 대용량 = y) plt.show() '(0, x [-1], len (data))), bins = y) plt.hist – madzone
어쩌면이 questoin을 다시 열고 향상시켜야합니다. –
질문을 이해할 수 없다면 질문이 아니라고 확신 할 수 없습니다. 먼저 이해하려고 노력하십시오. 나는 Saullo에 가입한다. – Geeocode