hsilvosa's picture
Add calibrated CPV classifier v2
de11fb9 verified
Raw
History Blame Contribute Delete
1.03 kB
from pathlib import Path
import joblib
import numpy as np
class CPVDivisionClassifier:
def __init__(self, path: str | Path = "model.joblib"):
self.artifact = joblib.load(path)
def predict(self, texts: list[str], top_k: int = 3):
x = self.artifact["features"].transform(texts)
scores = self.artifact["classifier"].decision_function(x)
calibration = self.artifact["calibration"]
logits = np.clip(
scores * np.asarray(calibration["slopes"])
+ np.asarray(calibration["intercepts"]),
-35.0,
35.0,
)
probabilities = 1.0 / (1.0 + np.exp(-logits))
classes = np.asarray(self.artifact["classes"])
output = []
for row in probabilities:
indices = np.argsort(row)[::-1][:top_k]
output.append([
{"division": str(classes[index]), "probability": float(row[index])}
for index in indices
])
return output