-
Notifications
You must be signed in to change notification settings - Fork 87
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
Remove MSLE from default additional objectives #203
Conversation
Codecov Report
@@ Coverage Diff @@
## master #203 +/- ##
==========================================
- Coverage 96.81% 96.77% -0.05%
==========================================
Files 91 91
Lines 2353 2354 +1
==========================================
Hits 2278 2278
- Misses 75 76 +1
Continue to review full report at Codecov.
|
There was a problem hiding this comment.
Choose a reason for hiding this comment
The reason will be displayed to describe this comment to others. Learn more.
Looks good, comments on things you mentioned:
-
I agree that it seems cleaner to return the objective class rather than the instance, but an argument for returning the instance in OPTIONS could be that it allows us to reuse the metrics rather than creating a new one each time?
-
Rather than having a BLACKLIST list which might be confusing (or at least make me wonder why specific objectives are blacklisted), would it be more clear to maintain a list of DEFAULT_OPTIONS separate from OPTIONS?
In regards to returning class vs. object: my main concern is that if we add metrics that require fitting, passing around one object will be problematic. I think the difference in memory usage would be negligible unless someone is calling in multiple AutoClassifiers or AutoRegressors. I agree that it'll be more clear with a default options list but currently we there would be mostly overlap between options and default options since MSLE is the only one we want to exclude. However, if we change what we want to provide as default options (maybe only F1, precision, and recall for classification, and r2, MSE, MAE for regression?) we should definitely go with default options. |
@angela97lin or do you think a system like what we wrote for components utils where we fetch all standard metrics and use that for [f1, f1_micro, precision, precision_micro, recall, recall_micro, r2, mae, mse] |
evalml/objectives/utils.py
Outdated
"r2": standard_metrics.R2, | ||
"mae": standard_metrics.MAE, | ||
"mse": standard_metrics.MSE, | ||
"msle": standard_metrics.MSLE, |
There was a problem hiding this comment.
Choose a reason for hiding this comment
The reason will be displayed to describe this comment to others. Learn more.
what if we just remove MSLE as an option here?
There was a problem hiding this comment.
Choose a reason for hiding this comment
The reason will be displayed to describe this comment to others. Learn more.
Per the discussion above, @kmax12 what do you think if we keep a separate default_objectives object as well as the current objectives object? My concern is if we remove MSLE, how will the user be aware of it as an available metric?
There was a problem hiding this comment.
Choose a reason for hiding this comment
The reason will be displayed to describe this comment to others. Learn more.
@angela97lin I agree this creates some ambiguity but I think a user could look into the API reference to get the full list of metrics. Think this solution is probably the cleanest.
There was a problem hiding this comment.
Choose a reason for hiding this comment
The reason will be displayed to describe this comment to others. Learn more.
LGTM once tests pass
In order to remove MSLE from default objectives, I propose to have an internal blacklist of objectives that may cause problems or are not applicable to all use cases. This makes it easy for us to maintain and check for but may cause ambiguity for users that might manually use
get_objectives()
.Also added a change to how we handle objectives. I don't think its a good idea that we're returning the same instance of an objective when we handle objectives.