Skip to content

sofivia/Naive-Bayes-Forest

Folders and files

NameName
Last commit message
Last commit date

Latest commit

 

History

13 Commits
 
 
 
 
 
 
 
 
 
 
 
 

Repository files navigation

Naive Bayes Forest (NB-Forest) — projekt UMA

Implementacja i ewaluacja klasyfikatora zespołowego Naive Bayes Forest (NB-Forest): las złożony z wielu klasyfikatorów Gaussian Naive Bayes, gdzie każdy członek zespołu uczy się na:

  • bootstrapie próbek (bagging),
  • losowym podzbiorze cech (parametr k z d).

Projekt działa na Ubuntu/Linux (i ogólnie na systemach z Pythonem 3.x).


1) Struktura repozytorium

.
├── main.py
├── requirements.txt
├── nb_forest/
│   ├── nb_forest.py        # NaiveBayesForest (fit/predict/predict_proba, agregacja, wagi, align proba)
│   ├── naive_bayes.py      # własna minimalna implementacja GaussianNB (opcjonalnie)
│   ├── metrics.py          # accuracy, f1_macro, log_loss
│   └── experiments.py      # procedury eksperymentalne (CV, grid, smoothing, baseline RF)
└── tests/
    ├── test_nb_forest.py
    ├── test_naive_bayes.py
    └── test_experiments.py

2) Wymagania

  • Python 3.x
  • pip + (zalecane) venv
  • Pakiety z requirements.txt:
    • numpy
    • scikit-learn
    • pytest

Zbiory danych są wbudowane w sklearn.datasets (Wine, Iris, Breast Cancer) — nie trzeba nic pobierać.


3) Instalacja (Ubuntu/Linux)

W katalogu projektu:

python3 -m venv .venv
source .venv/bin/activate
pip install -r requirements.txt

4) Uruchamianie eksperymentów

4.1 Podstawowe porównanie: NB-Forest (A/B) + wagi + baseline RandomForest

python main.py

Co się dzieje:

  • uruchamia 5-fold StratifiedKFold (domyślnie --splits 5, seed=42),
  • wypisuje tabelę wyników dla 3 datasetów:
    • Wine
    • Iris
    • Breast Cancer
  • porównuje warianty:
    • agregacja vote (głosowanie),
    • agregacja proba_mean (średnia prawdopodobieństw),
    • wagi członków: none, val_accuracy, val_log_loss,
    • dodatkowo baseline: RandomForestClassifier.

4.2 Grid po M i k (oraz agg i weight_mode)

python main.py --grid
  • przeszukuje siatkę parametrów (liczba estymatorów M, liczba cech k, tryb agregacji, tryb wag),
  • wypisuje Top-5 konfiguracji wg accuracy i wg log-loss (dla każdego datasetu).

4.3 Test var_smoothing

python main.py --smoothing
  • wykonuje sweep po var_smoothing i porównuje wpływ na metryki.

4.4 Pełny raport w konsoli

python main.py --grid --smoothing

4.5 Zmiana liczby foldów CV

python main.py --splits 10

5) Testy jednostkowe

W katalogu projektu:

PYTHONPATH=. pytest -q

PYTHONPATH=. jest potrzebne, żeby testy poprawnie importowały moduły z katalogu projektu.


6) Jak użyć modelu NB-Forest w kodzie (minimalny przykład)

import numpy as np
from sklearn.datasets import load_wine
from nb_forest.nb_forest import NaiveBayesForest

X, y = load_wine(return_X_y=True)
y = y.astype(int)

model = NaiveBayesForest(
    n_estimators=25,
    max_features="sqrt",
    agg="proba_mean",        # albo "vote"
    weight_mode="none",      # albo "val_accuracy" / "val_log_loss"
    base_estimator="sklearn",# albo "custom"
    random_state=42
)
model.fit(X, y)

pred = model.predict(X[:5])
proba = model.predict_proba(X[:5])
print(pred)
print(proba)

7) Ważna uwaga o base_estimator

  • W eksperymentach (nb_forest/experiments.py) warianty są tworzone jawnie z base_estimator="sklearn" lub base_estimator="custom".
  • Jeśli ktoś tworzy obiekt NaiveBayesForest() bez podania base_estimator, to domyślnie użyta zostanie wartość ustawiona w konstruktorze klasy (zob. nb_forest/nb_forest.py). Domyślnie jest base_estimator="sklearn".

Najbezpieczniej jest zawsze podawać jawnie:

NaiveBayesForest(base_estimator="sklearn")

8) Co dokładnie jest porównywane

  • NB-Forest:
    • losowanie próbek (bootstrap) + losowanie cech (k z d),
    • agregacja:
      • vote — głosowanie (opcjonalnie ważone),
      • proba_mean — średnia prawdopodobieństw,
    • wagi członków liczone na walidacji:
      • val_accuracy,
      • val_log_loss (waga = exp(-logloss)).
  • Baseline:
    • RandomForestClassifier ze scikit-learn.

9) Rozwiązywanie problemów

  • Jeśli python wskazuje na Pythona 2 lub innego niż 3.x, użyj python3.
  • Jeśli importy z nb_forest nie działają w testach: uruchamiaj pytest z PYTHONPATH=. (jak w sekcji 5).
  • Jeśli brakuje pakietów: aktywuj venv (source .venv/bin/activate) i ponów pip install -r requirements.txt.

About

No description, website, or topics provided.

Resources

Stars

Watchers

Forks

Releases

No releases published

Packages

 
 
 

Contributors

Languages