가우시안 피팅
정규 분포와 그 피팅
벌써 몇번이나 등장하고 있다 선형 회귀 에서는 데이터의 분포에 피트하는 선의 이론식을 최소 제곱법으로 구했습니다. 선형 회귀 등 지금까지 등장 다른 분석의 많은 정규 분포를 가정 합니다.
피팅에 빼놓을 수 없는 수법이라고도 할 수 있는 최소 제곱법은, 플롯된 데이터를 이론식에 피팅시킴으로써 이론식 중에 포함되는 정수가 얼마인지, 거기로부터 다양한 정보를 얻을 수 있습니다. 예를 들어 각 점에 맞는 직선의 기울기를 구하고 싶을 때, 정규 분포를 가정하는 분포의 통계량을 구하고 싶을 때 등 다양한 장면에서 사용됩니다.
정규 분포(normal distribution)는 또 이름을 가우스 분포(Gaussian distribution)라고 하며, 평균값 부근에 피크가 집적되는 데이터의 분포를 나타내는 연속 변수에 관한 확률 분포인 것은 과거 기사 에서도 설명했습니다. 정규 분포에 대한 근사 곡선(피팅 곡선)의 함수를 구하는 것을 가우시안 피팅이라고 합니다. 예를 들어 SciPy 의 강력한 수학 함수를 구사함으로써 가우시안 피팅을 쉽게 실현할 수 있습니다.
정규 분포에 근사한 샘플을 얻는다.
우선은 정규 분포에 근사한 샘플을 구합니다. 다음과 같이 100을 평균으로 500개의 데이터를 생성합니다.
from scipy.stats import norm
import numpy as np
import matplotlib.pyplot as plt
import pylab as plb
# 正規分布に近似したサンプルを得る
# 平均は 100 、標準偏差を 1 、サンプル数を 500 とする
sample = norm.rvs(loc=100,scale=1,size=500)
print (sample) # =>
#[ 101.02975418 99.95689958 100.8338816 99.32725219 101.50090014
# 99.29039034 101.64895275 100.45222206 100.22525394 98.8036744
# 100.73576941 99.32705948 100.52278215 102.38383015 98.28409264
# 99.22632512 100.84625978 99.69653993 100.9957202 97.97846995
# 99.49731157 100.89595798 101.3705089 101.15367469 100.26415751
# 99.14143516 100.21385338 99.69883406 99.68494407 100.70380005
# 100.73544699 100.3434308 99.50291518 99.61483734 100.92201666
# 100.98639356 100.36362462 98.39298021 98.39137284 101.54821395
# 100.2748115 100.78672853 99.79335862 98.8123562 100.57942641
# 100.03497218 99.98368219 100.45979578 99.32342998 98.08908529
# ...
피팅 및 시각화
피팅은 한 가지 방법입니다.
param = norm.fit(sample)
print (param)
# => (99.92158820017579, 1.0339291481971331)
파라미터가 구해졌으므로 나머지는 이것을 플롯하면 OK입니다.
x = np.linspace(95,105,100)
pdf_fitted = norm.pdf(x,loc=param[0], scale=param[1])
pdf = norm.pdf(x)
plt.figure
plt.title('Normal distribution')
plt.plot(x, pdf_fitted, 'r-', x,pdf, 'b-')
plt.hist(sample, normed=1, alpha=.3)
plt.show()
plt.savefig("image.png")
잘 작동했습니다.
최소 제곱법을 사용하여 공학상 등의 문제를 해석한 예 등은 매거에 여가가 없습니다. 또, 정규 분포를 가정한 모델로 그 전제가 흔들리면 데이터 분석 공정이 망가지기 때문에, 확률 분포나 검정에 대해서 잘 이해해 두는 것이 중요합니다.
Reference
이 문제에 관하여(가우시안 피팅), 우리는 이곳에서 더 많은 자료를 발견하고 링크를 클릭하여 보았다
https://qiita.com/ynakayama/items/40272961bd43f63e6054
텍스트를 자유롭게 공유하거나 복사할 수 있습니다.하지만 이 문서의 URL은 참조 URL로 남겨 두십시오.
우수한 개발자 콘텐츠 발견에 전념
(Collection and Share based on the CC Protocol.)
from scipy.stats import norm
import numpy as np
import matplotlib.pyplot as plt
import pylab as plb
# 正規分布に近似したサンプルを得る
# 平均は 100 、標準偏差を 1 、サンプル数を 500 とする
sample = norm.rvs(loc=100,scale=1,size=500)
print (sample) # =>
#[ 101.02975418 99.95689958 100.8338816 99.32725219 101.50090014
# 99.29039034 101.64895275 100.45222206 100.22525394 98.8036744
# 100.73576941 99.32705948 100.52278215 102.38383015 98.28409264
# 99.22632512 100.84625978 99.69653993 100.9957202 97.97846995
# 99.49731157 100.89595798 101.3705089 101.15367469 100.26415751
# 99.14143516 100.21385338 99.69883406 99.68494407 100.70380005
# 100.73544699 100.3434308 99.50291518 99.61483734 100.92201666
# 100.98639356 100.36362462 98.39298021 98.39137284 101.54821395
# 100.2748115 100.78672853 99.79335862 98.8123562 100.57942641
# 100.03497218 99.98368219 100.45979578 99.32342998 98.08908529
# ...
param = norm.fit(sample)
print (param)
# => (99.92158820017579, 1.0339291481971331)
x = np.linspace(95,105,100)
pdf_fitted = norm.pdf(x,loc=param[0], scale=param[1])
pdf = norm.pdf(x)
plt.figure
plt.title('Normal distribution')
plt.plot(x, pdf_fitted, 'r-', x,pdf, 'b-')
plt.hist(sample, normed=1, alpha=.3)
plt.show()
plt.savefig("image.png")
Reference
이 문제에 관하여(가우시안 피팅), 우리는 이곳에서 더 많은 자료를 발견하고 링크를 클릭하여 보았다 https://qiita.com/ynakayama/items/40272961bd43f63e6054텍스트를 자유롭게 공유하거나 복사할 수 있습니다.하지만 이 문서의 URL은 참조 URL로 남겨 두십시오.
우수한 개발자 콘텐츠 발견에 전념 (Collection and Share based on the CC Protocol.)