Modified from code submitted as a PR to sklearn: https://github.com/scikit-learn/scikit-learn/pull/9405

Original attribution from: https://github.com/scikit-learn/scikit-learn/pull/9405/filesdiff-38e412190dc50455611b75cfcf2d002713dcf6d537a78b9a22cc6b1c164390d1
