Some checks failed
CI/CD Pipeline / Code Linting (push) Failing after 22s
CI/CD Pipeline / Build and Test (Debug, clang, ubuntu-latest) (push) Failing after 5m44s
CI/CD Pipeline / Build and Test (Debug, gcc, ubuntu-latest) (push) Failing after 5m33s
CI/CD Pipeline / Build and Test (Release, clang, ubuntu-20.04) (push) Failing after 6m12s
CI/CD Pipeline / Build and Test (Release, clang, ubuntu-latest) (push) Failing after 5m13s
CI/CD Pipeline / Build and Test (Release, gcc, ubuntu-20.04) (push) Failing after 5m30s
CI/CD Pipeline / Build and Test (Release, gcc, ubuntu-latest) (push) Failing after 5m33s
CI/CD Pipeline / Docker Build Test (push) Failing after 13s
CI/CD Pipeline / Performance Benchmarks (push) Has been skipped
CI/CD Pipeline / Build Documentation (push) Successful in 31s
CI/CD Pipeline / Create Release Package (push) Has been skipped
316 lines
6.7 KiB
Markdown
316 lines
6.7 KiB
Markdown
# Quick Start Guide
|
|
|
|
Get up and running with SVM Classifier C++ in minutes!
|
|
|
|
## 🚀 One-Line Installation
|
|
|
|
```bash
|
|
curl -fsSL https://raw.githubusercontent.com/your-username/svm-classifier/main/install.sh | bash
|
|
```
|
|
|
|
Or manually:
|
|
|
|
```bash
|
|
git clone https://github.com/your-username/svm-classifier.git
|
|
cd svm-classifier
|
|
chmod +x install.sh
|
|
./install.sh
|
|
```
|
|
|
|
## 📋 Prerequisites
|
|
|
|
### Ubuntu/Debian
|
|
```bash
|
|
sudo apt-get update
|
|
sudo apt-get install -y build-essential cmake git pkg-config libblas-dev liblapack-dev
|
|
```
|
|
|
|
### CentOS/RHEL
|
|
```bash
|
|
sudo yum install -y gcc-c++ cmake git pkgconfig blas-devel lapack-devel
|
|
```
|
|
|
|
### macOS
|
|
```bash
|
|
brew install cmake git pkg-config openblas
|
|
```
|
|
|
|
## 🔧 Manual Build
|
|
|
|
```bash
|
|
# 1. Clone the repository
|
|
git clone https://github.com/your-username/svm-classifier.git
|
|
cd svm-classifier
|
|
|
|
# 2. Install PyTorch C++ (if not already installed)
|
|
wget https://download.pytorch.org/libtorch/cpu/libtorch-cxx11-abi-shared-with-deps-2.1.0%2Bcpu.zip
|
|
unzip libtorch-cxx11-abi-shared-with-deps-2.1.0+cpu.zip
|
|
|
|
# 3. Build
|
|
mkdir build && cd build
|
|
cmake .. -DCMAKE_PREFIX_PATH=../libtorch
|
|
make -j$(nproc)
|
|
|
|
# 4. Run tests
|
|
make test
|
|
|
|
# 5. Install (optional)
|
|
sudo make install
|
|
```
|
|
|
|
## 💻 First Example
|
|
|
|
Create `my_svm.cpp`:
|
|
|
|
```cpp
|
|
#include <svm_classifier/svm_classifier.hpp>
|
|
#include <torch/torch.h>
|
|
#include <iostream>
|
|
|
|
int main() {
|
|
using namespace svm_classifier;
|
|
|
|
// Create sample data
|
|
auto X = torch::randn({100, 4}); // 100 samples, 4 features
|
|
auto y = torch::randint(0, 3, {100}); // 3 classes
|
|
|
|
// Create and train SVM
|
|
SVMClassifier svm(KernelType::RBF, 1.0);
|
|
auto metrics = svm.fit(X, y);
|
|
|
|
// Make predictions
|
|
auto predictions = svm.predict(X);
|
|
double accuracy = svm.score(X, y);
|
|
|
|
std::cout << "Training time: " << metrics.training_time << " seconds\n";
|
|
std::cout << "Accuracy: " << (accuracy * 100) << "%\n";
|
|
|
|
return 0;
|
|
}
|
|
```
|
|
|
|
Compile and run:
|
|
|
|
```bash
|
|
# If installed system-wide
|
|
g++ -std=c++17 my_svm.cpp -lsvm_classifier -ltorch -ltorch_cpu -o my_svm
|
|
export LD_LIBRARY_PATH=/opt/libtorch/lib:$LD_LIBRARY_PATH
|
|
./my_svm
|
|
|
|
# If built locally
|
|
g++ -std=c++17 -I../include -I../libtorch/include -I../libtorch/include/torch/csrc/api/include \
|
|
my_svm.cpp -L../build -lsvm_classifier -L../libtorch/lib -ltorch -ltorch_cpu -o my_svm
|
|
./my_svm
|
|
```
|
|
|
|
## 🏗️ CMake Integration
|
|
|
|
`CMakeLists.txt`:
|
|
|
|
```cmake
|
|
cmake_minimum_required(VERSION 3.15)
|
|
project(MyProject)
|
|
|
|
set(CMAKE_CXX_STANDARD 17)
|
|
|
|
# Find packages
|
|
find_package(SVMClassifier REQUIRED)
|
|
find_package(Torch REQUIRED)
|
|
|
|
# Create executable
|
|
add_executable(my_svm my_svm.cpp)
|
|
|
|
# Link libraries
|
|
target_link_libraries(my_svm
|
|
SVMClassifier::svm_classifier
|
|
${TORCH_LIBRARIES}
|
|
)
|
|
```
|
|
|
|
Build:
|
|
|
|
```bash
|
|
mkdir build && cd build
|
|
cmake .. -DCMAKE_PREFIX_PATH="/usr/local;/opt/libtorch"
|
|
make
|
|
```
|
|
|
|
## 🎯 Common Use Cases
|
|
|
|
### Binary Classification
|
|
|
|
```cpp
|
|
#include <svm_classifier/svm_classifier.hpp>
|
|
#include <nlohmann/json.hpp>
|
|
|
|
// Configure for binary classification
|
|
nlohmann::json config = {
|
|
{"kernel", "linear"},
|
|
{"C", 1.0},
|
|
{"probability", true}
|
|
};
|
|
|
|
SVMClassifier svm(config);
|
|
svm.fit(X_train, y_train);
|
|
|
|
// Get predictions and probabilities
|
|
auto predictions = svm.predict(X_test);
|
|
auto probabilities = svm.predict_proba(X_test);
|
|
```
|
|
|
|
### Multiclass with RBF Kernel
|
|
|
|
```cpp
|
|
nlohmann::json config = {
|
|
{"kernel", "rbf"},
|
|
{"C", 10.0},
|
|
{"gamma", 0.1},
|
|
{"multiclass_strategy", "ovo"} // One-vs-One
|
|
};
|
|
|
|
SVMClassifier svm(config);
|
|
svm.fit(X_train, y_train);
|
|
|
|
auto eval_metrics = svm.evaluate(X_test, y_test);
|
|
std::cout << "F1-Score: " << eval_metrics.f1_score << std::endl;
|
|
```
|
|
|
|
### Cross-Validation
|
|
|
|
```cpp
|
|
SVMClassifier svm(KernelType::RBF, 1.0);
|
|
|
|
// 5-fold cross-validation
|
|
auto cv_scores = svm.cross_validate(X, y, 5);
|
|
|
|
double mean_score = 0.0;
|
|
for (double score : cv_scores) {
|
|
mean_score += score;
|
|
}
|
|
mean_score /= cv_scores.size();
|
|
|
|
std::cout << "CV Score: " << mean_score << " ± " << std_dev << std::endl;
|
|
```
|
|
|
|
### Hyperparameter Tuning
|
|
|
|
```cpp
|
|
nlohmann::json param_grid = {
|
|
{"kernel", {"linear", "rbf"}},
|
|
{"C", {0.1, 1.0, 10.0}},
|
|
{"gamma", {0.01, 0.1, 1.0}}
|
|
};
|
|
|
|
auto results = svm.grid_search(X_train, y_train, param_grid, 3);
|
|
auto best_params = results["best_params"];
|
|
|
|
std::cout << "Best parameters: " << best_params.dump(2) << std::endl;
|
|
```
|
|
|
|
## 🐳 Docker Usage
|
|
|
|
```bash
|
|
# Build and run
|
|
docker build -t svm-classifier .
|
|
docker run --rm -it svm-classifier
|
|
|
|
# Development environment
|
|
docker build --target development -t svm-dev .
|
|
docker run --rm -it -v $(pwd):/workspace svm-dev
|
|
```
|
|
|
|
## 🧪 Running Tests
|
|
|
|
```bash
|
|
cd build
|
|
|
|
# All tests
|
|
make test_all
|
|
|
|
# Specific test categories
|
|
make test_unit # Unit tests only
|
|
make test_integration # Integration tests only
|
|
make test_performance # Performance benchmarks
|
|
|
|
# With coverage (Debug build)
|
|
make coverage
|
|
```
|
|
|
|
## 📊 Performance Tips
|
|
|
|
1. **Kernel Selection**:
|
|
- Linear: Fast, good for high-dimensional data
|
|
- RBF: Good general-purpose choice
|
|
- Polynomial: Good for non-linear patterns
|
|
- Sigmoid: Similar to neural networks
|
|
|
|
2. **Multiclass Strategy**:
|
|
- One-vs-Rest (OvR): Faster training, less memory
|
|
- One-vs-One (OvO): Often better accuracy
|
|
|
|
3. **Data Preprocessing**:
|
|
- Normalize features to [0,1] or standardize
|
|
- Handle missing values
|
|
- Consider feature selection
|
|
|
|
```cpp
|
|
// Example preprocessing
|
|
auto X_normalized = (X - X.mean(0)) / X.std(0);
|
|
```
|
|
|
|
## 🔧 Troubleshooting
|
|
|
|
### Common Issues
|
|
|
|
**Problem**: `undefined reference to torch::*`
|
|
**Solution**: Make sure libtorch is in your library path
|
|
```bash
|
|
export LD_LIBRARY_PATH=/opt/libtorch/lib:$LD_LIBRARY_PATH
|
|
```
|
|
|
|
**Problem**: CMake can't find SVMClassifier
|
|
**Solution**: Set the install prefix in CMAKE_PREFIX_PATH
|
|
```bash
|
|
cmake .. -DCMAKE_PREFIX_PATH="/usr/local;/opt/libtorch"
|
|
```
|
|
|
|
**Problem**: Compilation errors with C++17
|
|
**Solution**: Ensure your compiler supports C++17
|
|
```bash
|
|
g++ --version # Should be 7.0+
|
|
clang++ --version # Should be 5.0+
|
|
```
|
|
|
|
### Build Options
|
|
|
|
```bash
|
|
# Debug build with full debugging info
|
|
./install.sh --build-type Debug --verbose
|
|
|
|
# Custom installation directory
|
|
./install.sh --prefix ~/.local
|
|
|
|
# Skip tests for faster installation
|
|
./install.sh --skip-tests
|
|
|
|
# Clean build
|
|
./install.sh --clean
|
|
```
|
|
|
|
## 📚 Next Steps
|
|
|
|
- Check the [examples/](examples/) directory for more examples
|
|
- Read the [API documentation](docs/) for detailed reference
|
|
- Explore [advanced features](README.md#features) in the main README
|
|
- Join our [community discussions](https://github.com/your-username/svm-classifier/discussions)
|
|
|
|
## 🆘 Getting Help
|
|
|
|
- 📖 [Full Documentation](README.md)
|
|
- 🐛 [Issue Tracker](https://github.com/your-username/svm-classifier/issues)
|
|
- 💬 [Discussions](https://github.com/your-username/svm-classifier/discussions)
|
|
- 📧 [Contact](mailto:your-email@example.com)
|
|
|
|
---
|
|
|
|
**Happy classifying! 🎯** |