.. DO NOT EDIT. .. THIS FILE WAS AUTOMATICALLY GENERATED BY SPHINX-GALLERY. .. TO MAKE CHANGES, EDIT THE SOURCE PYTHON FILE: .. "auto_examples/plot_gexternal_lightgbm.py" .. LINE NUMBERS ARE GIVEN BELOW. .. only:: html .. note:: :class: sphx-glr-download-link-note Click :ref:`here ` to download the full example code or to run this example in your browser via Binder .. rst-class:: sphx-glr-example-title .. _sphx_glr_auto_examples_plot_gexternal_lightgbm.py: .. _example-lightgbm: Convert a pipeline with a LightGBM model ======================================== .. index:: LightGBM :epkg:`sklearn-onnx` only converts :epkg:`scikit-learn` models into *ONNX* but many libraries implement :epkg:`scikit-learn` API so that their models can be included in a :epkg:`scikit-learn` pipeline. This example considers a pipeline including a :epkg:`LightGBM` model. :epkg:`sklearn-onnx` can convert the whole pipeline as long as it knows the converter associated to a *LGBMClassifier*. Let's see how to do it. .. contents:: :local: Train a LightGBM classifier +++++++++++++++++++++++++++ .. GENERATED FROM PYTHON SOURCE LINES 22-48 .. code-block:: default from pyquickhelper.helpgen.graphviz_helper import plot_graphviz from mlprodict.onnxrt import OnnxInference import onnxruntime as rt from skl2onnx import convert_sklearn, update_registered_converter from skl2onnx.common.shape_calculator import calculate_linear_classifier_output_shapes # noqa from onnxmltools.convert.lightgbm.operator_converters.LightGbm import convert_lightgbm # noqa from skl2onnx.common.data_types import FloatTensorType import numpy from sklearn.datasets import load_iris from sklearn.pipeline import Pipeline from sklearn.preprocessing import StandardScaler from lightgbm import LGBMClassifier data = load_iris() X = data.data[:, :2] y = data.target ind = numpy.arange(X.shape[0]) numpy.random.shuffle(ind) X = X[ind, :].copy() y = y[ind].copy() pipe = Pipeline([('scaler', StandardScaler()), ('lgbm', LGBMClassifier(n_estimators=3))]) pipe.fit(X, y) .. rst-class:: sphx-glr-script-out Out: .. code-block:: none Pipeline(steps=[('scaler', StandardScaler()), ('lgbm', LGBMClassifier(n_estimators=3))]) .. GENERATED FROM PYTHON SOURCE LINES 49-60 Register the converter for LGBMClassifier +++++++++++++++++++++++++++++++++++++++++ The converter is implemented in :epkg:`onnxmltools`: `onnxmltools...LightGbm.py `_. and the shape calculator: `onnxmltools...Classifier.py `_. .. GENERATED FROM PYTHON SOURCE LINES 60-66 .. code-block:: default update_registered_converter( LGBMClassifier, 'LightGbmLGBMClassifier', calculate_linear_classifier_output_shapes, convert_lightgbm, options={'nocl': [True, False], 'zipmap': [True, False, 'columns']}) .. GENERATED FROM PYTHON SOURCE LINES 67-69 Convert again +++++++++++++ .. GENERATED FROM PYTHON SOURCE LINES 69-79 .. code-block:: default model_onnx = convert_sklearn( pipe, 'pipeline_lightgbm', [('input', FloatTensorType([None, 2]))], target_opset=12, options={'lgbm__zipmap': False}) # And save. with open("pipeline_lightgbm.onnx", "wb") as f: f.write(model_onnx.SerializeToString()) .. GENERATED FROM PYTHON SOURCE LINES 80-84 Compare the predictions +++++++++++++++++++++++ Predictions with LightGbm. .. GENERATED FROM PYTHON SOURCE LINES 84-88 .. code-block:: default print("predict", pipe.predict(X[:5])) print("predict_proba", pipe.predict_proba(X[:1])) .. rst-class:: sphx-glr-script-out Out: .. code-block:: none predict [1 1 2 0 1] predict_proba [[0.28897427 0.42250751 0.28851822]] .. GENERATED FROM PYTHON SOURCE LINES 89-90 Predictions with onnxruntime. .. GENERATED FROM PYTHON SOURCE LINES 90-97 .. code-block:: default sess = rt.InferenceSession("pipeline_lightgbm.onnx") pred_onx = sess.run(None, {"input": X[:5].astype(numpy.float32)}) print("predict", pred_onx[0]) print("predict_proba", pred_onx[1][:1]) .. rst-class:: sphx-glr-script-out Out: .. code-block:: none predict [1 1 2 0 1] predict_proba [[0.2889743 0.42250752 0.28851822]] .. GENERATED FROM PYTHON SOURCE LINES 98-100 Final graph +++++++++++ .. GENERATED FROM PYTHON SOURCE LINES 100-106 .. code-block:: default oinf = OnnxInference(model_onnx) ax = plot_graphviz(oinf.to_dot()) ax.get_xaxis().set_visible(False) ax.get_yaxis().set_visible(False) .. image:: /auto_examples/images/sphx_glr_plot_gexternal_lightgbm_001.png :alt: plot gexternal lightgbm :class: sphx-glr-single-img .. rst-class:: sphx-glr-timing **Total running time of the script:** ( 0 minutes 4.208 seconds) .. _sphx_glr_download_auto_examples_plot_gexternal_lightgbm.py: .. only :: html .. container:: sphx-glr-footer :class: sphx-glr-footer-example .. container:: binder-badge .. image:: images/binder_badge_logo.svg :target: https://mybinder.org/v2/gh/sdpython/onnxcustom/master?urlpath=lab/tree/notebooks/auto_examples/plot_gexternal_lightgbm.ipynb :alt: Launch binder :width: 150 px .. container:: sphx-glr-download sphx-glr-download-python :download:`Download Python source code: plot_gexternal_lightgbm.py ` .. container:: sphx-glr-download sphx-glr-download-jupyter :download:`Download Jupyter notebook: plot_gexternal_lightgbm.ipynb ` .. only:: html .. rst-class:: sphx-glr-signature `Gallery generated by Sphinx-Gallery `_