Xgboost: Was genau macht gblinear+reg:linear? Und andere Fragen

Erstellt am 24. Mai 2015  ·  12Kommentare  ·  Quelle: dmlc/xgboost

Hallo,

Ich fange an, die Leistungsfähigkeit von xgboost zu entdecken und spiele daher mit Demo-Datensätzen herum (derzeit Boston-Datensatz aus sklearn.datasets).

Wenn ich die Parameter richtig verstehe, indem ich wähle:

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

Ich sollte als schwacher Lerner mit Lasso-Regressionen Boosten. _Stimmt das?_ Wenn das der Fall ist, sollte ich mit num_round=1 die Ausgabe einer einzelnen Lasso-Regression zurückbekommen, daher einen sehr spärlichen Gewichtsvektor, was absolut nicht der Fall ist.
Aber tatsächlich glaube ich nicht, dass es möglich ist, die Ausgabe einer einzelnen Runde zu erhalten. Tatsächlich ändert sich der Modellgewichtsvektor, wenn ich eta ändere, auch mit num_round=1, was bedeutet, dass es mindestens zwei Runden gibt, oder ich habe etwas falsch verstanden. _Ist meine Interpretation richtig?_

Außerdem glaube ich nach einigen Tests, dass der Parameter eta in Ihrer Implementierung nicht auf den Gradienten-Boosting-Baum beschränkt ist, obwohl er sich im Dokument im Unterabschnitt _tree parameter_ befindet. Dies erscheint mir logisch, da das Schrumpfen durch Festlegen einer Lernrate eine Möglichkeit ist, das Boosten zu regulieren, was nicht spezifisch für das Boosten von Bäumen ist.
Was auch nicht auf das Boosten des Baums beschränkt sein könnte, ist die Option "Unterabtastung". Es kann eine Möglichkeit sein, das Boosten linearer Regressoren sowie das Boosten von Bäumen (zumindest theoretisch) zu regularisieren.

Nur um sicher zu gehen, dass das Lernziel einem bestimmten Verlust entspricht, der nicht unbedingt mit der eval_metric verknüpft ist, sondern nur zur Benutzerbewertung verwendet wird? Da viele eval_metrics angegeben werden können. Was sind in diesem Fall die unterschiedlichen Verluste für reg:logistic , reg:linear und multi:softmax? (z. B. quadratischer Verlust oder absoluter Verlust für Regression, exponentieller oder Abweichungsverlust für Klassifizierung?)

Danke für deine Antworten,
Am besten,
Alice

Hilfreichster Kommentar

@tqchen Können Sie etwas mehr Details darüber geben, was gblinear tatsächlich tut? Ein Verweis auf einen Artikel/eine Formel wäre toll.

Insbesondere möchte ich in der Lage sein, die Vorhersagen für 1 Trainingsrunde ( nrounds=1 ) auszuarbeiten. Hier ist ein Beispieldatensatz:

> 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

Nachdem ich ein lineares Regressionsmodell und ein xgboost-Modell mit den Parametern { booster="gblinear" , objective="reg:linear" , eta=1 , subsample=1 , lambda=0 , lambda_bias=0 habe alpha=0 } Ich erhalte die folgenden Ergebnisse

> 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

Was ist hier eigentlich los? Danke!

Alle 12 Kommentare

Sie möchten mehrere Runden in gblinear verwenden, um eine einzelne Lasso-Regression zurückzugeben.

Dies lag daran, dass es weniger sinnvoll ist, lineare Modelle zu stapeln (was wiederum ein lineares Modell war). num_round-Schritte der Aktualisierung wurden also gemeinsam verwendet, um ein einzelnes Lasso-Problem zu lösen.

eval_metric hat nichts mit Zielfunktion zu tun. Die Verlustfunktion ist in der parameters.md reg:logistic für die logistische Regression, reg:linear für den quadrierten Verlust und muti:softmax für die Softmax-Multiclass-Klassifizierung dokumentiert

Hallo,

Danke für deine Antworten! Ich habe verstanden, wie Sie nach einer großen Zahl von num_rounds und nicht 1 ein einzelnes Lasso zurückbekommen. Dann beantwortet es auch meine zweite Frage, das heißt, Sie verwenden den quadratischen Verlust für die Regression. Und ich denke, Sie verwenden binomiale / multinomiale Abweichungen zur Klassifizierung. _Ist das korrekt?_

Ich war mir nicht sicher, denn für die Regression könnte man zum Beispiel auch den L1-Verlust oder den Huber-Verlust verwenden (gängige Beispiele finden sich in Abschnitt 10.10.2 der Elemente des statistischen Lernens).

Danke für Ihre Hilfe,
Alice

Hallo,

Ich möchte xgboost auf ein Regressionsmodell anwenden, was bedeutet, dass meine abhängige Variable eine Art kontinuierlicher numerischer Wert ist. Ich bin jedoch verwirrt, was ich im Argument "Label" angeben soll. Bitte helfen Sie hier.

Grüße,
Vivek

