scikit-learn / scikit-learn/scikit-learn
Change default copy value from True to None
Nobody has claimed this yet.
- Dominant language
- Python
- Stars
- 67.3k
- Forks
- 27.4k
- Avg merge
- 1d 15h
- Merged PRs (30d)
- 58
Description
A fair amount of estimators currently have copy=True (or copy_X=True) by default. In practice, this means that the code looks something like,
X = check_array(X, copy=copy)
and then some other calculations that may change or not X inplace. In the case when the following operations are not done inplace, we have just made a wasteful copy with no good reason.
As discussed in https://github.com/scikit-learn/scikit-learn/issues/13923, an example is for instance Ridge(fit_intercept=False) that will copy X, although it is not needed. Actually, I can't find any inplace operations of (found it)X in Ridge even with fit_intercept=True, but maybe I am missing something.
I think in general it would be better to avoid the,
X = check_array(X, copy=copy)
pattern, and instead make a copy explicitly where it is needed. Maybe it could be OK to not make a copy with copy=True if no copy is needed. Alternatively we could introduce copy=None by default.
Adding a common test that checks that Estimator(copy=True).fit(X, y) doesn't change X.
Contributor guide
First steps
- Read the whole issue, then the project's contributing guide.
- Comment on the issue to say you are picking it up — it saves two people doing the same work.
- Fork the repository and make your change on a branch.
- Open a pull request that references the issue number.
Research direction
Start by auditing estimators that use copy=True or copy_X=True and their check_array calls, using Ridge(fit_intercept=False) as the example. Review issue #13923 and identify where in-place operations occur. Done means the default-copy approach is resolved consistently and a common test verifies that Estimator(copy=True).fit(X, y) does not change X.
Written by the indexing model from the issue text.
Assessment
- Tech stack
- python, scikit-learn
- Domain
- machine-learning, testing-qa
- Issue type
- Refactor
- Difficulty
- 5/5
- Estimated time
- Over a week
- Activity status
- Stale
- Clarity
- Mostly clear
- Newbie friendliness
- 25/100