forked from zjesko/mlops-iris
-
Notifications
You must be signed in to change notification settings - Fork 0
Expand file tree
/
Copy pathml_utils.py
More file actions
60 lines (44 loc) · 1.62 KB
/
ml_utils.py
File metadata and controls
60 lines (44 loc) · 1.62 KB
1
2
3
4
5
6
7
8
9
10
11
12
13
14
15
16
17
18
19
20
21
22
23
24
25
26
27
28
29
30
31
32
33
34
35
36
37
38
39
40
41
42
43
44
45
46
47
48
49
50
51
52
53
54
55
56
57
58
59
60
from os import X_OK
from sklearn import datasets
from sklearn.model_selection import train_test_split
from sklearn.naive_bayes import GaussianNB
from sklearn.metrics import accuracy_score
from sklearn.linear_model import LogisticRegression
import numpy as np
clf_g = GaussianNB()
clf_lr = LogisticRegression(penalty='l2',C=1.0, max_iter=1000)
## default to GaussianNB but based ont he accuracy it gets changed
clf = clf_g
classes = {
0: "Iris Setosa",
1: "Iris Versicolour",
2: "Iris Virginica"
}
r_classes = {y: x for x, y in classes.items()}
def find_better_model():
X, y = datasets.load_iris(return_X_y=True)
X_train, X_test, y_train, y_test = train_test_split(X,y, test_size=0.2)
clf_g.fit(X_train, y_train)
acc_g = accuracy_score(y_test, clf_g.predict(X_test))
print(f" GaussianNB Model trained with accuracy: {round(acc_g, 3)}")
clf_lr.fit(X_train, y_train)
acc_lr = accuracy_score(y_test, clf_lr.predict(X_test))
print(f"Logistic Regression Model trained with accuracy: {round(acc_lr, 3)}")
##global clf
if acc_g > acc_lr :
clf = clf_g
else:
clf = clf_lr
def predict(query_data):
print(f"query_data.dict().values()={query_data.dict().values()}")
x = list(query_data.dict().values())
prediction = clf.predict([x])[0]
print(f"Model prediction: {classes[prediction]}")
return classes[prediction]
# function to retrain the model as part of the feedback loop
def retrain(data):
# pull out the relevant X and y from the FeedbackIn object
X = [list(d.dict().values())[:-1] for d in data]
y = [r_classes[d.flower_class] for d in data]
#fit the classifier again based on the new data obtained
clf.fit(X,y)