AhmedSamir1598's picture
Add AutoVision models and Gradio app
3bce187
Raw
History Blame Contribute Delete
2.44 kB
import numpy as np
from sklearn.neighbors import KNeighborsClassifier
from sklearn.naive_bayes import GaussianNB
from sklearn.preprocessing import StandardScaler
from sklearn.decomposition import PCA
from sklearn.metrics import accuracy_score, precision_score, recall_score, f1_score, confusion_matrix
class BaselineModels:
"""
A wrapper class for baseline classifiers.
Currently supports KNN and GNB.
"""
def __init__(self, knn_k=5, use_scaler=True, use_pca=False, pca_components=50):
self.knn_k = knn_k
self.use_scaler = use_scaler
self.use_pca = use_pca
self.pca_components = pca_components
self.scaler = StandardScaler() if use_scaler else None
self.pca = PCA(n_components=pca_components) if use_pca else None
# supported classifiers
self.knn = KNeighborsClassifier(n_neighbors=self.knn_k)
self.nb = GaussianNB()
self._fitted = False
def _prepare(self, X, fit=False):
Xp = X
if self.scaler is not None:
if fit:
Xp = self.scaler.fit_transform(Xp)
else:
Xp = self.scaler.transform(Xp)
if self.pca is not None:
if fit:
Xp = self.pca.fit_transform(Xp)
else:
Xp = self.pca.transform(Xp)
return Xp
def fit(self, X, y):
Xp = self._prepare(X, fit=True)
self.knn.fit(Xp, y)
self.nb.fit(Xp, y)
self._fitted = True
def predict(self, X, model='knn'):
if not self._fitted:
raise RuntimeError('Models not fitted. Call fit() first.')
Xp = self._prepare(X, fit=False)
if model == 'knn':
return self.knn.predict(Xp)
elif model == 'nb' or model == 'naivebayes':
return self.nb.predict(Xp)
else:
raise ValueError('Unknown model: choose "knn" or "nb"')
def evaluate(self, X, y, model='knn', average='macro'):
y_pred = self.predict(X, model=model)
metrics = {
'accuracy': accuracy_score(y, y_pred),
'precision': precision_score(y, y_pred, average=average, zero_division=0),
'recall': recall_score(y, y_pred, average=average, zero_division=0),
'f1': f1_score(y, y_pred, average=average, zero_division=0),
'confusion_matrix': confusion_matrix(y, y_pred),
}
return metrics