2016-12-19 38 views
5

, buscikitlearn satır aramayı nasıl uygular? gradyan artırılması üzerinde belgelerin <a href="http://scikit-learn.org/stable/modules/ensemble.html#mathematical-formulation" rel="nofollow noreferrer">this section</a> olarak

Gradyan dik iniş ile sayısal olarak bu optimizasyon problemi çözmek için girişimlerde Arttırılması söyler: en dik iniş yönü mevcut model F_ değerlendirilen zarar işlevinin negatif gradyanı {m-1} herhangi türevlenebilir fonksiyon kaybı hesaplanabilir:

enter image description here

adım lengt

enter image description here

Ben çizgi aramasının amacını anlıyorum ama algoritması kendisi anlamıyorum: s \ gamma_m hat arama özelliğini kullanarak seçilir. source code'u okudum, ancak hala tıklamıyor. Bir açıklama çok takdir edilecektir.

+0

Sorunuz, Degrade Artırma algoritmasının kendisi veya sklearn uygulaması hakkında mı? Algoritma hakkında daha fazla bilgi için wekipedia girişinden (https://en.wikipedia.org/wiki/Gradient_boosting) yararlanabilirsiniz. – hsc

+1

@hsc [Line Search'te wikipedia makalesi] (https://en.wikipedia.org/wiki/Line_search) 'a başvurduysanız daha kullanışlı olurdu. Her iki makaleyi birden çok kez okudum. (Bu noktada, gradyanda, beni bulamayan tek parça olmakla birlikte, gradyanı oldukça iyi kavradım.) – Ben

+1

Belki de http://stats.stackexchange.com bu soru için daha uygun – Sentry

cevap

0

uygulaması GradientBoostingClassifier örneği başlatmak seçtiğiniz hangi kayıp fonksiyonu bağlı (örneğin bu kullanmak, regresyon parçası benzer olmalıdır). Varsayılan kayıp işlevi 'deviance' ve karşılık gelen optimizasyon algoritması here uygulanmaktadır. _update_terminal_region işlevinde, yalnızca bir adımda basit bir Newton yineleme uygulanır.

bu İstediğiniz cevabı var mı?

0

Sana kafa karıştırıcı bulmak şey bu şüpheli: kayıp fonksiyonunun negatif eğimi hesaplar ve olumsuz degrade bir taban tahmincisi neresinde scikit-öğrenme görebilirsiniz. Adım boyutunu bulmaktan _update_terminal_region yöntemi sorumludur, ancak belgede yazılan satır arama minimizasyonu sorununu çözebileceği herhangi bir yeri göremezsiniz. Bir satır arama oluyor bulamıyorum

nedeni sadece parçalı sabit fonksiyonlardır karar ağacı Regresör, özel durum için, optimal çözüm genellikle bilinir, olmasıdır. Örneğin, LeastAbsoluteError kayıp işlevinin _update_terminal_region yöntemine bakarsanız, ağacın yapraklarının y arasındaki farkın ağırlıklı medyan değeri ve söz konusu yaprağın ilgili olduğu örneklerin tahmini değeri verildiğini görürsünüz. . Bu medyan bilinen en uygun çözümdür.

aşağıdaki adımlar gerçekleştirilir yineleme her degrade iniş için, neler olup bittiğine Özetlemek gerekirse:

  1. hesaplayın akım tahmini de kayıp fonksiyonunun negatif gradyan.

  2. negatif bir gradyan ile bir DecisionTreeRegressor monte edin. Bu bağlantı, kaybı azaltmak için iyi bölünmelere sahip bir ağaç üretir.
  3. kaybını en aza indirmek değerlerle DecisionTreeRegressor yapraklarına değerlerini değiştirin. Bunlar genellikle karar ağacının sadece parçalı bir sabit işlev olduğu gerçeğinden yararlanan bazı basit bilinen formüllerden hesaplanır.

Bu yöntem, en az dokümanlardaki gibi iyi olmalı, ancak bazı durumlarda bununla aynı olmayabilir.

0

Yorumlarınızdan, algoritmanın kendisinin belirsiz olduğu anlaşılıyor ve scikitlearn bunu uygulamıyor.

wikipedia makalesinde bulunan notasyon, biraz özensizdir, yalnızca bir noktada değerlendirilen bir işlevle ayırt edilmez. Eğer \hat{y_i} ile F_{m-1}(x_i) değiştirip \hat{y}=F_{m-1}(x) şeyler değerlendirilen bir kısmi türevli kısmi türev yerine kez netleşecek:

enter image description here

Bu aynı zamanda ortadan kaldıracaktır minimizasyonu problemden x_{i} (bir çeşit) ve satır aramasının amacını gösterir - Mevcut öngörüye bağlı olarak ve egzersiz setine bağlı olarak optimize etmek için. Şimdi, fark: Dolayısıyla

enter image description here

sadece minimize ediyoruz: Yani çizgi arama basitçe belli bir serbestlik derecesine optimize

enter image description here

Eğer (doğru eğimi buldum kez yön) - adım büyüklüğü.