76 lines
2.7 KiB
Python
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 |