FIX RuntimeWarning division by zero in check_classifiers_one_label #19690
Add this suggestion to a batch that can be applied as a single commit.
This suggestion is invalid because no changes were made to the code.
Suggestions cannot be applied while the pull request is closed.
Suggestions cannot be applied while viewing a subset of changes.
Only one suggestion per line can be applied in a batch.
Add this suggestion to a batch that can be applied as a single commit.
Applying suggestions on deleted lines is not supported.
You must change the existing code in this line in order to create a valid suggestion.
Outdated suggestions cannot be applied.
This suggestion has been applied or marked resolved.
Suggestions cannot be applied from pending reviews.
Suggestions cannot be applied on multi-line comments.
Suggestions cannot be applied while the pull request is queued to merge.
Suggestion cannot be applied right now. Please check back later.
Reference Issues/PRs
See issue #19334.
What does this implement/fix? Explain your changes.
The warning stems from the LDA's fit method. There is a division by zero in the
LinearDiscriminantAnalysis#_solve_svd
method, when computing the explained variance ratio:self.explained_variance_ratio_ = (S**2 / np.sum(S**2))[:self._max_components]
. Here,S
is zero because it's the singular values vector of the zero matrixX
given byX = np.dot(((np.sqrt((n_samples * self.priors_) * fac)) * (self.means_ - self.xbar_).T).T, scalings)
. Here, we haveself.means_ == self.xbar_
because we are testing the LDA classifier with only one class (seey = np.ones(10)
).Any other comments?
I am still trying to figure out the right way to solve this problem.