質問をすることでしか得られない、回答やアドバイスがある。

15分調べてもわからないことは、質問しよう!

新規登録して質問してみよう
ただいま回答率
85.35%
パラメータ

関数やプログラム実行時に与える設定値をパラメータと呼びます。

機械学習

機械学習は、データからパターンを自動的に発見し、そこから知能的な判断を下すためのコンピューターアルゴリズムを指します。人工知能における課題のひとつです。

Python

Pythonは、コードの読みやすさが特徴的なプログラミング言語の1つです。 強い型付け、動的型付けに対応しており、後方互換性がないバージョン2系とバージョン3系が使用されています。 商用製品の開発にも無料で使用でき、OSだけでなく仮想環境にも対応。Unicodeによる文字列操作をサポートしているため、日本語処理も標準で可能です。

Q&A

解決済

2回答

4589閲覧

scipyで最小値を求めたい

fumi2323

総合スコア2

パラメータ

関数やプログラム実行時に与える設定値をパラメータと呼びます。

機械学習

機械学習は、データからパターンを自動的に発見し、そこから知能的な判断を下すためのコンピューターアルゴリズムを指します。人工知能における課題のひとつです。

Python

Pythonは、コードの読みやすさが特徴的なプログラミング言語の1つです。 強い型付け、動的型付けに対応しており、後方互換性がないバージョン2系とバージョン3系が使用されています。 商用製品の開発にも無料で使用でき、OSだけでなく仮想環境にも対応。Unicodeによる文字列操作をサポートしているため、日本語処理も標準で可能です。

0グッド

0クリップ

投稿2020/07/20 08:34

編集2020/07/21 08:41

前提・実現したいこと

980個の数値を持つ教師データyを用いて数理モデルのパラメータ推定を行いたいと考えています。
推定方法として尤度推定を行いたいのですが、想定と異なる推定値と警告が出力されました。
コードの間違いと改善方法をお教えいただきたいです。

発生している問題・エラーメッセージ

C:\ProgramData\Anaconda3\lib\site-packages\ipykernel_launcher.py:7: RuntimeWarning: overflow encountered in multiply import sys C:\ProgramData\Anaconda3\lib\site-packages\scipy\optimize\optimize.py:597: RuntimeWarning: invalid value encountered in subtract numpy.max(numpy.abs(fsim[0] - fsim[1:])) <= fatol):

該当のソースコード

python

1import numpy as np 2from scipy import optimize 3 4def garch_lik_func(params,y): 5 [z, m, a, b] = params 6 e = y - z 7 h = np.zeros((len(y),1)) 8 h[0] = np.mean(e**2) 9 for i in range(1,len(y)): 10 h[i] = m + b*h[i-1] + a*e[i-1]**2 11 return -np.sum(np.log(h)) 12 13a = [0.02, 0.02, 0.2, 0.7] 14optimize.fmin(garch_lik_func, x0=a, args=(data,))

Warning: Maximum number of function evaluations has been exceeded.
array([0.0052566 , 0.00607713, 0.43743075, 2.08267381])

試したこと

データの問題かと考えて別の1から9の整数列でも同様に行いましたが同様の警告が出力されました。

補足情報(FW/ツールのバージョンなど)

conda version : 4.8.3
Python 3.7.6
scipy 1.4.1

気になる質問をクリップする

クリップした質問は、後からいつでもMYページで確認できます。

またクリップした質問に回答があった際、通知やメールを受け取ることができます。

バッドをするには、ログインかつ

こちらの条件を満たす必要があります。

guest

回答2

0

ベストアンサー

そもそも-logxを最小にしようという風になっていますが、合ってますか??
これを最小にしようとすると、パラメータに縛りがない限りは-logxの値域は実数全体でいくらでも小さくできるので、-∞に飛んでいきますよ。
実際、-np.sum(np.log(h))の値は途中から-infになっています。
こういうのは二乗した値とか、絶対値をつけて評価するものと思いますが。

text

11302.3139240314852 21304.6180770750946 31289.5753397056355 41266.987026416562 51175.7773117981214 61214.4727603996944 71171.732143529844 81103.7383795330775 91086.8842833614253 10974.4404937620448 11948.7669464410262 12745.6919585153726 13765.0776737587316 14588.1419233204124 15172.3427117891615 1644.63329665947677 17-2021.8156571585348 18-1830.2832463782565 19-14538.044522738193 20-60763.0882092356 21-78926.96526574872 22-146469.2935122823 23-142650.2399929438 24-170414.43094623898 25-239148.57532779552 26-269115.07455809327 27-inf 28-inf 29-inf 30-inf 31-inf 32-inf 33-327355.2334501316 34-inf 35-inf 36-inf 37-inf 38-inf 39-345850.06648530264 40-inf 41以下-infが続く

投稿2020/07/22 04:32

編集2020/07/22 04:37
Penpen7

総合スコア698

バッドをするには、ログインかつ

こちらの条件を満たす必要があります。

0

下記の警告は直訳すると「関数の評価回数が最大値を超えた」ということになりますが、要するに収束しなかったということです。

Warning: Maximum number of function evaluations has been exceeded.

収束させるためには

  • 収束条件を甘くする
  • 関数の評価回数の最大値を増やす
  • 初期値を変える

という対処が考えられます。

scipy.optimize.fminの説明を読むと、収束条件はxtolftolで調整可能で、評価回数の最大値はmaxiterで設定可能です。

参考URL:

投稿2020/07/22 03:28

yymmt

総合スコア1615

バッドをするには、ログインかつ

こちらの条件を満たす必要があります。

あなたの回答

tips

太字

斜体

打ち消し線

見出し

引用テキストの挿入

コードの挿入

リンクの挿入

リストの挿入

番号リストの挿入

表の挿入

水平線の挿入

プレビュー

15分調べてもわからないことは
teratailで質問しよう!

ただいまの回答率
85.35%

質問をまとめることで
思考を整理して素早く解決

テンプレート機能で
簡単に質問をまとめる

質問する

関連した質問