Example 08
intermediate
08
Datasets
ML
Metrics
Preprocessing

Logistic Regression

Build a binary classification model using logistic regression. Learn to classify data into two categories using the Iris dataset. This example uses deepbox/datasets, deepbox/ml, deepbox/metrics, deepbox/preprocess and focuses on loadIris; LogisticRegression; accuracy, precision, recall, f1Score, confusionMatrix; trainTestSplit, StandardScaler.

Deepbox Modules Used

deepbox/datasetsdeepbox/mldeepbox/metricsdeepbox/preprocess

What You Will Learn

  • Use deepbox/datasets for loadIris.
  • Use deepbox/ml for LogisticRegression.
  • Use deepbox/metrics for accuracy, precision, recall, f1Score, confusionMatrix.
  • Use deepbox/preprocess for trainTestSplit, StandardScaler.
  • Build a binary classification model using logistic regression. Learn to classify data into two categories using the Iris dataset.

Source Files

index.ts
1/**2 * Example 08: Logistic Regression3 *4 * Build a binary classification model using logistic regression.5 * Learn to classify data into two categories.6 */78import { loadIris } from "deepbox/datasets";9import { accuracy, confusionMatrix, f1Score, precision, recall } from "deepbox/metrics";10import { LogisticRegression } from "deepbox/ml";11import { tensor } from "deepbox/ndarray";12import { StandardScaler, trainTestSplit } from "deepbox/preprocess";1314console.log("=== Logistic Regression ===\n");1516// Load the famous Iris dataset for classification17const iris = loadIris();18console.log(`Dataset: ${iris.data.shape[0]} samples, ${iris.data.shape[1]} features\n`);1920// Simplify to binary classification: setosa (0) vs non-setosa (1)21const y_binary: number[] = [];22// Convert multi-class labels to binary23for (let i = 0; i < iris.target.size; i++) {24  const label = Number(iris.target.data[iris.target.offset + i]);25  // Map setosa to 0 and other classes to 126  y_binary.push(label === 0 ? 0 : 1);27}28const y = tensor(y_binary);2930// Split into train (70%) and test (30%) sets31const [X_train, X_test, y_train, y_test] = trainTestSplit(iris.data, y, {32  testSize: 0.3,33  randomState: 42,34});3536console.log(`Training set: ${X_train.shape[0]} samples`);37console.log(`Test set: ${X_test.shape[0]} samples\n`);3839// Standardize features (mean=0, std=1) for better convergence40const scaler = new StandardScaler();41scaler.fit(X_train);42const X_train_scaled = scaler.transform(X_train);43const X_test_scaled = scaler.transform(X_test);4445console.log("Features scaled\n");4647// Create and train logistic regression classifier48const model = new LogisticRegression({ maxIter: 1000, learningRate: 0.1 });49model.fit(X_train_scaled, y_train);5051console.log("Model trained!\n");5253// Make predictions on test data54const y_pred = model.predict(X_test_scaled);5556// Calculate classification metrics57const acc = accuracy(y_test, y_pred);58const prec = precision(y_test, y_pred);59const rec = recall(y_test, y_pred);60const f1 = f1Score(y_test, y_pred);6162console.log("Model Performance:");63console.log(`Accuracy:  ${(Number(acc) * 100).toFixed(2)}%`);64console.log(`Precision: ${(Number(prec) * 100).toFixed(2)}%`);65console.log(`Recall:    ${(Number(rec) * 100).toFixed(2)}%`);66console.log(`F1-Score:  ${(Number(f1) * 100).toFixed(2)}%\n`);6768const cm = confusionMatrix(y_test, y_pred);69console.log("Confusion Matrix:");70console.log(cm.toString());7172console.log("\n✓ Logistic regression complete!");73

Console Output

$ npx tsx 08-logistic-regression/index.ts
Console output showing classification metrics and confusion matrix