Skip to content

Commit

Permalink
Add kernel ridge model function traces (#721)
Browse files Browse the repository at this point in the history
* Add kernel ridge models

* Modify VotingRegressor test
  • Loading branch information
lrafeei authored Jan 8, 2023
1 parent 58f02de commit f880cde
Show file tree
Hide file tree
Showing 3 changed files with 85 additions and 0 deletions.
6 changes: 6 additions & 0 deletions newrelic/config.py
Original file line number Diff line number Diff line change
Expand Up @@ -2902,6 +2902,12 @@ def _process_module_builtin_defaults():
"instrument_sklearn_ensemble_hist_models",
)

_process_module_definition(
"sklearn.kernel_ridge",
"newrelic.hooks.mlmodel_sklearn",
"instrument_sklearn_kernel_ridge_models",
)

_process_module_definition(
"sklearn.neural_network._multilayer_perceptron",
"newrelic.hooks.mlmodel_sklearn",
Expand Down
5 changes: 5 additions & 0 deletions newrelic/hooks/mlmodel_sklearn.py
Original file line number Diff line number Diff line change
Expand Up @@ -201,6 +201,11 @@ def instrument_sklearn_ensemble_hist_models(module):
_instrument_sklearn_models(module, model_classes)


def instrument_sklearn_kernel_ridge_models(module):
model_classes = ("KernelRidge",)
_instrument_sklearn_models(module, model_classes)


def instrument_sklearn_calibration_models(module):
model_classes = ("CalibratedClassifierCV",)
_instrument_sklearn_models(module, model_classes)
Expand Down
74 changes: 74 additions & 0 deletions tests/mlmodel_sklearn/test_kernel_ridge_models.py
Original file line number Diff line number Diff line change
@@ -0,0 +1,74 @@
# Copyright 2010 New Relic, Inc.
#
# Licensed under the Apache License, Version 2.0 (the "License");
# you may not use this file except in compliance with the License.
# You may obtain a copy of the License at
#
# http://www.apache.org/licenses/LICENSE-2.0
#
# Unless required by applicable law or agreed to in writing, software
# distributed under the License is distributed on an "AS IS" BASIS,
# WITHOUT WARRANTIES OR CONDITIONS OF ANY KIND, either express or implied.
# See the License for the specific language governing permissions and
# limitations under the License.

import pytest
from testing_support.validators.validate_transaction_metrics import (
validate_transaction_metrics,
)

from newrelic.api.background_task import background_task
from newrelic.packages import six


@pytest.mark.parametrize(
"kernel_ridge_model_name",
[
"KernelRidge",
],
)
def test_model_methods_wrapped_in_function_trace(kernel_ridge_model_name, run_kernel_ridge_model):
expected_scoped_metrics = {
"KernelRidge": [
("Function/MLModel/Sklearn/Named/KernelRidge.fit", 1),
("Function/MLModel/Sklearn/Named/KernelRidge.predict", 1),
],
}

expected_transaction_name = (
"test_kernel_ridge_models:test_model_methods_wrapped_in_function_trace.<locals>._test"
if six.PY3
else "test_kernel_ridge_models:_test"
)

@validate_transaction_metrics(
expected_transaction_name,
scoped_metrics=expected_scoped_metrics[kernel_ridge_model_name],
rollup_metrics=expected_scoped_metrics[kernel_ridge_model_name],
background_task=True,
)
@background_task()
def _test():
run_kernel_ridge_model(kernel_ridge_model_name)

_test()


@pytest.fixture
def run_kernel_ridge_model():
def _run(kernel_ridge_model_name):
import sklearn.kernel_ridge
from sklearn.datasets import load_iris
from sklearn.model_selection import train_test_split

X, y = load_iris(return_X_y=True)
x_train, x_test, y_train, _ = train_test_split(X, y, stratify=y, random_state=0)

clf = getattr(sklearn.kernel_ridge, kernel_ridge_model_name)()

model = clf.fit(x_train, y_train)
model.predict(x_test)

return model

return _run

0 comments on commit f880cde

Please sign in to comment.