Xgboost: Apa sebenarnya yang dilakukan gblinear+reg:linear? Dan pertanyaan lainnya

Dibuat pada 24 Mei 2015  ·  12Komentar  ·  Sumber: dmlc/xgboost

Hai,

Saya mulai menemukan kekuatan xgboost dan karenanya bermain-main dengan kumpulan data demo (kumpulan data Boston dari sklearn.datasets sekarang).

Jika saya memahami dengan benar parameternya, dengan memilih:

plst=[('silent', 1),
 ('eval_metric', 'rmse'),
 ('nthread', 1),
 ('objective', 'reg:linear'),
 ('eta', 1),
 ('booster', 'gblinear'),
 ('lambda', 0),
 ('alpha', 10)]

Saya harus melakukan peningkatan dengan regresi Lasso sebagai pelajar yang lemah. _Benarkah?_ Jika itu masalahnya, dengan num_round=1 saya harus mendapatkan kembali output dari regresi Lasso tunggal, oleh karena itu vektor bobot yang sangat jarang, yang sama sekali tidak demikian.
Tetapi pada kenyataannya, saya tidak berpikir itu mungkin untuk mendapatkan output dari satu putaran. Memang, vektor bobot model berubah ketika saya mengubah eta, bahkan dengan num_round=1, artinya setidaknya ada dua putaran, atau saya salah memahami sesuatu. _Apakah interpretasi saya benar?_

Juga, setelah beberapa tes, saya tidak berpikir parameter eta terbatas pada pohon penambah gradien dalam implementasi Anda, meskipun dalam dokumen itu ada di subbagian _tree parameter_. Ini tampak logis bagi saya, karena penyusutan dengan menetapkan tingkat pembelajaran adalah cara untuk mengatur peningkatan yang tidak khusus untuk meningkatkan pohon.
Apa yang juga tidak dapat dibatasi untuk meningkatkan pohon adalah opsi 'subsampel'. Ini bisa menjadi cara untuk mengatur peningkatan regresi linier serta meningkatkan pohon (setidaknya secara teori).

Akhirnya, hanya untuk memastikan saya mengerti, dengan tujuan pembelajaran sesuai dengan kerugian yang diberikan, yang belum tentu terkait dengan eval_metric, hanya digunakan untuk evaluasi pengguna? Karena banyak eval_metrics dapat ditentukan. Dalam hal ini, apa perbedaan kerugian untuk reg:logistic , reg:linear dan multi:softmax? (Misalnya kerugian kuadrat atau kerugian absolut untuk regresi, kerugian eksponensial atau penyimpangan untuk klasifikasi?)

Terima kasih atas jawaban Anda,
Terbaik,
Alice

Komentar yang paling membantu

@tqchen Bisakah Anda memberikan detail lebih lanjut tentang apa yang sebenarnya dilakukan gblinear? Referensi ke artikel/rumus akan sangat bagus.

Secara khusus, saya ingin dapat membuat prediksi untuk 1 putaran pelatihan ( nrounds=1 ). Berikut ini contoh kumpulan data:

> train
        x      y
 1: 13.36  37.54
 2:  5.35  14.54
 3:  0.26  -0.72
 4: 84.16 261.19
 5: 24.67  76.90
 6: 22.26  67.15
 7: 18.02  53.89
 8: 14.29  43.48
 9: 61.66 182.60
10: 57.26 179.44

Setelah saya melatih model regresi linier dan model xgboost dengan parameter { booster="gblinear" , objective="reg:linear" , eta=1 , subsample=1 , lambda=0 , lambda_bias=0 , alpha=0 } Saya mendapatkan hasil berikut

> test
        x      y Pred.linreg Pred.xgb
 1: 47.75 153.23      146.25    155.7
 2: 12.13  40.05       35.78    107.9
 3: 89.05 274.37      274.34    211.1
 4: 38.87 116.51      118.71    143.8
 5: 27.30  80.61       82.83    128.2
 6: 87.66 267.95      270.02    209.3
 7: 39.33 114.97      120.14    144.4
 8: 64.32 191.73      197.64    177.9
 9: 13.18  48.28       39.04    109.3
10:  8.89  23.30       25.73    103.5

Apa yang sebenarnya terjadi di sini? Terima kasih!

Semua 12 komentar

Anda ingin menggunakan beberapa putaran di gblinear untuk mendapatkan kembali regresi laso tunggal.

Ini karena tidak masuk akal untuk menumpuk model linier (yang lagi-lagi merupakan model linier). Jadi num_round langkah pembaruan digunakan bersama untuk menyelesaikan satu masalah laso.

eval_metric tidak ada hubungannya dengan fungsi tujuan. Fungsi kerugian didokumentasikan dalam parameter.md reg:logistic untuk regresi logistik, reg:linear untuk squared-loss dan muti:softmax untuk softmax multiclass klasifikasi

Hai,

Terima kasih atas jawaban Anda! Saya sudah mengerti bagaimana Anda mendapatkan kembali satu Lasso setelah num_rounds besar dan bukan 1. Kemudian itu juga menjawab pertanyaan kedua saya, yaitu Anda menggunakan kerugian kuadrat untuk regresi. Dan saya kira Anda menggunakan penyimpangan binomial/multinomial untuk klasifikasi. _Apakah itu benar?_

Saya tidak yakin, karena untuk regresi Anda juga dapat menggunakan kerugian L1 atau kerugian Huber misalnya (contoh umum yang diberikan bagian 10.10.2 dari elemen pembelajaran statistik).

Terima kasih untuk bantuannya,
Alice

Hai,

Saya ingin menerapkan xgboost pada model regresi, artinya variabel dependen saya adalah tipe numerik kontinu. Namun saya bingung, apa yang harus saya berikan dalam argumen "label". Tolong bantu di sini.

