Source code for xaicompare.adapters.models.model_base
from typing import List, Optional, Union, Sequence, Any
import numpy as np
import pandas as pd
from scipy.sparse import spmatrix
ArrayLike = Union[np.ndarray, spmatrix, list]
[docs]
class ModelAdapter:
def __init__(self, model, class_names: Optional[Sequence[str]] = None):
self.model = model
self._class_names = (
list(class_names) if class_names is not None else None
)
"""Uniform interface over different model types."""
[docs]
def predict(self, X: ArrayLike) -> np.ndarray:
raise NotImplementedError
[docs]
def predict_proba(self, X: ArrayLike) -> Optional[np.ndarray]:
"""Return (n_samples, n_classes) or None if not supported."""
return None
[docs]
def feature_names(self) -> List[str]:
"""Vectorizer / model feature names (tokens, n-grams)."""
raise NotImplementedError
[docs]
def class_names(self) -> List[str]:
"""Human-readable class names."""
raise NotImplementedError
[docs]
def build_text_index(
self,
X_test,
y_test: Optional[Sequence] = None,
raw_text: Optional[Sequence] = None,
class_names: Optional[Sequence[str]] = None,
**kwargs: Any,
) -> pd.DataFrame:
"""
Return a DataFrame with at least:
- id (int)
- text (str) # original doc text if available
- y_true (optional)
- y_pred (optional)
- proba_{class} (optional per class)
Default impl: try best-effort; subclasses can override.
"""
raise NotImplementedError