ロゴ ロゴ

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を使いたい…

コメント入力

関連サイト