İçinde TO serisi (1) TO tahminine giriş ve LR'ye giriş CTR öngörücü tıklama modelini eğitmek için LR'yi kullanmaktan bahsettik. LR'nin avantajları doğrusallık ve basitlik, hızlı hız ve kolay hata ayıklamadır, ancak özellik kombinasyonu ve özellik mühendisliği sürecinde çok fazla deneyim gerektirir.
Özellik mühendisliği zor olduğu için otomatik olarak yapılabilir mi? Model basamaklama bir fikir sağlar Tipik bir örnek, LR modelinin özellik kombinasyonu problemini çözmek için Facebook'un 2014 tarihli makalesinde tanıtılan GBDT (Gradient Boost Karar Ağacı) modelidir. Fikir çok basittir.Özellik mühendisliği iki bölüme ayrılmıştır.Özelliklerin bir bölümü bir GBDT modelini eğitmek için kullanılır. GBDT modelinin her bir ağacın yaprak düğüm numarası yeni bir özellik olarak kullanılır ve orijinal özellik setine eklenir ve ardından son modeli eğitmek için LR modeli kullanılır.
GBDT modeli, ağacın bir yoluna karşılık gelen (yaprak düğümleriyle temsil edilen) yüksek sıralı doğrusal olmayan özellik kombinasyonlarını öğrenebilir. Genellikle bazı sürekli değer özellikleri ve küçük bir değer uzayına sahip kategorik özellikler GBDT modeline atılır; geniş bir alana sahip kimlik özellikleri (ürün kimliği gibi) eğitim için LR modelinde bırakılır, yüksek sıralı özellik kombinasyonları ve doğrusal modeller için kullanılabilir Büyük ölçekli seyrek verilerin kolay işlenmesinin avantajı.
Algoritmayı kısaca tanıtalım:
1. GBDT + LR modeli
Öncelikle bu model yeni bir model olmayıp bazı büyük firmaların CTR modellerinde kullanılmıştır.
Şekil, makalede önerilen GBDT + LR birleşik modelidir. GBDT, özelliklerin bir kombinasyonunu birleştirme süreci olarak kabul edilebilir ve son LR, son sınıflandırma (regresyon) modelidir.
1) Veri girişi için, genel özellikler sürekli ve ayrık olacaktır.Ağaç modeli, sürekli özelliklerle uğraşmak için daha uygundur (çevrimiçi sorgulayabilirsiniz).
Seçenek bir:
Sürekli verileri ve ayrık verileri GBDT'ye ayırın ve son olarak yaprakları kodlamak için kullanın ve ardından ayrık ve sürekli değerlerin konumları üzerinde anlaşın.
Bu süreçte, GBDT'yi yalnızca sürekli değerleri kodlamak için kullanırken, ayrık özellikler orijinal tek sabit kodlamayı kullanır ve son olarak bunları birbirine diker. Eksiksiz özellik kodlaması
Seçenek II:
Ayrık özellikler üzerinde GBDT kodlaması gerçekleştirebilir ve ardından bunları birleştirebilir (GBDT + FFM'deki iyileştirmeye bakın) ve ayrık veriler üzerinde yeni istatistikler gerçekleştirebilirsiniz.
Yüksek frekanslı özellikler korunur ve seyrek özellik değerleri filtrelenir, böylece GBDT kodlamayı öğrenmek için kullanılabilir.
Bu, GBDT + FFM'de yapılır, ancak bu ayrık olmayan aykırı değerler aslında onehot şeklinde kodlanabilir ve son katmanda kullanılabilir.
GBDT kombinasyonunu kullanın, ancak ağaçların kombinasyonu tekrarlanır, özelliklerinden biri ağacın farklı katmanlarında görünerek inşaat kombinasyonuna katılmak için FM'den daha iyidir
FFM ile kombinasyon daha derindir.
Kodlamasının sonucu bağlamın bazı niteliklerini içerir. Veri girişi sabit değildir ve farklı giriş yöntemleri kullanılabilir. Yukarıdakiler yalnızca iki karşılaştırmayı listeler
Yaygın yöntem, kodlamak için bir ağaç kullanır.
2. NE (Normalize Entropi) normalize entropi
Değerlendirme için NE (Normalize Entropi) kullanın,
onların arasında
, P farklı eğitim setlerindeki farkı ortadan kaldırmak için eğitim veri setinin tıklama oranıdır, bu formül logloss kaybıdır
Eğitim örneklerinin etkisi yukarıdakilere eklenir (hesaplarken y'nin -1 ve 1 aralığına dikkat etmelisiniz)
Bir değerlendirme indeksi olarak kullanılabilir, ancak bu tür NE'yi daha sonraki makalelerde kullanmak nadirdir. Sahneye göre özel kullanım seçilebilir.
3. Veri tazeliği
Modeli güncellemek için yeni verileri kullanın. Gerçek kullanımda, verilerin dağıtımı dinamiktir ve sabit değildir. Modeli güncellemek için yeni verilerin kullanılması iyi sonuçlar sağlayabilir
Gelir, makale GBDT ağaç modelinin günlük olarak güncellendiğine ve LR modelinin gerçek zamanlı olarak güncellendiğine işaret etti. Modelin doğruluğunu korumak için. Tarihsel veri özellikleri (istatistiksel özellikler)
Verilerin güncelliği hassas değildir, ancak bağlamsal özellikler daha açıktır. Birçok makine öğrenimi modelinde, modelin yeteneğini sağlamak için modelin gerçek zamanlı veya gerçek zamanlıya yakın güncellemeleri vardır.
4. kalibre edin
Bu kalibrasyonun hepsi gerekli değildir.Genel olarak, modeli eğittiğimizde, orijinal örneğin veri dağılımını değiştirecek olan örneği veya negatif örneklemeyi vb. Örnekleyeceğiz ve veri tahmini üzerindeki etki çok zayıf, ancak LR gibi şeyler için Tahmin edilen verileri aldıktan sonra, bu verileri yeni hesaplamalara katılmak için kullanabiliriz ve sapmalar olacaktır. Bu sapmayı çözmek için modelin çıktısının kalibre edilmesi gerekir.
P, model tarafından tahmin edilen pozitif örneğin olasılık değeri ve w, örneklenen oran olduğunda w (orijinal örnekteki pozitif ve negatif oranı) genellikle modelin çıktı değerini normal bir veriye kalibre etmek için bir ondalık sayıdır.
özet:
GDBT + LR, klasik bir TO ve tahmin modeli olarak kabul edilebilir.Birleşik özellikleri öğrenmek için GBDT'nin doğrusal olmama özelliğini kullanır ve özelliklerin ilişkisini öğrenmek için LR'yi kullanır ve son olarak tıklama oranını tahmin eder. Şu anda, LR hala ana akımdır, ancak giriş özelliği kombinasyonu FM, FFM, GBDT, DNN vb. Gibi diğer yöntemler kullanılarak üretilmektedir. Bu nedenle, maksimum etkiyi elde etmek için orijinal verilerin bu modellerle nasıl birleştirileceği hala denenmeli ve farklı senaryolara göre ayarlanmalıdır.
Skitlearn kullanılarak basit bir uygulama yapılır:
# Zayıf sınıflandırıcıların sayısı
n_estimator = 10
# Sınıflandırma verilerini rastgele oluşturun.
X, y = sınıflandırma_ yap (n_örnekler = 80000)
# Test seti ve eğitim setine bölün, oran 0,5'tir
X_train, X_test, y_train, y_test = train_test_split (X, y, test_size = 0.5)
# Eğitim setini iki bölüme ayırın, bir bölüm GBDT modelini eğitmek için kullanılır ve diğer bölüm eğitimli GBDT modeline girilerek GBDT özellikleri oluşturulur ve bunlar daha sonra LR özellikleri olarak kullanılır. Fazla takmayı önlemek için bu iki bölüme ayrılmıştır.
X_train, X_train_lr, y_train, y_train_lr = train_test_split (X_train, y_train, test_size = 0.5)
# GBDT sınıflandırma modelini çağırın.
grd = GradientBoostingClassifier (n_estimators = n_estimator)
# Tek sıcak kodlamayı çağırın.
grd_enc = OneHotEncoder ()
# LR sınıflandırma modelini çağırın.
grd_lm = Lojistik Regresyon ()
'' 'GBDT modelini eğitmek için X_train'i kullanın ve ardından özellikleri oluşturmak için bu modeli kullanın' ''
grd.fit (X_train, y_train)
# tek sıcak kodlayıcıyı takın
grd_enc.fit (grd.apply (X_train))
'' '
Özellikler oluşturmak için eğitimli GBDT modelini kullanın ve ardından özellikleri tek sıcak kodlama yoluyla yeni özellikler olarak LR modeli eğitimine girin.
'' '
grd_lm.fit (grd_enc.transform (grd.apply (X_train_lr)), y_train_lr)
# X_test ile tahminler yapmak için eğitimli LR modelini kullanın
y_pred_grd_lm = grd_lm.predict_proba (grd_enc.transform (grd.apply (X_test)))
# Tahmin sonucuna göre çıktı
fpr_grd_lm, tpr_grd_lm, _ = roc_curve (y_test, y_pred_grd_lm)