{"passport":{"unfragile":{"@version":"1.0","version":"2026-05","artifact":{"id":"pypi_pypi-scikit-learn","slug":"pypi-scikit-learn","name":"scikit-learn","type":"repo","url":"https://pypi.org/project/scikit-learn/","page_url":"https://unfragile.ai/pypi-scikit-learn","categories":["model-training"],"tags":[],"pricing":{"model":"open_source","free":true,"starting_price":null},"status":"active","verified":false},"capabilities":[{"id":"pypi_pypi-scikit-learn__cap_0","uri":"capability://data.processing.analysis.supervised.learning.model.training.with.unified.estimator.api","name":"supervised learning model training with unified estimator api","description":"Provides a consistent fit/predict interface across 50+ supervised learning algorithms (linear regression, logistic regression, SVMs, decision trees, ensemble methods, neural networks) using a standardized Estimator base class pattern. All models implement the same sklearn.base.BaseEstimator interface with fit(X, y) and predict(X) methods, enabling algorithm-agnostic pipeline composition and hyperparameter tuning without algorithm-specific code.","intents":["Train a classification or regression model without learning different APIs for each algorithm","Swap between algorithms (e.g., LogisticRegression to RandomForest) with minimal code changes","Build reproducible ML workflows that work across different model types"],"best_for":["Data scientists prototyping multiple algorithms quickly","Teams standardizing on a single ML framework across projects","Developers building AutoML or hyperparameter optimization systems"],"limitations":["Unified API abstracts away algorithm-specific tuning parameters, requiring separate documentation per model","No native distributed training — single-machine only, scales to ~100GB RAM","Slower than specialized frameworks (XGBoost, LightGBM) for gradient boosting tasks due to pure Python implementation"],"requires":["Python 3.9+","NumPy 1.17.3+","SciPy 1.1.0+","Joblib 1.1.1+ for parallelization"],"input_types":["NumPy arrays (n_samples, n_features)","Pandas DataFrames","Sparse matrices (scipy.sparse)"],"output_types":["Predictions (class labels or continuous values)","Probability estimates","Decision function scores"],"categories":["data-processing-analysis","machine-learning"],"confidence":0.5,"matches":0,"success_rate":0},{"id":"pypi_pypi-scikit-learn__cap_1","uri":"capability://data.processing.analysis.unsupervised.learning.with.clustering.and.dimensionality.reduction","name":"unsupervised learning with clustering and dimensionality reduction","description":"Implements 10+ unsupervised algorithms (K-Means, DBSCAN, Hierarchical Clustering, PCA, t-SNE, UMAP via community packages, Isolation Forest) using the same Estimator interface with fit(X) and transform(X) or fit_predict(X) methods. Clustering algorithms use iterative optimization (e.g., K-Means uses Lloyd's algorithm with k-means++ initialization), while dimensionality reduction applies matrix factorization or manifold learning techniques to project high-dimensional data into lower-dimensional spaces.","intents":["Discover natural groupings in unlabeled data without knowing the number of clusters in advance","Reduce feature dimensionality for visualization or downstream model efficiency","Detect anomalies using density-based or isolation-based approaches"],"best_for":["Exploratory data analysis and feature engineering","Preprocessing pipelines before supervised learning","Anomaly detection in time-series or sensor data"],"limitations":["K-Means requires pre-specifying cluster count; no automatic selection built-in","t-SNE and UMAP are slow on large datasets (>100k samples) and non-deterministic","PCA assumes linear relationships; nonlinear manifold learning requires external packages"],"requires":["Python 3.9+","NumPy 1.17.3+","SciPy 1.1.0+"],"input_types":["NumPy arrays (n_samples, n_features)","Pandas DataFrames","Sparse matrices"],"output_types":["Cluster labels (integers)","Transformed feature matrices (lower-dimensional)","Anomaly scores"],"categories":["data-processing-analysis","machine-learning"],"confidence":0.5,"matches":0,"success_rate":0},{"id":"pypi_pypi-scikit-learn__cap_10","uri":"capability://data.processing.analysis.imbalanced.classification.handling.with.class.weights.and.resampling","name":"imbalanced classification handling with class weights and resampling","description":"Provides class_weight parameter on classifiers (LogisticRegression, SVM, RandomForest) to penalize misclassification of minority classes during training. Also provides imbalanced-learn-compatible interfaces for resampling strategies (SMOTE, RandomUnderSampler, RandomOverSampler) via sklearn.utils.class_weight.compute_sample_weight(). Enables training on imbalanced datasets without manual resampling.","intents":["Train classifiers on imbalanced datasets where one class is much rarer than others","Adjust decision thresholds to optimize for precision or recall instead of accuracy","Handle class imbalance without losing minority class samples"],"best_for":["Data scientists building fraud detection or anomaly detection models","Teams working with imbalanced medical or financial datasets","Developers optimizing for specific metrics (precision, recall) instead of accuracy"],"limitations":["class_weight='balanced' is a heuristic; optimal weights depend on domain and cost of misclassification","No built-in resampling strategies (SMOTE, undersampling); requires imbalanced-learn library","Class weights can slow training and increase memory usage for very imbalanced datasets"],"requires":["Python 3.9+","NumPy 1.17.3+","SciPy 1.1.0+"],"input_types":["NumPy arrays with imbalanced class distribution","Pandas DataFrames"],"output_types":["Trained classifiers with adjusted decision boundaries","Sample weights (for manual resampling)"],"categories":["data-processing-analysis","machine-learning"],"confidence":0.5,"matches":0,"success_rate":0},{"id":"pypi_pypi-scikit-learn__cap_11","uri":"capability://data.processing.analysis.multiclass.and.multilabel.classification.support","name":"multiclass and multilabel classification support","description":"Provides built-in support for multiclass classification (>2 classes) and multilabel classification (multiple labels per sample) across all classifiers. Multiclass uses one-vs-rest (OvR) or one-vs-one (OvO) strategies internally; multilabel uses binary relevance or classifier chains. All classifiers automatically detect the problem type from the target variable shape and apply appropriate strategies without manual configuration.","intents":["Train classifiers on problems with >2 classes without manual one-vs-rest encoding","Handle multilabel problems where samples can belong to multiple classes simultaneously","Automatically select appropriate multiclass strategy based on the problem"],"best_for":["Data scientists building multiclass classification models (e.g., image classification with 10+ classes)","Teams working on multilabel problems (e.g., document tagging, multi-label image classification)","Developers building general-purpose classification pipelines"],"limitations":["One-vs-rest and one-vs-one strategies scale poorly with number of classes (>100 classes)","Multilabel support is limited; no built-in label correlation modeling","No automatic class imbalance handling across multiple classes; requires manual class weighting"],"requires":["Python 3.9+","NumPy 1.17.3+","SciPy 1.1.0+"],"input_types":["Target arrays with shape (n_samples,) for multiclass","Target arrays with shape (n_samples, n_labels) for multilabel (binary or sparse)"],"output_types":["Predictions (class labels for multiclass, binary matrix for multilabel)","Probability estimates (shape: n_samples, n_classes)"],"categories":["data-processing-analysis","machine-learning"],"confidence":0.5,"matches":0,"success_rate":0},{"id":"pypi_pypi-scikit-learn__cap_12","uri":"capability://data.processing.analysis.regression.with.multiple.output.targets","name":"regression with multiple output targets","description":"Provides MultiOutputRegressor and MultiOutputClassifier wrappers that enable any single-output estimator to handle multiple target variables simultaneously. Internally trains separate models for each target, then combines predictions. Enables multi-target regression (predicting multiple continuous outputs) without manual model duplication or custom training loops.","intents":["Train a single model to predict multiple continuous outputs simultaneously","Reduce code duplication when building models for related prediction tasks","Share feature representations across multiple prediction targets"],"best_for":["Data scientists building multi-output regression models (e.g., predicting temperature and humidity)","Teams with related prediction tasks that share features","Developers building general-purpose regression pipelines"],"limitations":["MultiOutputRegressor trains independent models per target; no target correlation modeling","No built-in multi-task learning or shared representations; each target uses separate parameters","Prediction time scales linearly with number of targets"],"requires":["Python 3.9+","NumPy 1.17.3+","SciPy 1.1.0+"],"input_types":["Feature arrays (n_samples, n_features)","Target arrays with shape (n_samples, n_targets)"],"output_types":["Predictions with shape (n_samples, n_targets)","Per-target feature importances (for tree-based models)"],"categories":["data-processing-analysis","machine-learning"],"confidence":0.5,"matches":0,"success_rate":0},{"id":"pypi_pypi-scikit-learn__cap_13","uri":"capability://data.processing.analysis.sample.weighting.and.custom.loss.functions","name":"sample weighting and custom loss functions","description":"Provides sample_weight parameter on fit() methods of classifiers and regressors, enabling per-sample importance weighting during training. Allows assigning higher weights to important samples or correcting for sampling bias. Also supports custom loss functions via loss parameter on some estimators (e.g., SGDClassifier), enabling domain-specific optimization objectives without reimplementing training loops.","intents":["Train models on weighted datasets where some samples are more important than others","Correct for sampling bias or class imbalance using sample weights","Optimize for custom loss functions instead of standard cross-entropy or MSE"],"best_for":["Data scientists correcting for sampling bias or survey weights","Teams optimizing for domain-specific loss functions (e.g., asymmetric costs)","Developers building cost-sensitive learning systems"],"limitations":["Sample weights are not supported by all estimators (e.g., tree-based models have limited support)","Custom loss functions are limited to SGD-based estimators; no support for other algorithms","No built-in automatic weight computation; requires manual specification or external libraries"],"requires":["Python 3.9+","NumPy 1.17.3+","SciPy 1.1.0+"],"input_types":["Feature arrays (n_samples, n_features)","Target arrays (n_samples,)","Sample weight arrays (n_samples,)"],"output_types":["Trained estimators with weighted loss"],"categories":["data-processing-analysis","machine-learning"],"confidence":0.5,"matches":0,"success_rate":0},{"id":"pypi_pypi-scikit-learn__cap_2","uri":"capability://data.processing.analysis.feature.engineering.and.preprocessing.with.composable.transformers","name":"feature engineering and preprocessing with composable transformers","description":"Provides 30+ preprocessing transformers (StandardScaler, MinMaxScaler, OneHotEncoder, PolynomialFeatures, SimpleImputer, etc.) that implement the Transformer interface with fit(X) and transform(X) methods. Transformers can be chained into sklearn.pipeline.Pipeline objects, enabling reproducible feature engineering workflows where fit() is called only on training data and transform() applies learned statistics to test data, preventing data leakage.","intents":["Normalize or standardize features to zero mean and unit variance before training","Encode categorical variables into numerical representations","Handle missing values with mean/median/forward-fill imputation","Create polynomial or interaction features for non-linear relationships"],"best_for":["Data scientists building reproducible preprocessing pipelines","Teams preventing data leakage in train/test splits","Developers automating feature engineering in production systems"],"limitations":["Transformers are stateless between fit() and transform() — no streaming or online learning","OneHotEncoder creates sparse matrices that can explode memory for high-cardinality features (>10k unique values)","No built-in feature selection or automated feature engineering; requires manual selection or external libraries"],"requires":["Python 3.9+","NumPy 1.17.3+","SciPy 1.1.0+","Pandas 1.0.5+ for DataFrame support"],"input_types":["NumPy arrays","Pandas DataFrames","Sparse matrices"],"output_types":["Transformed NumPy arrays or sparse matrices","Pandas DataFrames (with column names preserved)"],"categories":["data-processing-analysis","machine-learning"],"confidence":0.5,"matches":0,"success_rate":0},{"id":"pypi_pypi-scikit-learn__cap_3","uri":"capability://planning.reasoning.hyperparameter.tuning.with.grid.search.and.randomized.search","name":"hyperparameter tuning with grid search and randomized search","description":"Provides GridSearchCV and RandomizedSearchCV classes that perform exhaustive or randomized hyperparameter optimization using cross-validation. GridSearchCV evaluates all combinations of hyperparameters in a specified grid; RandomizedSearchCV samples random combinations. Both use k-fold cross-validation to estimate generalization performance and support parallel evaluation via the n_jobs parameter, which distributes folds across CPU cores using joblib's parallel backend.","intents":["Find optimal hyperparameters for a model without manual trial-and-error","Evaluate model performance robustly using cross-validation","Parallelize hyperparameter search across multiple CPU cores"],"best_for":["Data scientists tuning models for competitions or production","Teams with multi-core machines wanting to speed up hyperparameter optimization","Developers building AutoML systems with limited search budgets"],"limitations":["GridSearchCV is exponential in the number of hyperparameters — 5 hyperparameters with 5 values each = 3,125 evaluations","No support for Bayesian optimization or other advanced search strategies; RandomizedSearchCV is naive random sampling","Cross-validation overhead adds 5-10x training time compared to single train/test split"],"requires":["Python 3.9+","NumPy 1.17.3+","SciPy 1.1.0+","Joblib 1.1.1+ for parallel execution"],"input_types":["NumPy arrays","Pandas DataFrames","Sparse matrices"],"output_types":["Best hyperparameters (dict)","Best cross-validation score (float)","Full results DataFrame with all parameter combinations and scores"],"categories":["planning-reasoning","machine-learning"],"confidence":0.5,"matches":0,"success_rate":0},{"id":"pypi_pypi-scikit-learn__cap_4","uri":"capability://data.processing.analysis.model.evaluation.with.cross.validation.and.scoring.metrics","name":"model evaluation with cross-validation and scoring metrics","description":"Provides cross_val_score(), cross_validate(), and cross_val_predict() functions that split data into k folds, train on k-1 folds, and evaluate on the held-out fold, repeating k times to estimate generalization performance. Supports 20+ built-in scoring metrics (accuracy, precision, recall, F1, AUC-ROC, MSE, R², etc.) and custom scoring functions. Returns arrays of fold scores enabling statistical analysis (mean, std) of model performance.","intents":["Estimate how well a model will generalize to unseen data","Compare multiple models using the same cross-validation splits","Detect overfitting by comparing training vs cross-validation scores"],"best_for":["Data scientists validating model performance before deployment","Teams comparing multiple algorithms on the same dataset","Developers building model selection pipelines"],"limitations":["k-fold cross-validation assumes data is i.i.d.; time-series data requires StratifiedKFold or TimeSeriesSplit","Stratification is not automatic for imbalanced classification — requires explicit StratifiedKFold","No built-in support for nested cross-validation (required for unbiased hyperparameter tuning)"],"requires":["Python 3.9+","NumPy 1.17.3+","SciPy 1.1.0+"],"input_types":["NumPy arrays","Pandas DataFrames","Sparse matrices"],"output_types":["Arrays of fold scores (shape: n_folds,)","Predictions on all samples (cross_val_predict)","Dict of multiple metrics per fold"],"categories":["data-processing-analysis","machine-learning"],"confidence":0.5,"matches":0,"success_rate":0},{"id":"pypi_pypi-scikit-learn__cap_5","uri":"capability://data.processing.analysis.ensemble.methods.combining.multiple.models","name":"ensemble methods combining multiple models","description":"Implements ensemble algorithms (RandomForest, GradientBoostingClassifier, AdaBoost, VotingClassifier, StackingClassifier, BaggingClassifier) that combine predictions from multiple base estimators to reduce variance or bias. RandomForest trains multiple decision trees on random subsets of features and samples, averaging predictions. StackingClassifier trains a meta-learner on predictions from base estimators. All ensembles support parallel training via n_jobs parameter.","intents":["Reduce model variance by averaging predictions from multiple trees or models","Combine diverse algorithms (e.g., SVM + logistic regression) to improve robustness","Boost weak learners iteratively to create a strong ensemble"],"best_for":["Data scientists building high-accuracy models for competitions or production","Teams with multi-core machines wanting to parallelize ensemble training","Developers building model stacking pipelines"],"limitations":["RandomForest is slower than single decision trees but more robust; training time scales linearly with n_estimators","GradientBoosting is sequential — cannot parallelize across boosting iterations, only within tree construction","StackingClassifier requires careful cross-validation to avoid data leakage when training the meta-learner"],"requires":["Python 3.9+","NumPy 1.17.3+","SciPy 1.1.0+","Joblib 1.1.1+ for parallel training"],"input_types":["NumPy arrays","Pandas DataFrames","Sparse matrices (limited support for tree-based ensembles)"],"output_types":["Predictions (class labels or continuous values)","Probability estimates","Feature importances (for tree-based ensembles)"],"categories":["data-processing-analysis","machine-learning"],"confidence":0.5,"matches":0,"success_rate":0},{"id":"pypi_pypi-scikit-learn__cap_6","uri":"capability://data.processing.analysis.tree.based.model.interpretation.with.feature.importance.and.tree.visualization","name":"tree-based model interpretation with feature importance and tree visualization","description":"Provides feature_importances_ attribute on tree-based models (DecisionTreeClassifier, RandomForestClassifier, GradientBoostingClassifier) that ranks features by their contribution to predictions using Gini impurity or information gain. Also provides tree.plot_tree() and tree.export_text() functions to visualize decision trees as ASCII or graphical representations, enabling model interpretability without black-box predictions.","intents":["Understand which features drive model predictions","Visualize decision trees to explain predictions to non-technical stakeholders","Identify feature engineering opportunities by analyzing feature importance"],"best_for":["Data scientists explaining model decisions to business stakeholders","Teams building interpretable models for regulated industries (finance, healthcare)","Developers debugging model behavior or detecting data quality issues"],"limitations":["Feature importance is based on training data splits, not true causal importance","Tree visualization becomes unreadable for trees deeper than 5-6 levels","Gini-based importance is biased toward high-cardinality features; permutation importance requires separate computation"],"requires":["Python 3.9+","NumPy 1.17.3+","Matplotlib 3.1.2+ for tree visualization"],"input_types":["Trained tree-based estimators"],"output_types":["Feature importance arrays (shape: n_features,)","ASCII tree representation (text)","Matplotlib figure objects (graphical trees)"],"categories":["data-processing-analysis","machine-learning"],"confidence":0.5,"matches":0,"success_rate":0},{"id":"pypi_pypi-scikit-learn__cap_7","uri":"capability://data.processing.analysis.text.feature.extraction.and.vectorization","name":"text feature extraction and vectorization","description":"Provides CountVectorizer, TfidfVectorizer, and HashingVectorizer classes that convert raw text documents into numerical feature matrices. CountVectorizer builds a vocabulary and counts term occurrences; TfidfVectorizer applies term frequency-inverse document frequency weighting to downweight common words. Both support n-grams, stop word removal, and vocabulary limits. Output is sparse matrices (scipy.sparse.csr_matrix) to handle high-dimensional text data efficiently.","intents":["Convert text documents into numerical features for machine learning","Build a vocabulary and apply TF-IDF weighting to text data","Extract n-grams (bigrams, trigrams) to capture word sequences"],"best_for":["Data scientists building text classification or sentiment analysis models","Teams processing large text corpora with memory constraints (sparse matrices)","Developers building NLP pipelines without deep learning"],"limitations":["Bag-of-words approach ignores word order and semantic meaning; no word embeddings","Vocabulary size grows linearly with corpus size; high-cardinality vocabularies (>100k terms) consume significant memory","No built-in support for language-specific preprocessing (stemming, lemmatization); requires external libraries like NLTK"],"requires":["Python 3.9+","NumPy 1.17.3+","SciPy 1.1.0+"],"input_types":["List of text strings","File paths (with input='filename' parameter)"],"output_types":["Sparse CSR matrices (n_documents, n_features)","Vocabulary dict (term -> feature index)"],"categories":["data-processing-analysis","text-generation-language"],"confidence":0.5,"matches":0,"success_rate":0},{"id":"pypi_pypi-scikit-learn__cap_8","uri":"capability://data.processing.analysis.distance.metrics.and.similarity.computation","name":"distance metrics and similarity computation","description":"Provides pairwise_distances(), pairwise_kernels(), and cosine_similarity() functions that compute distance or similarity matrices between samples using 20+ metrics (Euclidean, Manhattan, Cosine, Hamming, Jaccard, etc.). Supports both dense and sparse input matrices. Distance metrics are used internally by clustering (K-Means, DBSCAN) and nearest-neighbor algorithms (KNeighborsClassifier, KNeighborsRegressor).","intents":["Compute pairwise distances between samples for clustering or nearest-neighbor search","Apply custom distance metrics (e.g., Hamming for binary data) without reimplementing algorithms","Compute kernel matrices for kernel-based methods (SVM, kernel ridge regression)"],"best_for":["Data scientists building custom clustering or similarity-based systems","Teams working with non-Euclidean data (text, graphs, categorical)","Developers optimizing nearest-neighbor search with custom metrics"],"limitations":["Computing full pairwise distance matrices is O(n²) in memory and time; infeasible for >100k samples","No built-in approximate nearest-neighbor search (ANN); requires external libraries like Annoy or Faiss","Custom distance metrics must be implemented in Python, limiting performance for large-scale applications"],"requires":["Python 3.9+","NumPy 1.17.3+","SciPy 1.1.0+"],"input_types":["NumPy arrays (n_samples, n_features)","Sparse matrices"],"output_types":["Dense distance matrices (n_samples, n_samples)","Sparse distance matrices (for sparse input)"],"categories":["data-processing-analysis","machine-learning"],"confidence":0.5,"matches":0,"success_rate":0},{"id":"pypi_pypi-scikit-learn__cap_9","uri":"capability://automation.workflow.model.persistence.and.serialization.with.joblib","name":"model persistence and serialization with joblib","description":"Integrates joblib.dump() and joblib.load() for saving and loading trained models to disk. Joblib uses pickle-based serialization optimized for NumPy arrays and large objects, supporting compression and parallel I/O. Enables reproducible model deployment by persisting fitted estimators, scalers, and entire pipelines without retraining.","intents":["Save trained models to disk for later inference without retraining","Deploy models to production by loading persisted estimators","Share trained models across teams or environments"],"best_for":["Data scientists deploying models to production systems","Teams sharing trained models across environments","Developers building model serving systems"],"limitations":["Joblib serialization is Python-specific; models cannot be loaded in other languages (R, Java, C++)","Large models (>1GB) can be slow to serialize/deserialize; no streaming or incremental loading","Security risk: unpickling untrusted models can execute arbitrary code; requires trusted model sources"],"requires":["Python 3.9+","Joblib 1.1.1+"],"input_types":["Trained sklearn estimators, pipelines, or transformers"],"output_types":["Binary .pkl or .joblib files"],"categories":["automation-workflow","machine-learning"],"confidence":0.5,"matches":0,"success_rate":0}],"trust":{"score":25,"verified":false,"data_access_risk":"low","permissions":["Python 3.9+","NumPy 1.17.3+","SciPy 1.1.0+","Joblib 1.1.1+ for parallelization","Pandas 1.0.5+ for DataFrame support","Joblib 1.1.1+ for parallel execution","Joblib 1.1.1+ for parallel training","Matplotlib 3.1.2+ for tree visualization","Joblib 1.1.1+"],"failure_modes":["Unified API abstracts away algorithm-specific tuning parameters, requiring separate documentation per model","No native distributed training — single-machine only, scales to ~100GB RAM","Slower than specialized frameworks (XGBoost, LightGBM) for gradient boosting tasks due to pure Python implementation","K-Means requires pre-specifying cluster count; no automatic selection built-in","t-SNE and UMAP are slow on large datasets (>100k samples) and non-deterministic","PCA assumes linear relationships; nonlinear manifold learning requires external packages","class_weight='balanced' is a heuristic; optimal weights depend on domain and cost of misclassification","No built-in resampling strategies (SMOTE, undersampling); requires imbalanced-learn library","Class weights can slow training and increase memory usage for very imbalanced datasets","One-vs-rest and one-vs-one strategies scale poorly with number of classes (>100 classes)","builder identity is not verified yet","no observed match outcomes yet"],"rank_breakdown":{"adoption":0.05,"quality":0.35,"ecosystem":0.3,"match_graph":0.25,"freshness":0.9,"weights":{"adoption":0.3,"quality":0.2,"ecosystem":0.15,"match_graph":0.3,"freshness":0.05}},"observed_outcomes":{"matches":0,"success_rate":0,"avg_confidence":0,"top_intents":[],"last_matched_at":null},"maintenance":{"status":"active","updated_at":"2026-05-24T12:16:25.060Z","last_scraped_at":"2026-05-03T15:20:16.568Z","last_commit":null},"community":{"stars":null,"forks":null,"weekly_downloads":null,"model_downloads":null,"model_likes":null}},"distribution":{"claim_url":"https://unfragile.ai/submit?claim=pypi-scikit-learn","compare_url":"https://unfragile.ai/compare?artifact=pypi-scikit-learn"}},"signature":"Ypbfu23Yu9DCmCt9TNck7uavUnEanqF7y/c/nl1gbJiUo0/nxUwDO1vOwsl9XuDW1mSfXd9sKoIIbayiFGtLCA==","signedAt":"2026-06-15T18:05:24.368Z","signedBy":"unfragile.ai","version":1},"_links":{"self":"https://unfragile.ai/api/v1/passport/pypi-scikit-learn","artifact":"https://unfragile.ai/pypi-scikit-learn","verify":"https://unfragile.ai/api/v1/verify?slug=pypi-scikit-learn","publicKey":"https://unfragile.ai/api/v1/trust-passport-public-key","spec":"https://unfragile.ai/trust","schema":"https://unfragile.ai/schema.json","docs":"https://unfragile.ai/docs"}}