Seperti yang saya meningkatkan jumlah pohon di scikit belajar 's GradientBoostingRegressor
, saya mendapatkan prediksi yang lebih negatif, meskipun tidak ada nilai negatif dalam pelatihan saya atau pengujian set. Saya memiliki sekitar 10 fitur, yang sebagian besar adalah biner.
Beberapa parameter yang saya tuning adalah:
- jumlah pohon / iterasi;
- kedalaman belajar;
- dan tingkat belajar.
Persentase nilai negatif tampaknya maks ~ 2%. Kedalaman belajar 1 (tunggul) tampaknya memiliki% nilai negatif terbesar. Persentase ini juga tampaknya meningkat dengan lebih banyak pohon dan tingkat pembelajaran yang lebih kecil. Dataset ini berasal dari salah satu kompetisi taman bermain kaggle.
Kode saya kira-kira seperti:
from sklearn.ensemble import GradientBoostingRegressor
X_train, X_test, y_train, y_test = train_test_split(X, y)
reg = GradientBoostingRegressor(n_estimators=8000, max_depth=1, loss = 'ls', learning_rate = .01)
reg.fit(X_train, y_train)
ypred = reg.predict(X_test)
machine-learning
python
algorithms
scikit-learn
kaggle
pengguna2592989
sumber
sumber
Jawaban:
Dalam model regresi umum (apa saja) dapat berperilaku sewenang-wenang di luar domain yang direntang oleh sampel pelatihan. Secara khusus, mereka bebas untuk mengasumsikan linearitas dari fungsi yang dimodelkan, jadi jika Anda misalnya melatih model regresi dengan poin:
masuk akal untuk membangun model
f(x) = x/10-1
, yang untukx<10
mengembalikan nilai negatif.Hal yang sama berlaku "di antara" titik data Anda, selalu dimungkinkan bahwa karena fungsi yang dianggap famility (yang dapat dimodelkan dengan metode tertentu) Anda akan mendapatkan nilai "dari sampel pelatihan Anda".
Anda dapat memikirkan hal ini dengan cara lain - "apa yang istimewa dari nilai-nilai negatif?", Mengapa Anda merasa keberadaan nilai-nilai negatif aneh (jika tidak disediakan dalam set pelatihan) sementara Anda tidak khawatir dengan keberadaan katakanlah. .. nilai 2131,23? Kecuali dikembangkan sedemikian rupa, tidak ada model yang akan memperlakukan nilai negatif "berbeda" dari yang positif. Ini hanya elemen alami dari nilai-nilai nyata yang dapat dicapai sebagai nilai lainnya.
sumber
Ingat bahwa
GradientBoostingRegressor
(dengan asumsi fungsi kerugian kesalahan kuadrat) berturut-turut cocok pohon regresi untuk residu dari tahap sebelumnya. Sekarang jika pohon pada tahap i memprediksi nilai yang lebih besar dari variabel target untuk contoh pelatihan tertentu, sisa tahap i untuk contoh itu akan menjadi negatif, dan pohon regresi pada tahap i + 1 akan menghadapi nilai target negatif (yang merupakan residu dari tahap i). Karena algoritma peningkatan menambahkan semua pohon ini untuk membuat prediksi akhir, saya percaya ini dapat menjelaskan mengapa Anda mungkin berakhir dengan prediksi negatif, meskipun semua nilai target dalam set pelatihan positif, terutama seperti yang Anda sebutkan bahwa ini terjadi lebih banyak sering kali ketika Anda menambah jumlah pohon.sumber