Skip to content

Commit 4d639f5

Browse files
committed
adding scripts and metadata file
1 parent 8219900 commit 4d639f5

22 files changed

+627
-18
lines changed

dvc.lock

Lines changed: 16 additions & 14 deletions
Original file line numberDiff line numberDiff line change
@@ -26,12 +26,12 @@ stages:
2626
md5: 260904955bdf53e03a72aa2a45fa0297
2727
size: 4451
2828
- path: ./src/train.py
29-
md5: af34a366856d696c747500bb7b0697ca
30-
size: 1093
29+
md5: 42f68d29be9da054ca6e6f0e5c142778
30+
size: 1094
3131
outs:
3232
- path: ./models/model.joblib
33-
md5: 033a96ff48de38157b89669b6fdb2a36
34-
size: 16901602
33+
md5: 287cf6a0a3fabe1103cfaca91bbc9384
34+
size: 17122152
3535
evaluate:
3636
cmd: python3 ./src/evaluate.py ./data/weatherAUS_processed.csv ./src/model.py
3737
./models/model.joblib
@@ -40,21 +40,23 @@ stages:
4040
md5: 59e89e62fb8f9face4901630d1de3e16
4141
size: 19507550
4242
- path: ./models/model.joblib
43-
md5: 033a96ff48de38157b89669b6fdb2a36
44-
size: 16901602
43+
md5: 287cf6a0a3fabe1103cfaca91bbc9384
44+
size: 17122152
4545
- path: ./src/evaluate.py
46-
md5: 5fe3fd8936a8571c16b8d5abfe7c4dda
47-
size: 878
46+
md5: 7e466368d793d09316fc1e078111a9de
47+
size: 882
4848
- path: ./src/model.py
4949
md5: 260904955bdf53e03a72aa2a45fa0297
5050
size: 4451
5151
outs:
5252
- path: ./results/metrics.json
53-
md5: cd5be11e36717182cb48214f5e40e869
54-
size: 120
53+
md5: 1e190be0481c320f15ff811a21e32490
54+
size: 121
5555
- path: ./results/precision_recall_curve.png
56-
md5: 29fb874a238e3e2117429f21d06b6c9d
57-
size: 17226
56+
md5: d4b1401d5c8601c2f3934e8028785302
57+
size: 17033
5858
- path: ./results/roc_curve.png
59-
md5: 8cd591e74fb66be9c8d2b7267ffa3c22
60-
size: 20113
59+
md5: c38ee7702a4749a5ff60c94a9e575a50
60+
size: 20026
61+
std_check:
62+
cmd: src/scripts/Scripts/std_check.sh ./

dvc.yaml

Lines changed: 2 additions & 0 deletions
Original file line numberDiff line numberDiff line change
@@ -1,4 +1,6 @@
11
stages:
2+
std_check:
3+
cmd: src/scripts/Scripts/std_check.sh ./
24
preprocess:
35
cmd: python3 ./src/preprocess_data.py ./data/weatherAUS.csv
46
deps:

metadata.yaml

Lines changed: 5 additions & 0 deletions
Original file line numberDiff line numberDiff line change
@@ -0,0 +1,5 @@
1+
project_name: Rain_aus
2+
project_version: v0.3
3+
model_type: scikit-learn_0.23
4+
author: guipleite
5+
datetime_creted: 29/03/2021_13:46:23:802394723

results/metrics.json

Lines changed: 1 addition & 1 deletion
Original file line numberDiff line numberDiff line change
@@ -1 +1 @@
1-
{"accuracy": 0.8472656790807144, "recall": 0.965979381443299, "precision": 0.8563279969746628, "f1": 0.9078547325515353}
1+
{"accuracy": 0.8469057178457704, "recall": 0.9647707074297902, "precision": 0.8567414843577359, "f1": 0.9075526276188406}

src/evaluate.py

Lines changed: 4 additions & 1 deletion
Original file line numberDiff line numberDiff line change
@@ -3,6 +3,7 @@
33
import pickle
44
import os
55
import json
6+
67
# from sklearn.externals import joblib
78
import joblib
89

@@ -15,12 +16,14 @@
1516

