65 lines
2.1 KiB
Python
65 lines
2.1 KiB
Python
"""
|
|
Inspect model_odc.joblib to see what it actually contains
|
|
"""
|
|
|
|
import joblib
|
|
from pathlib import Path
|
|
|
|
model_path = Path("model_train/model_odc.joblib")
|
|
|
|
if model_path.exists():
|
|
print("Loading model_odc.joblib...")
|
|
model_data = joblib.load(model_path)
|
|
|
|
print(f"\nModel type: {type(model_data)}")
|
|
print(f"Model class: {model_data.__class__.__name__}")
|
|
|
|
# Check if it's a dict
|
|
if isinstance(model_data, dict):
|
|
print(f"\nModel is a dict with keys: {model_data.keys()}")
|
|
model = model_data.get('model')
|
|
else:
|
|
model = model_data
|
|
|
|
print(f"\nActual model type: {type(model)}")
|
|
print(f"Actual model class: {model.__class__.__name__}")
|
|
|
|
# Try to get feature info
|
|
if hasattr(model, 'n_features_in_'):
|
|
print(f"\nn_features_in_: {model.n_features_in_}")
|
|
|
|
if hasattr(model, 'feature_names_in_'):
|
|
print(f"feature_names_in_: {model.feature_names_in_}")
|
|
|
|
# If it's a GridSearchCV
|
|
if hasattr(model, 'best_estimator_'):
|
|
print(f"\nThis is a GridSearchCV!")
|
|
print(f"Best estimator: {model.best_estimator_}")
|
|
|
|
best_est = model.best_estimator_
|
|
if hasattr(best_est, 'steps'):
|
|
print(f"\nPipeline steps:")
|
|
for step_name, step in best_est.steps:
|
|
print(f" - {step_name}: {step.__class__.__name__}")
|
|
if hasattr(step, 'n_features_in_'):
|
|
print(f" n_features_in_: {step.n_features_in_}")
|
|
|
|
# If it's a Pipeline
|
|
if hasattr(model, 'steps'):
|
|
print(f"\nThis is a Pipeline!")
|
|
print(f"Pipeline steps:")
|
|
for step_name, step in model.steps:
|
|
print(f" - {step_name}: {step.__class__.__name__}")
|
|
if hasattr(step, 'n_features_in_'):
|
|
print(f" n_features_in_: {step.n_features_in_}")
|
|
|
|
# Try to get booster for XGBoost
|
|
try:
|
|
if hasattr(model, 'get_booster'):
|
|
print(f"\nXGBoost num_features: {model.get_booster().num_features()}")
|
|
except:
|
|
pass
|
|
|
|
else:
|
|
print(f"Model file not found: {model_path}")
|