@@ -41,6 +41,9 @@ let new_point = Matrix::from_vec(vec![0.0, 0.0], 1, 2);
let cluster = model . predict ( & new_point )[ 0 ];
```
For helper functions and upcoming modules, visit the
[utilities ](./utilities.md ) section.
## Logistic Regression
```rust
@@ -69,7 +72,7 @@ let transformed = pca.transform(&data);
assert_eq! ( transformed . cols (), 1 );
```
## Gaussian Naive Bayes
### Gaussian Naive Bayes
Gaussian Naive Bayes classifier for continuous features:
@@ -98,7 +101,7 @@ let predictions = model.predict(&x);
assert_eq! ( predictions . rows (), 4 );
```
## Dense Neural Networks
### Dense Neural Networks
Simple fully connected neural network:
@@ -139,144 +142,5 @@ let predictions = model.predict(&x);
assert_eq! ( predictions . rows (), 4 );
```
## Real-world Examples
### Housing Price Prediction
```rust
# extern crate rustframe ;
use rustframe ::compute ::models ::linreg ::LinReg ;
use rustframe ::matrix ::Matrix ;
// Features: square feet and bedrooms
let features = Matrix ::from_rows_vec ( vec! [
2100.0 , 3.0 ,
1600.0 , 2.0 ,
2400.0 , 4.0 ,
1400.0 , 2.0 ,
], 4 , 2 );
// Sale prices
let target = Matrix ::from_vec ( vec! [ 400_000.0 , 330_000.0 , 369_000.0 , 232_000.0 ], 4 , 1 );
let mut model = LinReg ::new ( 2 );
model . fit ( & features , & target , 1e-8 , 10_000 );
// Predict price of a new home
let new_home = Matrix ::from_vec ( vec! [ 2000.0 , 3.0 ], 1 , 2 );
let predicted_price = model . predict ( & new_home );
println! ( "Predicted price: $ {} " , predicted_price . data ()[ 0 ]);
```
### Spam Detection
```rust
# extern crate rustframe ;
use rustframe ::compute ::models ::logreg ::LogReg ;
use rustframe ::matrix ::Matrix ;
// 20 e-mails × 5 features = 100 numbers (row-major, spam first)
let x = Matrix ::from_rows_vec (
vec! [
// ─────────── spam examples ───────────
2.0 , 1.0 , 1.0 , 1.0 , 1.0 , // "You win a FREE offer - click for money-back bonus!"
1.0 , 0.0 , 1.0 , 1.0 , 0.0 , // "FREE offer! Click now!"
0.0 , 2.0 , 0.0 , 1.0 , 1.0 , // "Win win win - money inside, click…"
1.0 , 1.0 , 0.0 , 0.0 , 1.0 , // "Limited offer to win easy money…"
1.0 , 0.0 , 1.0 , 0.0 , 1.0 , // ...
0.0 , 1.0 , 1.0 , 1.0 , 0.0 , // ...
2.0 , 0.0 , 0.0 , 1.0 , 1.0 , // ...
0.0 , 1.0 , 1.0 , 0.0 , 1.0 , // ...
1.0 , 1.0 , 1.0 , 1.0 , 0.0 , // ...
1.0 , 0.0 , 0.0 , 1.0 , 1.0 , // ...
// ─────────── ham examples ───────────
0.0 , 0.0 , 0.0 , 0.0 , 0.0 , // "See you at the meeting tomorrow."
0.0 , 0.0 , 0.0 , 1.0 , 0.0 , // "Here's the Zoom click-link."
0.0 , 0.0 , 0.0 , 0.0 , 1.0 , // "Expense report: money attached."
0.0 , 0.0 , 0.0 , 1.0 , 1.0 , // ...
0.0 , 1.0 , 0.0 , 0.0 , 0.0 , // "Did we win the bid?"
0.0 , 0.0 , 0.0 , 0.0 , 0.0 , // ...
0.0 , 0.0 , 0.0 , 1.0 , 0.0 , // ...
1.0 , 0.0 , 0.0 , 0.0 , 0.0 , // "Special offer for staff lunch."
0.0 , 0.0 , 0.0 , 0.0 , 0.0 , // ...
0.0 , 0.0 , 0.0 , 1.0 , 0.0 ,
],
20 ,
5 ,
);
// Labels: 1 = spam, 0 = ham
let y = Matrix ::from_vec (
vec! [
1.0 , 1.0 , 1.0 , 1.0 , 1.0 , 1.0 , 1.0 , 1.0 , 1.0 , 1.0 , // 10 spam
0.0 , 0.0 , 0.0 , 0.0 , 0.0 , 0.0 , 0.0 , 0.0 , 0.0 , 0.0 , // 10 ham
],
20 ,
1 ,
);
// Train
let mut model = LogReg ::new ( 5 );
model . fit ( & x , & y , 0.01 , 5000 );
// Predict
// e.g. "free money offer"
let email_data = vec! [ 1.0 , 0.0 , 1.0 , 0.0 , 1.0 ];
let email = Matrix ::from_vec ( email_data , 1 , 5 );
let prob_spam = model . predict_proba ( & email );
println! ( "Probability of spam: {:.4} " , prob_spam . data ()[ 0 ]);
```
### Iris Flower Classification
```rust
# extern crate rustframe ;
use rustframe ::compute ::models ::gaussian_nb ::GaussianNB ;
use rustframe ::matrix ::Matrix ;
// Features: sepal length and petal length
let x = Matrix ::from_rows_vec ( vec! [
5.1 , 1.4 , // setosa
4.9 , 1.4 , // setosa
6.2 , 4.5 , // versicolor
5.9 , 5.1 , // virginica
], 4 , 2 );
let y = Matrix ::from_vec ( vec! [ 0.0 , 0.0 , 1.0 , 2.0 ], 4 , 1 );
let names = vec! [ "setosa" , "versicolor" , "virginica" ];
let mut model = GaussianNB ::new ( 1e-9 , true );
model . fit ( & x , & y );
let sample = Matrix ::from_vec ( vec! [ 5.0 , 1.5 ], 1 , 2 );
let predicted_class = model . predict ( & sample );
let class_name = names [ predicted_class . data ()[ 0 ] as usize ];
println! ( "Predicted class: {} ( {:?} )" , class_name , predicted_class . data ()[ 0 ]);
```
### Customer Segmentation
```rust
# extern crate rustframe ;
use rustframe ::compute ::models ::k_means ::KMeans ;
use rustframe ::matrix ::Matrix ;
// Each row: [age, annual_income]
let customers = Matrix ::from_rows_vec (
vec! [
25.0 , 40_000.0 , 34.0 , 52_000.0 , 58.0 , 95_000.0 , 45.0 , 70_000.0 ,
],
4 ,
2 ,
);
let ( model , labels ) = KMeans ::fit ( & customers , 2 , 20 , 1e-4 );
let new_customer = Matrix ::from_vec ( vec! [ 30.0 , 50_000.0 ], 1 , 2 );
let cluster = model . predict ( & new_customer )[ 0 ];
println! ( "New customer belongs to cluster: {} " , cluster );
println! ( "Cluster labels: {:?} " , labels );
```
For helper functions and upcoming modules, visit the
[utilities ](./utilities.md ) section.