45
54

Delete article

Deleted articles cannot be recovered.

Draft of this article would be also deleted.

Are you sure you want to delete this article?

More than 5 years have passed since last update.

ガウシアンフィッティング

Last updated at Posted at 2014-03-24

正規分布とそのフィッティング

すでに何度か登場している線形回帰ではデータの分布にフィットする線の理論式を最小二乗法にて求めました。線形回帰など今までに登場したさまざまな分析の多くで正規分布が仮定されます。

フィッティングに欠かせない手法とも言える最小二乗法は、プロットされたデータを理論式にフィッティングさせることによって理論式中に含まれる定数がいくらであるか、そこからさまざまな情報を得ることができます。たとえば各点にフィットする直線の傾きを求めたいとき、正規分布を仮定する分布の統計量を求めたいときなど色々な場面で使われます。

正規分布 (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
#  ...

フィッティングと可視化

フィッティングは 1 つのメソッドですみます。

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")

image.png

うまくいきました。

最小二乗法を使って工学上などの問題を解析した例などは枚挙に暇がありません。また、正規分布を仮定したモデルでその前提がゆらぐとデータ分析工程が台無しになりますので、確率分布や検定についてよく理解しておくことが大切です。

45
54
0

Register as a new user and use Qiita more conveniently

  1. You get articles that match your needs
  2. You can efficiently read back useful information
  3. You can use dark theme
What you can do with signing up
45
54

Delete article

Deleted articles cannot be recovered.

Draft of this article would be also deleted.

Are you sure you want to delete this article?