mrkeyoor.com_
Fri 16 Oct 17:56 UTC
Dataevaluationupdated 11 Oct 2026

scikit-learn review

scikit-learn is a Python library for learning patterns from data and using them to predict outcomes or group similar records. It gives you models, data preparation tools and ways to compare predictions, so you can build a modelling workflow without writing each algorithm yourself.

+104stars / 7d
Verdict

Our scikit-learn source run installed 42 packages in 863 seconds and built successfully, but its test step failed because the editable loader could not find the requested Ninja executable. Use scikit-learn for conventional prediction and preprocessing workflows, and validate contributor setup separately. Choose another framework for custom deep learning or a requirement that every model run on a GPU.

We ran it

Lab card: what happened when we ran scikit-learnScreenshot of scikit-learn (scikit-learn.org)
Install✓ · 863s42 packages · 208 MB
Build✓ · 11s
Tests✗ · 7sran, no count parsed
Known vulns0(pip-audit)
Repo1839 files~464,500 lines of source · 24.7 MB · 22 CI workflows

Answers from our run

Does scikit-learn build from source?

Dependencies installed in 863 seconds (42 packages), and the build succeeded in 11 seconds. We cloned commit 6ad9bb9 into a clean Debian container with 3 CPUs and no project-specific setup.

Do scikit-learn's tests pass?

The test command failed in our container, and its output did not report a pass or fail count.

Does scikit-learn have known vulnerabilities in its dependencies?

pip-audit found none in the dependency tree at the time of our run.

Who should not use scikit-learn?

Teams designing custom deep neural networks or reinforcement learning systems: the project FAQ explicitly excludes those areas.

What are the alternatives to scikit-learn?

XGBoost, CatBoost, PyTorch. Our scikit-learn source run installed 42 packages in 863 seconds and built successfully, but its test step failed because the editable loader could not find the requested Ninja executable.

Setup3/5863-second source install; build passed, test step failed
Docs5/5Practical pipeline, leakage, persistence and platform guidance
Community5/5October 10 push and October 11 issue and PR activity
Maturity4/5Active bug-fix releases; source test run blocked by missing Ninja

Discussed on

  1. hnScikit-Learn Version 1.0260 points
  2. hnDive into Machine Learning with Jupyter and Scikit-Learn204 points
  3. hnIntel Extension for Scikit-Learn183 points
  4. hnShow HN: Subreddit classifier using scikit-learn and a high-performance Go proxy170 points
  5. hnScikit-learn user guide (2017) [pdf]140 points

Who it’s for

Developers building predictions from tables, such as customer churn or demand estimates.
Data teams comparing conventional models with the same preprocessing and evaluation workflow.
Python users who want explicit control over validation splits and scoring.
Contributors willing to maintain a source development environment separately from an application dependency.

Who it’s NOT for

Teams designing custom deep neural networks or reinforcement learning systems: the project FAQ explicitly excludes those areas.
Developers requiring every estimator to run on a GPU: the documented Array API route is experimental and covers selected estimators.
Teams expecting saved Python models to survive arbitrary library upgrades: the persistence guide says loading across scikit-learn versions is unsupported.
Applications that load untrusted pickle-based models: the persistence guide warns that loading can execute code.
Projects standardized on PyPy: the FAQ says that interpreter is not officially supported.

Setup reality

Our sandbox installed commit 6ad9bb9 in 863 seconds, adding 42 packages and using 208 MB on disk. The build passed in 11 seconds. Tests failed with exit code 4 after 7 seconds: the editable loader requested a Ninja executable at a temporary build path that did not exist. The log gives no cause for its absence and no passing-test count. Pip-audit reported 0 known vulnerabilities.

Local modelling needs data, Python code and numerical libraries, without a hosted API credential or model service. The current README lists Python 3.12 or newer and names NumPy, SciPy, Narwhals, joblib and threadpoolctl. Plotting and some examples need additional libraries.

We ran a source checkout in a fresh, unprivileged Debian container with 3 CPUs and 8 GB of RAM. Its results do not measure the README's published-package route. Contributor setup has a separate development guide, and deployment requires attention to model persistence and matching dependency versions.

Pipelines keep preprocessing attached to the model

Choose a classifier, then change it without rewriting how your application prepares the data. That's the reason I'd start with scikit-learn for a conventional prediction problem. Its estimators share methods such as fit and predict, while Pipeline connects transformations to the final model. You can compare a linear model with a random forest while keeping the surrounding workflow recognizable.

The lab environment occupied 208 MB after installing 42 packages. That buys access to a library covering classification, regression and clustering, alongside model selection tools. For a team predicting customer churn from a table, the appeal is having preprocessing and evaluation in the same vocabulary. You still write the application and decide what a useful prediction means.

What happened when we ran it

Our sandbox installed scikit-learn commit 6ad9bb9 in 863 seconds and built it successfully in 11 seconds. We ran it on October 2, 2026, using 3 CPUs and 8 GB of RAM in an unprivileged Debian container without secrets, based on ghcr.io/astral-sh/uv:python3.12-bookworm. The checkout contained 1,839 files, roughly 464,500 source lines, and occupied 24.7 MB before installation. This was a source checkout, so these timings describe that path.

