MSEをsklearnに頼らず利用したい
MSEとは
MSE(Mean Squared Error)とは平均二乗誤差のことで、実際の値(ここではpractical_mean)と予測した値(ここではtheoretical_mean)の差の二乗を試行回数で割った値を指します。詳しくは「平均二乗誤差」とか検索してみてください…
ざっくりとした内容
xからyまでの値をランダムに10個選び、{ (10個の値の平均) – (x+y)/2 }^2を5万回計算する。和が求まったら、5万で割ることでMSEが計算できる。
変数の紹介
・number_trial…試行回数(ここでは5万回)
・number_observation…1回の試行で何個の値を取得するか(ここでは10個)
・theoretical_mean…(最大値+最小値)/ 2
・practical_mean…今回は、ランダムに生成された10個の値の平均
・difference…実際の値と予測した値の差の二乗
・sum_trial…実際の値と予測した値の差の二乗の和
・mse_samplecode…実際の値と予測した値の差の二乗を試行回数で割った値(=MSE)
プログラム
import numpy as np
%pylab inline
def MSE_samplecode(x,y):
number_trial = 50000
number_observation = 10
theoretical_mean = (x+y)/2
sum_trial = 0
for i in range(number_trial):
practical_mean = np.sum([uniform(x,y) for _ in range(number_observation)]) / float(number_observation)
#MSE
difference = (practical_mean - theoretical_mean)**2
sum_trial += difference
mse_samplecode = sum_trial / number_trial
return mse_samplecode
MSE_samplecode(1,5)
出力
0.13362634698524709
コメント
13行目の
[uniform(x,y) for _ in range(number_observation)]
について。
①uniform(x,y)
→ xからyまでの間の値をランダムに出力します。例は以下の通りです。
uniform(1,5)
#出力結果
->1.397119475208929
② for _ in range(number_observation)
→ _ は、変数がないことを表しています。iなどの変数を入力するときは、
for i in range(number_observation)
などと入力します。
感想
あんまり良くMSEを理解していなかったので、良い勉強になりました。
でも、これからプログラムを書くときはsklearnを使いたい…
コメント入力