2017-01-10 13 views
5

Göndermeden önce çok fazla arama yaptım ve this question buldum, bu da benim sorunum olabilir. Bununla birlikte, cevabın içinde neyin önerildiğini denedim ama ne yazık ki bu durum düzeltilemedi ve ben de yeni bir üye olduğum için daha fazla açıklama istemek için yorum ekleyemedim.2D-girişler, 1D çıkışlı regresyon için scikit-Learn'in Gauss Süreci nasıl doğru kullanılır?

Her neyse, Gauss Sürecini Python'da scikit-öğrenmesi ile başlamak için basit ama gerçek bir durumda kullanmak istiyorum (scikit-learn belgelerinde sağlanan örnekleri kullanarak). X adı verilen bir 2B giriş kümesine (2 parametreden 8 çift) sahibim. 1D-dizi y'da toplanan 8 karşılık gelen çıkışım var. Daha sonra

# Input space 
x1 = np.linspace(x1min, x1max) 
x2 = np.linspace(x2min, x2max) 
x = (np.array([x1, x2])).T 

I GP modeli örneğini, benim eğitim veri (x, y) için uygun ve 1D tahmini yapmak:

# Inputs: 8 points 
X = np.array([[p1, q1],[p1, q2],[p1, q3],[p1, q4],[p2, q1],[p2, q2],[p2, q3],[p2, q4]]) 

# Observations: 8 couples 
y = np.array([r1,r2,r3,r4,r5,r6,r7,r8]) 

Bir giriş test alanına x tanımlandığı

kernel = C(1.0, (1e-3, 1e3)) * RBF([5,5], (1e-2, 1e2)) 
gp = GaussianProcessRegressor(kernel=kernel, n_restarts_optimizer=15) 
gp.fit(X, y) 
y_pred, MSE = gp.predict(x, return_std=True) 
: x benim giriş alanı y_pred

fig = pl.figure() 
ax = fig.add_subplot(111, projection='3d') 
Xp, Yp = np.meshgrid(x1, x2) 
Zp = np.reshape(y_pred,50) 

surf = ax.plot_surface(Xp, Yp, Zp, rstride=1, cstride=1, cmap=cm.jet, 
linewidth=0, antialiased=False) 
pl.show() 

Bu benim elde budur:

Sonra bir 3B grafiğini yapmak RBF[5,5]

Ben ne afiş I benzer böyle bir şey olsun çekirdek parametrelerini değiştirmek

RBF[10,10]

Bu araziler bile uyuşmuyor: got yukarıda belirtilen Orijinal antrenman noktalarından gözlemler ([65.1,37] için düşük yanıt ve [92.3,54] için en yüksek cevap).

2D'deki GP'ler için oldukça yeni (ayrıca Python'u uzun zaman önce başlatmamıştım) bu yüzden burada bir şey kaçırdığımı düşünüyorum ... Herhangi bir cevap yararlı ve büyük bir memnuniyetle karşılandı, teşekkürler!

+0

GPy ve pyGP'leri kullanarak da denedim, ancak sklearn'den biraz daha az belgelendiklerinden, 2B'de de çok uzağa gitmedim. Ama bunlardan birinin hala benim problemim için daha iyi bir seçenek olabileceğini düşünüyorsanız, scikit-öğrenmek yerine, lütfen bana-ve neden! Teşekkürler. – Julie

cevap

1

Ayrıca scikit-learn gaussian işlemi kullanarak oldukça yeni. Ancak biraz çaba gösterdikten sonra, 3 boyutlu bir gauss işlem regresyonunu başarıyla gerçekleştirmeyi başardım. 1-d regresyonun birçok örneği vardır, ancak daha yüksek giriş boyutlarında hiçbir şey yoktur.

Belki de kullandığınız değerleri gösterebilirsiniz.

Bazen girdileri gönderdiğiniz biçimin bazı sorunlar üretebileceğini buldum.

X = np.array([param1, param2]).T 

ve çıktı olarak biçimlendirmek: gibi giriş X biçimlendirmeyi deneyin I anlaşıldığı gibi aynı zamanda

gp.fit(X, y.reshape(-1,1)) 

, uygulama ortalama işlevi m = 0 olduğu varsayılmaktadır. Eğer gerilemeye çalıştığınız çıktı, 0'dan önemli ölçüde farklı bir ortalama değer sunuyorsa, normalleştirmeniz gerekir (muhtemelen probleminizi çözecektir). Parametre alanının standartlaştırılması da yardımcı olacaktır.

İlgili konular