#!/usr/bin/env python # coding: utf-8 import os import json import joblib import numpy as np from sklearn.ensemble import VotingRegressor from sklearn.linear_model import LinearRegression from sklearn.ensemble import RandomForestRegressor from core.ndvi_data_loader import NDVITimeSeriesDataset print("=" * 70) print("🚀 Training Multi-Model Ensemble for NDVI (REAL DATA & CPU)") print("=" * 70) dataset = NDVITimeSeriesDataset(sequence_length=5, spatial=False) X_train, y_train = [], [] for x, y in dataset: X_train.append(x.numpy().flatten()) y_train.append(y.numpy().flatten()[0]) X_train = np.array(X_train) y_train = np.array(y_train) print(f"\n[TRAIN] Bắt đầu Training Ensemble trên {len(X_train)} samples...") # CPU Ensemble model1 = LinearRegression() model2 = RandomForestRegressor(n_estimators=50, random_state=42) ensemble = VotingRegressor([('lr', model1), ('rf', model2)]) ensemble.fit(X_train, y_train) # Predict and calc error preds = ensemble.predict(X_train) mse = np.mean((preds - y_train)**2) model_dir = "ndvi_forecast_model" model_path = os.path.join(model_dir, "ndvi_ensemble_real.joblib") joblib.dump(ensemble, model_path) print(f"\n[SAVE] Model saved to {model_path}") with open(os.path.join(model_dir, "ndvi_ensemble_real_info.json"), "w") as f: json.dump({ "model_type": "Multi-Model Ensemble (Real Data & CPU)", "target": "NDVI", "rmse": float(mse**0.5), "mae": float(np.mean(np.abs(preds - y_train))) }, f, indent=2) print("[SAVE] Model info saved.")