Metadata-Version: 2.4
Name: skjson
Version: 0.1.2
Summary: Export scikit-learn models to JSON for cross-language inference
License-Expression: MIT
Requires-Python: >=3.9
Requires-Dist: joblib>=1.0
Requires-Dist: numpy>=1.21
Requires-Dist: onnx>=1.12
Requires-Dist: scikit-learn>=1.0
Requires-Dist: skl2onnx>=1.14
Provides-Extra: dev
Requires-Dist: pytest-cov; extra == 'dev'
Requires-Dist: pytest>=7.0; extra == 'dev'
Description-Content-Type: text/markdown

# skjson

Export scikit-learn models to JSON for cross-language inference.

## Related repos
1. Running inference using npm package: [`skjson-js`](https://github.com/hongyaok/skjson-js)
2. Check out the [demo](https://skjson-js.vercel.app/)

## Installation

```bash
pip install skjson
```

## Quick Start

Check out the [demo notebook](demo.ipynb) for an example training a Random Forest on the Iris dataset:

```python
from sklearn.datasets import load_iris
from sklearn.ensemble import RandomForestClassifier
from sklearn.model_selection import train_test_split
import skjson

# Load the Iris dataset and split
X, y = load_iris(return_X_y=True)
X_train, X_test, y_train, y_test = train_test_split(X, y, test_size=0.2, random_state=42)

# Train a Random Forest classifier
clf = RandomForestClassifier(random_state=42)
clf.fit(X_train, y_train)

# Export the trained model to JSON
skjson.save(clf, 'demo.json')

# Load and reuse the model
predictor = skjson.load("demo.json")
```

## Convert from Joblib and ONNX

skjson supports converting sklearn models directly from **joblib** and **ONNX** format without the need to load the model in Python first.

### Convert from Joblib

```python
import skjson

# Convert a joblib-serialized sklearn model to JSON
skjson.joblib_to_json("model.joblib")
# → Creates "model.json" in the same directory

# Or specify a custom output path and feature names
skjson.joblib_to_json(
    "model.joblib",
    output_path="output/model.json",
    feature_names=["sepal_length", "sepal_width", "petal_length", "petal_width"]
)
```

### Convert from ONNX

Works with ONNX models exported from sklearn using [`skl2onnx`](https://github.com/onnx/sklearn-onnx):

```python
import skjson

# Convert an ONNX model to JSON
skjson.onnx_to_json("model.onnx")
# → Creates "model.json" in the same directory

# Or specify a custom output path
skjson.onnx_to_json("model.onnx", output_path="output/model.json")
```

**Supported ONNX model types** (exported from sklearn via `skl2onnx`):

| ONNX Operator | sklearn Model |
|---|---|
| `LinearRegressor` | `LinearRegression`, `Ridge`, `Lasso`, `ElasticNet` |
| `LinearClassifier` | `LogisticRegression` |
| `TreeEnsembleClassifier` | `DecisionTreeClassifier`, `RandomForestClassifier` |
| `TreeEnsembleRegressor` | `DecisionTreeRegressor`, `RandomForestRegressor` |
| `SVMClassifier` | `SVC`, `LinearSVC` |
| `SVMRegressor` | `SVR` |

## Supported models for conversion

**Linear Models (`sklearn.linear_model`)**
- `LinearRegression`, `Ridge`, `Lasso`, `ElasticNet`
- `LogisticRegression`

**Tree-based Models (`sklearn.tree`, `sklearn.ensemble`)**
- `DecisionTreeClassifier`, `DecisionTreeRegressor`
- `RandomForestClassifier`, `RandomForestRegressor`
- `GradientBoostingClassifier`, `GradientBoostingRegressor`

**Support Vector Machines (`sklearn.svm`)**
- `SVC`, `SVR`, `LinearSVC`

**Neighbors (`sklearn.neighbors`)**
- `KNeighborsClassifier`, `KNeighborsRegressor`

**Naive Bayes (`sklearn.naive_bayes`)**
- `GaussianNB`

**Preprocessing (`sklearn.preprocessing`)**
- `StandardScaler`, `MinMaxScaler`, `LabelEncoder`

## Future Directions

- Support for scikit-learn `Pipeline` objects and feature unions.
- npm package for inference using our json models
- Support for sklearn.neural_network models

## Note
- This project built with Google Gemini and Claude Opus.
- If you wish to contribute, please contact me. 
