Gürültü varlığında gerçek dünya verilerine bir dizi parametreyi sığdırmayı denemek için scipy.optimize.leastsq kullanıyorum. Amaca yönelik işlev, zaman zaman, mini paketin içinden NaN'ler ile çağrılır. Bu scipy.optimize.leastsq beklenen davranış mı? Bu durumda NaN tortularını geri döndürmekten daha iyi bir seçenek var mı?scipy.optimize.leastsq, NaN
import scipy.optimize
import numpy as np
xF = np.array([1.0, 2.0, 3.0, 4.0]) # Target value for fit
NOISE_LEVEL = 1e-6 # The random noise level
RETURN_LEN = 1000 # The objective function return vector length
def func(x):
if np.isnan(np.sum(x)):
raise ValueError('Invalid x: %s' % x)
v = np.random.rand(RETURN_LEN) * NOISE_LEVEL
v[:len(x)] += xF - x
return v
iteration = 0
while (1):
iteration += 1
x = np.zeros(len(xF))
y, cov = scipy.optimize.leastsq(func, x)
print('%04d %s' % (iteration, y))
Jakobiyeni sayısal bilgisayarlı ediliyor:
Aşağıdaki kod davranışı gösterir. Üretim kodunda, optimizasyon normalde başlangıç tahmininin çok iyi olduğu durumlar dışında çalışır, yüzey aşırı derecede düzdür ve gürültü, Jacobian'ı sayısal olarak hesaplamak için kullanılan deltaları alt eder. Bu durumda, hedef fonksiyonun kalıntıları, yukarıdaki kod örneği gibi rastgele bir gürültü gibi görünür ve optimizasyonun yakınsamasını beklemezdim.
Bu kod örneğinde, küçük NOISE_LEVEL değerleri (< 1e-10) her zaman birleşir. 1e-6'da, ValueError tipik olarak birkaç yüz denemede atılır.
v = np.empty(RETURN_LEN)
v.fill(np.nan)
return v
Bu çözüm kirli ise etkili görünmektedir:
olası bir çözüm gibi, bir yüksek ceza kalıntı (NaN veya INF olarak) döndürmektir. NaN'leri ilk etapta önlemek için daha iyi alternatifler veya yollar?
Bu davranış 2.7.9 x32
görünüyor NaNlerde. Bu, optimize edicinin güvenilir sonuçlar sağlayamadığının güçlü bir göstergesidir. Bu genellikle optimizasyon probleminin yeniden oluşturulmasını, ek kısıtlamalar getirerek, daha az gösterişli hale getirilmesini gerektirir. Belki de kısıtlı bir optimizer (https://docs.scipy.org/doc/scipy/reference/tutorial/optimize.html#constrained-minimization-of-multivariate-scalar-functions-minimize) kullanmak olası bir çözüm olabilir. Ayrıca fesih koşullarının gevşetilmesi yardımcı olabilir. – Dietrich