E41222753_NinikYuniarsih_Ju.../config.py

76 lines
2.7 KiB
Python

# Konfigurasi untuk Sistem Klasifikasi Jurusan
import os
import sys
def _resource_base_dir():
"""Direktori dasar untuk sumber daya read-only yang dibundel."""
if getattr(sys, 'frozen', False) and hasattr(sys, '_MEIPASS'):
return sys._MEIPASS
return os.path.dirname(os.path.abspath(__file__))
def _writable_base_dir():
"""Direktori dasar untuk file runtime yang dapat ditulis (mis. model terlatih)."""
if getattr(sys, 'frozen', False):
return os.path.dirname(sys.executable)
return os.path.dirname(os.path.abspath(__file__))
RESOURCE_BASE_DIR = _resource_base_dir()
WRITABLE_BASE_DIR = _writable_base_dir()
def get_resource_path(relative_path):
return os.path.join(RESOURCE_BASE_DIR, relative_path)
def get_writable_path(relative_path):
return os.path.join(WRITABLE_BASE_DIR, relative_path)
def get_app_icon_path():
"""Tentukan path ikon terbaik untuk aplikasi/jendela jika tersedia."""
candidates = [
get_resource_path(os.path.join('img', 'logo_sekolah.ico')),
get_writable_path(os.path.join('img', 'logo_sekolah.ico')),
get_resource_path(os.path.join('img', 'Logo_skripsi.ico')),
get_writable_path(os.path.join('img', 'Logo_skripsi.ico')),
get_writable_path(os.path.join('img', 'logo_sekolah.png')),
get_resource_path(os.path.join('img', 'logo_sekolah.png')),
get_writable_path(os.path.join('img', 'Logo_skripsi.png')),
get_resource_path(os.path.join('img', 'Logo_skripsi.png')),
get_writable_path(os.path.join('img', 'logo_sma.ico')),
get_resource_path(os.path.join('img', 'logo_sma.ico')),
get_writable_path(os.path.join('img', 'logo_sma.png')),
get_resource_path(os.path.join('img', 'logo_sma.png')),
]
for path in candidates:
if os.path.exists(path):
return path
return ''
# Konfigurasi dataset
TRAIN_DATASET_PATH = get_resource_path(os.path.join('data', 'dataset_smakom_final_train.csv'))
TEST_DATASET_PATH = get_resource_path(os.path.join('data', 'dataset_smakom_final_test.csv'))
DATASET_PATH = TRAIN_DATASET_PATH
# Path model: dapat ditulis untuk retraining, sebagai fallback saat pertama kali dimuat
MODEL_PATH = get_writable_path(os.path.join('models', 'trained_model.pkl'))
BUNDLED_MODEL_PATH = get_resource_path(os.path.join('models', 'trained_model.pkl'))
# Konfigurasi pelatihan
TEST_SIZE = 0.2 # 20% untuk testing, 80% untuk training (300 data: 240 training, 60 testing)
RANDOM_STATE = 42 # nomor acak tetap agar hasil random sama
# Konfigurasi KNN
DEFAULT_K_NEIGHBORS = 27
KNN_WEIGHTS = 'distance'
KNN_METRIC = 'euclidean'
OPTIMIZE_K = True
K_RANGE = range(3, 52, 2) # Kandidat k untuk GridSearchCV pada data ini: 3,5,7,...,51
# Konfigurasi basis data (sudah ada di db/database.py)
# Konfigurasi performa
CROSS_VALIDATION_FOLDS = 5