Salam,
Vivek

dalam label kasus regresi adalah target regresi Anda

Pada hari Senin, 25 Mei 2015 jam 08:43, Vivek Agarwal [email protected]
menulis:

Hai,

Saya ingin menerapkan xgboost pada model regresi, artinya variabel dependen saya
adalah jenis numerik kontinu. Namun saya bingung, apa yang harus saya berikan
dalam argumen "label". Tolong bantu di sini.

Salam,
Vivek


Balas email ini secara langsung atau lihat di GitHub
https://github.com/dmlc/xgboost/issues/332#issuecomment -105253915.

Sungguh-sungguh,

Tianqi Chen
Ilmu & Teknik Komputer, Universitas Washington

Lihat dokumentasi objektif di
https://github.com/dmlc/xgboost/blob/master/doc/parameter.md
Fungsi tujuan yang berbeda dapat ditentukan, dan Anda dapat menemukan arti dari
parameter saat ini

Tianqi

Pada Senin, 25 Mei 2015 pukul 01:47, AliceS [email protected] menulis:

Hai,

Terima kasih atas jawaban Anda! Saya sudah mengerti bagaimana Anda mendapatkan kembali satu
Lasso setelah num_rounds besar dan bukan 1.

Mengenai fungsi kerugian, masih belum jelas apa itu, di
paling tidak untuk regresi. Anda bisa menggunakan kerugian kuadrat, kerugian L1 atau
Kehilangan Huber misalnya (contoh umum diberikan bagian 10.10.2 dari
elemen pembelajaran statistik). Untuk klasifikasi saya kira Anda menggunakan
penyimpangan binomial/multinomial (bisa juga berupa kerugian eksponensial di mana
jika Anda mendapatkan kembali peningkatan klasik).

Terima kasih untuk bantuannya,
Alice


Balas email ini secara langsung atau lihat di GitHub
https://github.com/dmlc/xgboost/issues/332#issuecomment -105170486.

Sungguh-sungguh,

Tianqi Chen
Ilmu & Teknik Komputer, Universitas Washington

Terima kasih Tianqi,
Alice

Variabel terikat memiliki nilai numerik. Di bawah ini adalah 6 pengamatan pertama dari target regresi:

kepala(data_final[1:n.train,'Tergantung'])
[1] 4996 3784 1504 4994 3687 3084

Sekarang jika saya menempatkan variabel dependen ini ke dalam label & mengeksekusi kode di bawah ini:

param <- list("objective" = "reg:linear",
"jumlah_kelas" = 9,
"nthread" = 8,
"eta" = 0,08,
"subsampel"=0.8,
"gama" = 1,
"min_anak_berat" = 2,
"kedalaman_maks"= 12,
"colsample_bytree" = 1
)
model_xg <- xgboost(param=param,data = final_data[1:n.train,],label=final_data[1:n.train,'Dependent'],nrounds=250)

Kemudian saya mendapatkan kesalahan berikut:

Kesalahan dalam xgb.get.DMatrix(data, label) : xgboost: Input data tidak valid
Sebagai tambahan: Pesan peringatan:
Di xgb.get.DMatrix(data, label) : xgboost: label akan diabaikan.

Tolong beri tahu saya apa yang saya lakukan salah?

@vivekag Silakan buka masalah baru tentang ini. Akan sangat bagus jika Anda dapat memberikan potongan kode (mungkin dengan beberapa data dummy) yang dapat kami jalankan untuk mereproduksi masalah.

Saya kira itu karena tipe data final_data tidak seperti yang diharapkan xgboost (xgboost mengharapkan matriks atau matriks jarang) @ hetong007

@tqchen Bisakah Anda memberikan detail lebih lanjut tentang apa yang sebenarnya dilakukan gblinear? Referensi ke artikel/rumus akan sangat bagus.

Secara khusus, saya ingin dapat membuat prediksi untuk 1 putaran pelatihan ( nrounds=1 ). Berikut ini contoh kumpulan data:

> train
        x      y
 1: 13.36  37.54
 2:  5.35  14.54
 3:  0.26  -0.72
 4: 84.16 261.19
 5: 24.67  76.90
 6: 22.26  67.15
 7: 18.02  53.89
 8: 14.29  43.48
 9: 61.66 182.60
10: 57.26 179.44

Setelah saya melatih model regresi linier dan model xgboost dengan parameter { booster="gblinear" , objective="reg:linear" , eta=1 , subsample=1 , lambda=0 , lambda_bias=0 , alpha=0 } Saya mendapatkan hasil berikut

> test
        x      y Pred.linreg Pred.xgb
 1: 47.75 153.23      146.25    155.7
 2: 12.13  40.05       35.78    107.9
 3: 89.05 274.37      274.34    211.1
 4: 38.87 116.51      118.71    143.8
 5: 27.30  80.61       82.83    128.2
 6: 87.66 267.95      270.02    209.3
 7: 39.33 114.97      120.14    144.4
 8: 64.32 191.73      197.64    177.9
 9: 13.18  48.28       39.04    109.3
10:  8.89  23.30       25.73    103.5

Apa yang sebenarnya terjadi di sini? Terima kasih!

Apa perbedaan antara regresi xg dan regresi umum lainnya?
Saya tahu xgboost memiliki versi pohon yang berbeda dari algoritma pohon lainnya.
Kira perlu meretas sumbernya.

bisakah kita mengekstrak bobot akhir dari semua fitur input saat kita menggunakan gblinear di xgboost? Saya menemukan kesulitan mengekstraksi bobot.

Apakah halaman ini membantu?
0 / 5 - 0 peringkat