1617
sys.path.insert(1, MODEL_PATH)
1718

19+
1820
def module_from_file(module_name, file_path):
1921
spec = importlib.util.spec_from_file_location(module_name, file_path)
2022
module = importlib.util.module_from_spec(spec)
2123
spec.loader.exec_module(module)
2224
return module
2325

26+
2427
model = module_from_file("model", MODEL_PATH)
2528

2629
# with open(PICKLE_PATH, "rb") as file:
@@ -29,4 +32,4 @@ def module_from_file(module_name, file_path):
2932
log_eval = model.evaluate(DATA_PATH, pipeline, "./results")
3033

3134
with open("./results/metrics.json", "w") as outfile:
32-
json.dump(log_eval["metrics"], outfile)
35+
json.dump(log_eval["metrics"], outfile)

src/scripts/Pipelines/README.md

Lines changed: 16 additions & 0 deletions
Original file line numberDiff line numberDiff line change
@@ -0,0 +1,16 @@
1+
python3 model_train_pipeline.py ../../Test_Project/my-model_v1/src/breast_cancer.csv ../../Test_Project/my-model_v1/ 10 ./pickle_model
2+
3+
4+
python3 model_deploy_pipeline.py ./pickle_model ../../Test_Project/my-model_v1/ ../../credentials.yaml
5+
6+
7+
python3 model_deployed_validate_pipeline.py ../../Test_Project/my-model_v1/src/breast_cancer.csv ../../credentials.yaml ../../Test_Project/my-model_v1/
8+
9+
10+
python3 model_update_pipeline.py ./pickle_model ../../credentials.yaml ../../Test_Project/my-model_v1/
11+
12+
13+
python3 model_redeploy_pipeline.py ../../credentials.yaml
14+
15+
16+
python3 model_redeploy_pipeline.py ../../credentials.yaml

src/scripts/Pipelines/model.joblib

