#!/usr/bin/env python3 """ Script untuk menampilkan StandardScaler parameters Berguna untuk debugging dan verifikasi model """ import os import sys from utils.helpers import load_model, get_scaler_params from utils.feature_extraction import FeatureExtractor # ANSI color codes untuk terminal class Colors: YELLOW = '\033[93m' BLACK = '\033[30m' BOLD = '\033[1m' END = '\033[0m' RESET = '\033[0m' def print_colored_table(feature_names, params): """Print table dengan header berwarna kuning seperti Excel""" # Header dengan warna kuning header = f"{Colors.YELLOW}{Colors.BLACK}{Colors.BOLD}" header += f"{'feature':<20} {'mean':<15} {'std_dev':<15}" header += f"{Colors.END}" print(header) # Separator print("-" * 50) # Data rows for i, fname in enumerate(feature_names): mean_val = params['mean'][i] scale_val = params['scale'][i] print(f"{fname:<20} {mean_val:<15.10f} {scale_val:<15.10f}") print("-" * 50) def export_scaler_params_to_csv(feature_names, params): """Export scaler parameters to CSV file""" import csv try: filename = 'scaler_parameters.csv' with open(filename, 'w', newline='') as f: writer = csv.writer(f) # Header writer.writerow(['feature', 'mean', 'std_dev']) # Data for i, fname in enumerate(feature_names): writer.writerow([ fname, f"{params['mean'][i]:.10f}", f"{params['scale'][i]:.10f}" ]) print(f"\nāœ“ Scaler parameters exported to: {filename}") except Exception as e: print(f"\nāŒ ERROR: Gagal mengekspor CSV: {str(e)}") def main(): """Display scaler parameters""" print("\n") print("="*70) print("SCALER PARAMETERS VIEWER") print("="*70) # Check if model exists if not os.path.exists('models/scaler.pkl'): print("\nāŒ ERROR: Model scaler tidak ditemukan!") print(" Lokasi yang dicari: models/scaler.pkl") print("\nšŸ’” Solusi: Jalankan 'python train_model.py' untuk melatih model terlebih dahulu") return try: # Load model print("\nšŸ“¦ Loading model...") model, scaler, label_encoder = load_model() print("āœ“ Model loaded successfully") # Get feature names extractor = FeatureExtractor() feature_names = extractor.feature_names # Get scaler params params = get_scaler_params(scaler) if params is None: print("\nāŒ ERROR: Gagal mengambil parameter scaler") return # Display table with colored header print("\n" + "="*70) print("SCALER PARAMETERS (StandardScaler)") print("="*70 + "\n") print_colored_table(feature_names, params) # Display additional info print("\nšŸ“Š INFORMASI TAMBAHAN:") print(f" - Tipe Scaler: {params['type']}") print(f" - Jumlah Features: {params['n_features']}") print(f" - Tipe Model: KNeighborsClassifier (k=5)") print(f" - Label Classes: {list(label_encoder.classes_)}") print(f" - Status: Model siap digunakan āœ“") # Penjelasan print("\nšŸ“ PENJELASAN:") print(" - feature: Nama fitur yang digunakan dalam model") print(" - mean: Rata-rata nilai fitur dari training data") print(" - std_dev: Standar deviasi untuk normalisasi (scaling)") print("\n Rumus normalisasi: X_normalized = (X - mean) / std_dev") print("\n" + "="*70 + "\n") # Export to CSV option export_csv = input("Apakah Anda ingin mengekspor data ini ke CSV? (y/n): ").strip().lower() if export_csv == 'y': export_scaler_params_to_csv(feature_names, params) except Exception as e: print(f"\nāŒ ERROR: {str(e)}") import traceback traceback.print_exc() sys.exit(1) def export_scaler_params_to_csv(feature_names, params): """Export scaler parameters to CSV file""" import csv try: filename = 'scaler_parameters.csv' with open(filename, 'w', newline='') as f: writer = csv.writer(f) # Header writer.writerow(['Feature', 'Mean', 'Scale', 'Variance']) # Data for i, fname in enumerate(feature_names): writer.writerow([ fname, params['mean'][i], params['scale'][i], params['variance'][i] ]) print(f"\nāœ“ Scaler parameters exported to: {filename}") except Exception as e: print(f"\nāŒ ERROR: Gagal mengekspor CSV: {str(e)}") if __name__ == '__main__': main()