- Zbiór: Wine Quality (
data/WineQT.csv) — klasyfikacja wieloklasowa etykietyquality(oceny 3–8, niezbalansowane klasy). - Modele:
DecisionTree,kNN,RandomForest— po 3 warianty hiperparametrów (łącznie 9 klasyfikatorów). - Zespół predykcyjny:
VotingClassifierz majority voting (voting="hard") nad tymi samymi 9 pipeline’ami. - Walidacja: stratyfikowana 5-fold CV (
StratifiedKFold(shuffle=True, random_state=42)). - Metryki:
accuracy(odsetek poprawnych predykcji) orazbalanced_accuracy(średnia czułość po klasach — ważna przy niezbalansowanym rozkładzie ocen wina). - Stack: scikit-learn, Pandas (
groupby,to_latex), Plotly (wykresy), Streamlit (opis przebiegu badania, definicje pojęć, zgodność z wymaganiami, podgląd.tex).
Wszystkie operacje skalowania wykonywane są wewnątrz obiektu Pipeline (scikit-learn):
Pipeline([
("preprocess", ColumnTransformer([("num", MinMaxScaler(), feature_cols)])),
("clf", klasyfikator),
])
Dzięki temu MinMaxScaler jest fitowany wyłącznie na folddzie treningowej — nigdy nie „widzi" danych testowych przed oceną. Przekazanie gotowego Pipeline do cross_validate gwarantuje to automatycznie dla każdego z 5 podziałów. Szczegóły: scikit-learn — Common pitfalls.
Funkcja wczytaj_pelna_ramke w src/experiment.py wywołuje df.isna().any().any() i podnosi wyjątek, jeśli znajdzie brakujące wartości — eksperyment nie uruchomi się na niekompletnym zbiorze.
- Python 3.10+ (zalecane)
- Instalacja:
pip install -r requirements.txt
Uruchamia walidację, zapisuje m.in. CSV, .tex, wersje_bibliotek.txt oraz wykresy HTML w results/wykresy/.
python run_experiment.pySkrypty start.sh (Linux/macOS) oraz start.bat (Windows) wykonują po kolei:
- venv +
pip install -r requirements.txt python run_experiment.pystreamlit run streamlit_app.py→ zwyklehttp://localhost:8501
chmod +x start.sh
./start.shstart.bat| Zakładka | Treść |
|---|---|
| Opis projektu | Cel badania, przebieg eksperymentu (co → po co → efekt), słownik pojęć, zgodność z wymaganiami, podgląd plików LaTeX |
| Wymogi i metodologia | Tabela: wymaganie → realizacja w kodzie / plikach |
| Zbiór danych (EDA) | Rozkład klasy quality, macierz korelacji, podgląd danych |
| Wyniki klasyfikacji | Wykresy metryk z CV, tabele, podgląd i pobieranie wyników |
Zgodnie z wymaganiem scikit-learn — Getting reproducible results:
- Jeden stały seed:
RANDOM_STATE = 42wsrc/config.py; przekazany do każdego klasyfikatora (random_state) oraz doStratifiedKFold(shuffle=True, random_state=RANDOM_STATE). StratifiedKFoldzshuffle=Truewymaga seeda — bez niego kolejność próbek po tasowaniu byłaby inna przy każdym uruchomieniu.- Ten sam obiekt
cvprzekazywany jest do każdego wywołaniacross_validate, co gwarantuje identyczne podziały dla wszystkich modeli. - Plik
results/wersje_bibliotek.txtzapisuje wersje scikit-learn, numpy i pandas przy generowaniu wyników — umożliwia odtworzenie środowiska.
| Ścieżka | Opis |
|---|---|
data/WineQT.csv |
Dane źródłowe |
src/config.py |
Ścieżki, seed |
src/experiment.py |
Pipeline, CV, zespół, eksport CSV/LaTeX, wywołanie wykresów |
src/wykresy.py |
Wykresy Plotly + zapis HTML |
run_experiment.py |
Wejście z linii poleceń |
streamlit_app.py |
Aplikacja WWW |
start.sh / start.bat |
Eksperyment + Streamlit |
results/ |
Wyniki wygenerowane (CSV, TeX, wykresy/*.html, wersje_bibliotek.txt) |
Ignorowane są m.in. .venv/, cache Pythona, pliki IDE. Wygenerowane pliki w results/ można opcjonalnie dodać do ignorowania — w .gitignore jest gotowy, zakomentowany blok instrukcji.
Zobacz plik LICENSE.