16.4 MB
Binary file not shown.
Lines changed: 62 additions & 0 deletions
Original file line numberDiff line numberDiff line change
@@ -0,0 +1,62 @@
1+
import os
2+
import sys
3+
import pickle
4+
import yaml
5+
import joblib
6+
from ibm_watson_machine_learning import APIClient
7+
8+
MODEL_PATH = os.path.abspath(sys.argv[1])
9+
PROJ_PATH = os.path.abspath(sys.argv[2])
10+
CRED_PATH = os.path.abspath(sys.argv[3])
11+
META_PATH = PROJ_PATH + "/metadata.yaml"
12+
13+
14+
with open(CRED_PATH) as stream:
15+
try:
16+
credentials = yaml.safe_load(stream)
17+
except yaml.YAMLError as exc:
18+
print(exc)
19+
20+
21+
with open(META_PATH) as stream:
22+
try:
23+
metadata = yaml.safe_load(stream)
24+
except yaml.YAMLError as exc:
25+
print(exc)
26+
27+
with open(MODEL_PATH, "rb") as file:
28+
# pickle_model = pickle.load(file)
29+
pipeline = joblib.load(file)
30+
31+
wml_credentials = {"url": credentials["url"], "apikey": credentials["apikey"]}
32+
33+
client = APIClient(wml_credentials)
34+
client.spaces.list()
35+
36+
MODEL_NAME = metadata["project_name"] + "_" + metadata["project_version"]
37+
DEPLOY_NAME = MODEL_NAME + "-Deployment"
38+
MODEL = pipeline
39+
SPACE_ID = credentials["space_id"]
40+
41+
client.set.default_space(SPACE_ID)
42+
43+
model_props = {
44+
client.repository.ModelMetaNames.NAME: MODEL_NAME,
45+
client.repository.ModelMetaNames.TYPE: metadata["model_type"],
46+
client.repository.ModelMetaNames.SOFTWARE_SPEC_UID: client.software_specifications.get_id_by_name(
47+
"default_py3.7"
48+
),
49+
}
50+
51+
model_details = client.repository.store_model(model=MODEL, meta_props=model_props)
52+
model_uid = client.repository.get_model_uid(model_details)
53+
54+
deployment_props = {
55+
client.deployments.ConfigurationMetaNames.NAME: DEPLOY_NAME,
56+
client.deployments.ConfigurationMetaNames.ONLINE: {},
57+
}
58+
59+
deployment = client.deployments.create(
60+
artifact_uid=model_uid,
61+
meta_props=deployment_props,
62+
)
Lines changed: 63 additions & 0 deletions
Original file line numberDiff line numberDiff line change
@@ -0,0 +1,63 @@
1+
import sys
2+
import yaml
3+
import os
4+
import pandas as pd
5+
import numpy as np
6+
from sklearn.metrics import confusion_matrix, accuracy_score
7+
from sklearn.model_selection import cross_val_score
8+
from ibm_watson_machine_learning import APIClient
9+
10+
DATA_PATH = os.path.abspath(sys.argv[1])
11+
CRED_PATH = os.path.abspath(sys.argv[2])
12+
PROJ_PATH = os.path.abspath(sys.argv[3])
13+
META_PATH = PROJ_PATH + "/metadata.yaml"
14+
15+
16+
def main():
17+
with open(CRED_PATH) as stream:
18+
try:
19+
credentials = yaml.safe_load(stream)
20+
except yaml.YAMLError as exc:
21+
print(exc)
22+
23+
data = pd.read_csv(DATA_PATH)
24+
25+
X = data.iloc[:, :-1]
26+
y = data[data.columns[-1]]
27+
28+
wml_credentials = {"url": credentials["url"], "apikey": credentials["apikey"]}
29+
30+
client = APIClient(wml_credentials)
31+
client.spaces.list()
32+
33+
SPACE_ID = credentials["space_id"]
34+
DEPLOYMENT_UID = input("DEPLOYMENT UID: ")
35+
36+
client.set.default_space(SPACE_ID)
37+
38+
# deployment_uid = client.deployments.get_uid(DEPLOYMENT_UID)
39+
40+
payload = {
41+
"input_data": [
42+
{"fields": X.columns.to_numpy().tolist(), "values": X.to_numpy().tolist()}
43+
]
44+
}
45+
result = client.deployments.score(DEPLOYMENT_UID, payload)
46+
47+
pred_values = np.squeeze(result["predictions"][0]["values"])
48+
y_pred_values = [i[0] for i in pred_values]
49+
50+
def comb_eval(y, y_pred):
51+
cm = confusion_matrix(y, y_pred)
52+
acc = accuracy_score(y, y_pred)
53+
54+
return {"cm": cm, "acc": acc}
55+
56+
eval = comb_eval(y, y_pred_values)
57+
print(eval)
58+
59+
return eval
60+
61+
62+
if __name__ == "__main__":
63+
main()
Lines changed: 35 additions & 0 deletions
Original file line numberDiff line numberDiff line change
@@ -0,0 +1,35 @@
1+
import sys
2+
import importlib.util
3+
import pickle
4+
import os
5+
import json
6+
7+
# from sklearn.externals import joblib
8+
import joblib
9+
10+
DATA_PATH = os.path.abspath(sys.argv[1])
11+
# PROJ_PATH = os.path.abspath(sys.argv[2])
12+
# MODEL_PATH = PROJ_PATH+"/src/model.py"
13+
MODEL_PATH = sys.argv[2]
14+
PICKLE_PATH = sys.argv[3]
15+
16+
17+
sys.path.insert(1, MODEL_PATH)
18+
19+
20+
def module_from_file(module_name, file_path):
21+
spec = importlib.util.spec_from_file_location(module_name, file_path)
22+
module = importlib.util.module_from_spec(spec)
23+
spec.loader.exec_module(module)
24+
return module
25+
26+
27+
model = module_from_file("model", MODEL_PATH)
28+
29+
# with open(PICKLE_PATH, "rb") as file:
30+
# pipeline = pickle.load(file)
31+
pipeline = joblib.load(PICKLE_PATH)
32+
log_eval = model.evaluate(DATA_PATH, pipeline, "./results")
33+
34+
with open("./results/metrics.json", "w") as outfile:
35+
json.dump(log_eval["metrics"], outfile)

0 commit comments

Comments
 (0)