ホーム » 損失関数

損失関数」カテゴリーアーカイブ

2019 Q2(4)

損失関数の期待値を導出しそれが最小となるパラメータαを求める問題をやりました。

 

コード

数値シミュレーションによりR(α)が最小値になるαを見つけます。

# 2019 Q2(4)  2024.9.16

import numpy as np
import matplotlib.pyplot as plt

# 損失関数 R(α) の定義
def R(alpha):
    return alpha + 2 / alpha - 2

# α の範囲を設定 (0.1 から 3 まで、細かいステップで計算)
alpha_range = np.linspace(0.1, 3, 1000)

# 損失関数 R(α) の計算
R_values = R(alpha_range)

# 最小値を取る α の確認 (numpy の argmin を使って最小値を見つける)
min_index = np.argmin(R_values)
min_alpha = alpha_range[min_index]
min_R = R_values[min_index]

# グラフのプロット
plt.figure(figsize=(8, 6))
plt.plot(alpha_range, R_values, label='R(α)')
plt.axvline(np.sqrt(2), color='red', linestyle='--', label=r'$\alpha = \sqrt{2}$')
plt.scatter(min_alpha, min_R, color='red', zorder=5, label=f'最小値: α={min_alpha:.2f}, R(α)={min_R:.2f}')
plt.xlabel(r'$\alpha$')
plt.ylabel(r'$R(\alpha)$')
plt.title(r'$R(\alpha)$ の最小値確認 (数値シミュレーション)')
plt.legend()
plt.grid(True)
plt.show()

# 最小値の表示
print(f'数値シミュレーションでの最小値 α: {min_alpha}, R(α): {min_R}')
数値シミュレーションでの最小値 α: 1.4150150150150151, R(α): 0.8284275786822475

手計算と近い値になりました。

極値付近が少し平らなので、αの範囲を1.0~2.0に変更し拡大してみます。

import numpy as np
import matplotlib.pyplot as plt

# 損失関数 R(α) の定義
def R(alpha):
    return alpha + 2 / alpha - 2

# α の範囲を 1 から 2 に設定
alpha_range = np.linspace(1, 2, 1000)

# 損失関数 R(α) の計算
R_values = R(alpha_range)

# 最小値を取る α の確認 (numpy の argmin を使って最小値を見つける)
min_index = np.argmin(R_values)
min_alpha = alpha_range[min_index]
min_R = R_values[min_index]

# グラフのプロット
plt.figure(figsize=(8, 6))
plt.plot(alpha_range, R_values, label='R(α)')
plt.axvline(np.sqrt(2), color='red', linestyle='--', label=r'$\alpha = \sqrt{2}$')
plt.scatter(min_alpha, min_R, color='red', zorder=5, label=f'最小値: α={min_alpha:.4f}, R(α)={min_R:.4f}')
plt.xlabel(r'$\alpha$')
plt.ylabel(r'$R(\alpha)$')
plt.title(r'$R(\alpha)$ の最小値確認 (αの範囲: 1 から 2)')
plt.legend()
plt.grid(True)
plt.show()

# 最小値の表示
print(f'数値シミュレーションでの最小値 α: {min_alpha}, R(α): {min_R}')
数値シミュレーションでの最小値 α: 1.4144144144144144, R(α): 0.8284271532679175

最小値が取れていることが分かりました。