Metadata-Version: 2.4
Name: shilpa-j-ml-package
Version: 1.0.0
Summary: A simple machine learning package built from scratch
Author: Shilpa J
License-Expression: MIT
Classifier: Programming Language :: Python :: 3
Requires-Python: >=3.10
Description-Content-Type: text/markdown
License-File: LICENSE
Requires-Dist: numpy
Requires-Dist: pandas
Requires-Dist: matplotlib
Dynamic: license-file
Dynamic: requires-python

# ml_package

A custom machine learning library built from scratch — no sklearn dependency for core algorithms.

## Algorithms Included

| Module | Classes |
|--------|---------|
| `linear_models` | `LinearRegression` (OLS), `Ridge` (L2), `Lasso` (L1), `ForwardSelection`, `BackwardElimination` |
| `decomposition` | `PCA` |
| `neighbors` | `KNNClassifier` (city-block distance) |
| `neural_network` | `NeuralNetwork`, `Perceptron` |
| `preprocessing` | `StandardScaler`, `MinMaxScaler`, `SimpleImputer`, `OutlierHandler`, `LabelEncoder`, `OneHotEncoder`, `Normalizer` |
| `metrics` | `r2_score`, `rmse`, `mae`, `accuracy_score`, `confusion_matrix`, `f1_score` |
| `model_selection` | `train_test_split` |
| `pipeline` | `Pipeline` |

## Install

```bash
pip install -e .
```

## Quick Start

```python
import numpy as np
from ml_package.linear_models.linear_regression import LinearRegression
from ml_package.metrics.regression import r2_score

X = np.random.randn(100, 3)
y = 3*X[:,0] + 2*X[:,1] + np.random.randn(100)*0.5

model = LinearRegression()
model.fit(X, y)
print(r2_score(y, model.predict(X)))

# Check all assumptions
model.check_normality()
model.check_multicollinearity()
model.check_heteroscedasticity()
model.plot_diagnostics()
```

```python
from ml_package.decomposition.pca import PCA

pca = PCA(n_components=2)
X_pca = pca.fit_transform(X)
pca.plot_components(X)
```

```python
from ml_package.neighbors.knn_classifier import KNNClassifier

knn = KNNClassifier(k=3, metric="cityblock")
knn.fit(X_train, y_train)
preds = knn.predict(X_test)
```

```python
from ml_package.neural_network.neural_network import NeuralNetwork
from ml_package.neural_network.perceptron import Perceptron

nn = NeuralNetwork(hidden_size=8, learning_rate=0.05, max_iter=1000)
nn.fit(X, y)

p = Perceptron(learning_rate=0.1, max_iter=200)
p.fit(X, y)
```

## Run Tests

```bash
cd tests
python test_linear_regression.py
python test_pca.py
python test_knn.py
python test_neural_network.py
```

## License
MIT
