Reproduzieren Sie LGBMRegressor-Vorhersagen, indem Sie die Werte manuell aggregierenPython

Python-Programme
Guest
 Reproduzieren Sie LGBMRegressor-Vorhersagen, indem Sie die Werte manuell aggregieren

Post by Guest »

Ich versuche, die LGBMRegressor-Vorhersagen selbst zu reproduzieren. Wenn es mir gelingt, werde ich den Mittelwert durch den Median vertauschen. Aber im Moment scheint es mir nicht möglich zu sein.
Hier ist ein einfaches Skript, das ich erstellt habe, um zu überprüfen, ob ich die Ergebnisse reproduzieren kann.
Ich brauche reg_y_hat dasselbe sein wie self_y_hat.
Was fehlt mir? Wenn ich weiß, welche Stichproben im Zug auf jedes Blatt fallen, kann ich die Vorhersage selbst aggregieren ...

Code: Select all

import numpy as np
import lightgbm as lgb
from sklearn.model_selection import train_test_split

# Generate some random regression data
np.random.seed(42)
X = np.random.rand(100, 5)
y = 4 * X[:, 0] - 2 * X[:, 1] + np.random.rand(100) * 0.1

# Split the data
X_train, X_test, y_train, y_test = train_test_split(X, y, test_size=0.2, random_state=42)

# Train the LGBMRegressor
model = lgb.LGBMRegressor(objective='regression', n_estimators=10, learning_rate=0.1, random_state=42)
model.fit(X_train, y_train)

# Regular predict:
reg_y_hat = model.predict(X_test)

# Get the train leaf values
train_leaf_indices = model.predict(X_train, pred_leaf=True)
leaf_samples = {(i, leaf_id): [] for i in range(model.n_estimators) for leaf_id in np.unique(train_leaf_indices[:, i])}

# Store corresponding target values for each leaf
for i, row in enumerate(train_leaf_indices):
for j, leaf_id in enumerate(row):
leaf_samples[(j, leaf_id)].append(y_train[i])

# Compute avg for each leaf:
leaf_agg = {}
for key, values in leaf_samples.items():
leaf_agg[key] = np.mean(values)

# Predict by aggregating the mean values:
preds = []
test_leaf_indices = model.predict(X_test, pred_leaf=True)
for row_indices in test_leaf_indices:
row_pred = 0.0
for i, leaf_index in enumerate(row_indices):
row_pred += model.learning_rate * leaf_agg[(i, leaf_index)]
preds.append(row_pred)
self_y_hat = np.array(preds)

Quick Reply

Change Text Case: 
   
  • Similar Topics
    Replies
    Views
    Last post