im Regressionsfall ist Label Ihr Regressionsziel

Am Montag, den 25. Mai 2015 um 8:43 Uhr, Vivek Agarwal [email protected]
schrieb:

Hallo,

Ich möchte xgboost auf ein Regressionsmodell anwenden, also meine abhängige Variable
ist eine fortlaufende numerische Art. Allerdings bin ich verwirrt, was soll ich liefern
im "Label"-Argument. Bitte helfen Sie hier.

Grüße,
Vivek


Antworten Sie direkt auf diese E-Mail oder zeigen Sie sie auf GitHub an
https://github.com/dmlc/xgboost/issues/332#issuecomment -105253915.

Aufrichtig,

Tianqi Chen
Informatik und Ingenieurwesen, University of Washington

Siehe Dokumentation des Ziels in
https://github.com/dmlc/xgboost/blob/master/doc/parameter.md
Es können verschiedene Zielfunktionen angegeben werden, und Sie können die Bedeutung von finden
aktuelle Parameter

Tianqi

Am Montag, den 25. Mai 2015 um 1:47 Uhr schrieb AliceS [email protected] :

Hallo,

Danke für deine Antworten! Ich habe verstanden, wie man eine Single zurückbekommt
Lasso nach einer großen num_rounds und nicht 1.

Was die Verlustfunktionen anbelangt, so ist noch immer nicht klar, was sie sind
zumindest für die Regression. Sie könnten den quadrierten Verlust, den L1-Verlust oder den verwenden
Huber-Verlust zum Beispiel (übliche Beispiele finden sich in Abschnitt 10.10.2 des
Elemente des statistischen Lernens). Für die Einstufung verwenden Sie vermutlich
binomiale/multinomiale Abweichung (könnte auch der exponentielle Verlust sein, bei dem
falls Sie klassisches Boosten zurückerhalten).

Danke für Ihre Hilfe,
Alice


Antworten Sie direkt auf diese E-Mail oder zeigen Sie sie auf GitHub an
https://github.com/dmlc/xgboost/issues/332#issuecomment -105170486.

Aufrichtig,

Tianqi Chen
Informatik und Ingenieurwesen, University of Washington

Danke Tianqi,
Alice

Abhängige Variable hat numerische Werte. Unten sind die ersten 6 Beobachtungen des Regressionsziels:

head(final_data[1:n.train,'Abhängig'])
[1] 4996 3784 1504 4994 3687 3084

Wenn ich nun diese abhängige Variable in Labels einfüge und den folgenden Code ausführe:

param <- list("objective" = "reg:linear",
"num_class" = 9,
"nthread" = 8,
"eta" = 0,08,
"Teilstichprobe"=0,8,
"gamma" = 1,
"min_child_weight" = 2,
"max_tiefe"= 12,
"colsample_bytree" = 1
)
model_xg <- xgboost(param=param,data = final_data[1:n.train,],label=final_data[1:n.train,'Dependent'],nrounds=250)

Dann bekomme ich folgenden Fehler:

Fehler in xgb.get.DMatrix(data, label): xgboost: Ungültige Dateneingabe
Zusätzlich: Warnmeldung:
In xgb.get.DMatrix(data, label) : xgboost: label wird ignoriert.

Bitte lassen Sie mich wissen, was ich falsch mache?

@vivekag Bitte eröffne dazu ein neues Thema. Es wäre großartig, wenn Sie einen Codeausschnitt (möglicherweise mit einigen Dummy-Daten) bereitstellen könnten, den wir ausführen können, um das Problem zu reproduzieren.

Ich denke, es lag daran, dass der Datentyp von final_data nicht das war, was xgboost erwartete (xgboost erwartete eine Matrix oder eine Sparse-Matrix) @hetong007

@tqchen Können Sie etwas mehr Details darüber geben, was gblinear tatsächlich tut? Ein Verweis auf einen Artikel/eine Formel wäre toll.

Insbesondere möchte ich in der Lage sein, die Vorhersagen für 1 Trainingsrunde ( nrounds=1 ) auszuarbeiten. Hier ist ein Beispieldatensatz:

> 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

Nachdem ich ein lineares Regressionsmodell und ein xgboost-Modell mit den Parametern { booster="gblinear" , objective="reg:linear" , eta=1 , subsample=1 , lambda=0 , lambda_bias=0 habe alpha=0 } Ich erhalte die folgenden Ergebnisse

> 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

Was ist hier eigentlich los? Danke!

Was ist der Unterschied zwischen der xg-Regression und anderen allgemeinen Regressionen?
Ich weiß, dass xgboost eine Baumversion hat, die sich von anderen Baumalgorithmen unterscheidet.
Vermutlich muss die Quelle gehackt werden.

Können wir die endgültigen Gewichte aller Eingabefunktionen extrahieren, wenn wir gblinear in xgboost verwenden? Ich finde es schwierig, die Gewichte zu extrahieren.

War diese Seite hilfreich?
0 / 5 - 0 Bewertungen