In building machine learning models, There comes a time you might want to evaluate your model to know it's a performance using a metric you created. while scikit-learn with all it's beauty provides the evaluation metrics we need, there comes a time we might need to create our own metrics. scikit-learn makes this easy by providing a function make_scorer.
to create a custom metric, all you need to do is create a function containing the metric definition and convert it to a scorer function using scikit-learn make_scorer. we will use the make_regression dataset to show an example of creating a custom metric below.
let's begin by importing the neccessary libraries
# Load libraries from sklearn.metrics import make_scorer, r2_score from sklearn.model_selection import train_test_split from sklearn.linear_model import Ridge from sklearn.datasets import make_regression Next we generate features and the target matrix.
features, target = make_regression(n_samples = 100,n_features = 4, random_state = 1) random_state parameter ensures we get the same distribution when we use the same random_state value.
let's continue by creating the training and testing set using train_test_split
X_train, X_test, y_train, y_test = train_test_split(features, target, test_size=0.10, random_state=1) then create our custom metric function.
def custom_metric(X_test, target_predicted): # Calculate r-squared score r_squared = r2_score(X_test, target_predicted) # Return r-squared score return r_squared next convert the custom metric into a scorer metric
# Make scorer and define that higher scores are better score = make_scorer(custom_metric, greater_is_better=True) greater_is_better signifies that higher score is better
Create the regression and train.
classifier = Ridge() # Train ridge regression model model = classifier.fit(X_train, y_train) Finally apply the custom metric to check model performance.
score(model, X_test, y_test)
Top comments (0)