The test step failed with exit code 4 after 7 seconds. The log shows the editable loader calling a rebuild, then Python raising FileNotFoundError for /work/home/.uv/builds-v0/.tmpbRRjbL/bin/ninja. The requested executable was missing at that path. The log doesn't explain why, and it supplies no passing-test count. Pip-audit reported 0 known vulnerabilities. Installation and build succeeded, but this environment never delivered a successful test result.

The pip command doesn't describe the source checkout

The README offers pip and conda commands for ordinary users, while directing contributors to a separate development guide. Its current dependency list starts at Python 3.12 and names NumPy and SciPy, among other libraries. Local modelling needs your data and Python code, without a hosted inference credential or an external model service. Plotting and some examples require additional libraries named in the README.

The scan found 22 CI workflow files, no Dockerfile and no tests directory. That last signal describes what the detector found, so it cannot establish that upstream lacks tests. The 863-second source installation and missing Ninja path are more useful warnings for contributors: reserve time to validate the development environment before relying on it for changes. Ordinary package users should assess the published-package route separately.

Preprocessing can contaminate your evaluation

The common-pitfalls guide explains a mistake that can make a weak model look convincing: learning a transformation from data that includes the evaluation rows. Fit scaling or feature selection on the training portion. A pipeline helps keep those operations inside each validation split, instead of leaving an earlier notebook cell to decide what information the model has already seen.

An 11-second successful build says nothing about prediction quality. For a churn model, I'd compare against a simple baseline and check whether the validation split resembles the customers the application will encounter. ColumnTransformer lets you apply different transformations to named columns, such as encoding categories while scaling numeric values. The composition guide makes that preparation explicit. This is useful engineering, provided you choose the split and metric carefully.

Deep learning is outside scope, and GPU coverage is selective

The project FAQ explicitly excludes deep learning and reinforcement learning from scikit-learn's scope. Its simple multilayer perceptron doesn't make it a framework for designing arbitrary neural networks. Choose PyTorch when the job requires custom neural architectures. For a table-based prediction task, scikit-learn's narrower interface is often a better starting point because the model can share an evaluation workflow with simpler alternatives.

The sandbox's 3 CPUs and 8 GB of RAM provide no evidence about GPU execution. Official Array API guidance describes experimental support that must be enabled, with coverage limited to supported estimators. Check your exact model before choosing hardware. CatBoost is worth comparing for categorical features and GPU tree training. XGBoost is a narrower choice when gradient-boosted trees, including distributed workloads, are the requirement. Neither comparison establishes a performance winner here.

Saved Python models require matching versions

The model-persistence guide says loading a model trained with a different scikit-learn version is unsupported. That rules out treating a saved Python object as an artifact you can carry through arbitrary upgrades. Pickle-based formats also require a trusted source because loading can execute code. Keep the training recipe and dependency versions alongside the model, and choose a deployment format deliberately.

The measured 208 MB environment is useful for planning the repository setup, but it doesn't size your deployed service. Your data and saved model add their own storage requirements. I'd package the preprocessing with the estimator and verify predictions in the environment that will serve them. A deployment that silently changes category handling can return plausible numbers while answering a different question from the training code.

October activity shows maintenance beyond the release tag

GitHub recorded the last push on October 10, 2026, with 67,553 stars and 2,166 open issues and PRs. Issue activity continued on October 11, including discussion of cross-validation dispatch and proposed fixes for clustering and estimator display. Release 1.9.1, published September 11, describes bug fixes and Python 3.15 support. The push and discussion dates show ongoing work, while the combined queue count doesn't tell you how many confirmed bugs exist.

I'd use scikit-learn for a conventional modelling workflow that benefits from consistent preprocessing and model comparison. Contributors have a separate decision: our 863-second installation ended in a built checkout whose test step couldn't launch the requested Ninja executable. Before making that checkout your development base, require a working test run in the environment you'll actually use.

Alternatives

ProjectWhat it isPick it when
XGBoost gh↗A gradient-boosted tree library with distributed workload support.pick this instead when boosted trees are the main requirement and distributed training matters.
CatBoostA tree-boosting library with categorical feature handling and GPU training.pick this instead when categorical columns and GPU tree training shape the job.
PyTorch gh↗A tensor and neural network framework with GPU acceleration.pick this instead when you need custom neural architectures outside scikit-learn's scope.

Sources

  1. scikit-learn repository and README
  2. scikit-learn official documentation
  3. scikit-learn FAQ and project scope
  4. Common pitfalls and recommended practices
  5. Pipelines and composite estimators
  6. Experimental Array API support
  7. Model persistence and compatibility
  8. scikit-learn 1.9.1 release

More data reviews

wine-quality-svc-tuning · dhis2-immunisation-audit · OpenTerminal · The-Quant-Trading-Vault · multimodal-product-discovery · edgequake · the whole board →