Skip to content
New issue

Have a question about this project? Sign up for a free GitHub account to open an issue and contact its maintainers and the community.

By clicking “Sign up for GitHub”, you agree to our terms of service and privacy statement. We’ll occasionally send you account related emails.

Already on GitHub? Sign in to your account

XGBRFClassifier & XGBRFRegressor are not supported #663

Open
pvardanis opened this issue Nov 10, 2023 · 22 comments
Open

XGBRFClassifier & XGBRFRegressor are not supported #663

pvardanis opened this issue Nov 10, 2023 · 22 comments
Labels

Comments

@pvardanis
Copy link

Hi,

I'm trying to convert both XGBRFClassifier & XGBRFRegressor models into ONNX, but unfortunately there's no support for such models as I can also see from the source code here. Are there any plans for extended support for such models in the future?

@xadupre
Copy link
Collaborator

xadupre commented Nov 17, 2023

Not yet. If only the training is different from XGBRgressor, it should not be too difficult to add. Let me investigate.

@pvardanis
Copy link
Author

@xadupre That would be great if there's a workaround on this!

@xadupre
Copy link
Collaborator

xadupre commented Nov 17, 2023

I created a PR to support these models. It seems to work with the same converter but it could be helpful to check on your side as well.

@pvardanis
Copy link
Author

pvardanis commented Nov 17, 2023

@xadupre Thanks! Would you mind sending a link to the PR since I'm interested to know when it might make it to a release?

EDIT: I found it no worries. Let me know when/how to test this I'd be glad to do so.

@xadupre
Copy link
Collaborator

xadupre commented Nov 17, 2023

#665 (it appears above but maybe that's just for me).

@pvardanis
Copy link
Author

@xadupre yep saw that

@pvardanis
Copy link
Author

Hi @xadupre ! Do you have an estimate on when this is gonna make it to a next release?

@xadupre
Copy link
Collaborator

xadupre commented Nov 20, 2023

We plan to release a new version before December 14th.

@pvardanis
Copy link
Author

Thanks, much appreciated!

@xadupre
Copy link
Collaborator

xadupre commented Dec 18, 2023

The new version was released and fixes this issue. Feel free to reopen the issue if it does not work.

@xadupre xadupre closed this as completed Dec 18, 2023
@pvardanis
Copy link
Author

I'll try and let you know, thank you!

@pvardanis
Copy link
Author

pvardanis commented Jan 4, 2024

Hi @xadupre, I've tested the newest version with XGBRFClassifier and seems the ONNX probabilities are not matching those of the original model.

I got a simple XGBRFClassifier trained as follows:

dataset = load_iris()
X, y = dataset.data, dataset.target
model = XGBRFClassifier()
model.fit(X, y)

and run the following code to get predictions and probabilities from both the original and the ONNX equivalent:

onnx_model = onnx.load((tmp_path / "model.onnx").as_posix())
session = rt.InferenceSession((tmp_path / "model.onnx").as_posix())

data = np.random.rand(2, 4).astype(np.float32)
model_predictions = model.predict(data)
model_probabilities =  model.predict_proba(data)
onnx_predictions, onnx_probabilities = session.run(
            ["label", "probabilities"], {"input": data}
        )

However I'm getting different probabilities in the two occasions:
image

I'm using TARGET_OPSET=15. Also, shouldn't all ONNX probabilities sum up to 1 as with the original model?

@xadupre
Copy link
Collaborator

xadupre commented Jan 4, 2024

I'll have a look today.

@xadupre
Copy link
Collaborator

xadupre commented Jan 4, 2024

I was able to replicate the bug. I assumed XGBClassifier and XGBRFClassifier were the same when it comes to prediction since the code is the same. It turns out they are the same if n_estimators=1 and different for any value above. I did not find out where the difference is and how to retrieve that information at conversion time. I just know method get_num_boosting_rounds is different. It is only used at training. Maybe if you tell me what you are using XGBRFClassifier and not XGBClassifier, I would be able to guess where I should look at.

@pvardanis
Copy link
Author

@xadupre I'm using the default values for XGBRFClassifier during training, just for testing purposes. Thanks for having a look at this, much appreciated!

@pvardanis
Copy link
Author

Hi @xadupre! Is it something trivial to fix or it seems like a bigger issue? Anything I can help you with?

@xadupre
Copy link
Collaborator

xadupre commented Jan 10, 2024

Sorry, I did not have time to look into this this week. It is not trivial to find (at least for me). Since the conversion of trees is working, I'm usually looking for wrong base values or a wrong number of estimators (early stopping). I parsed the dumped trees to look for additional information but nothing was obvious. My next step is to compare the dump between XGBClassifier and XGBRFClassifier on the same data to understand what the differences are. If the dump is different, then it is a converting issue. If the dump is the same, then the code for inference is different and I need to reflect that somehow in the onnx graph. Here is my current status.

@pvardanis
Copy link
Author

I see, no worries! Please let me know if there any developments on this bug fix :)

@pvardanis
Copy link
Author

Hi @xadupre, is there any progress on this bug?

@xadupre
Copy link
Collaborator

xadupre commented Feb 13, 2024

No sorry, I was busy with something else. I'll try to do it this month.

@pvardanis
Copy link
Author

@xadupre is there any progress on this?

@xadupre
Copy link
Collaborator

xadupre commented Mar 18, 2024

I did not have time to work on this, doing some work with pytorch and onnx. I have 2 or 3 issues to fix on skl2onnx and onnxmltools. I planned to spend 2 or 3 days on them by the end of the month. Sorry for the delay again.

Sign up for free to join this conversation on GitHub. Already have an account? Sign in to comment
Labels
Projects
None yet
Development

No branches or pull requests

2 participants