forked from microsoft/az-ml-batch-score
/
predict.py
62 lines (50 loc) · 1.46 KB
/
predict.py
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
61
62
import numpy as np
from sklearn.svm import OneClassSVM
from sklearn.preprocessing import StandardScaler
from sklearn.pipeline import Pipeline
import pickle
import sys
import json
import datetime
import pandas as pd
import io
import os
# query params
device = int(sys.argv[1])
sensor = int(sys.argv[2])
models_dir = sys.argv[3]
data_dir = sys.argv[4]
data_file_name = sys.argv[5]
preds_dir = sys.argv[6]
model_name = "model_{0}_{1}".format(device, sensor)
# get data
data = pd.read_csv(data_dir + "/" + data_file_name)
data = data[(data["Device"] == device) & (data["Sensor"] == sensor)]
tss = data["TS"]
vals = np.array(data["Value"])
# load model
print("Loading model")
with open(models_dir + "/" + model_name, "rb") as f:
pipe = pickle.load(f)
# predict
preds = pipe.predict(vals.reshape(-1, 1))
preds = np.where(preds == 1, 0, 1) # 1 indicates an anomaly, 0 otherwise
# csv results
res = pd.DataFrame(
{
"TS": tss,
"Device": np.repeat(device, len(preds)),
"Sensor": np.repeat(sensor, len(preds)),
"Val": vals,
"Prediction": preds,
}
)
res = res[["TS", "Device", "Sensor", "Val", "Prediction"]]
res_file_name = "preds_{0}_{1}_{2}.csv".format(
device, sensor, datetime.datetime.now().strftime("%y%m%d%H%M%S")
)
# save predictions
print("Saving predictions")
os.makedirs(preds_dir)
with open(preds_dir + "/" + res_file_name, "w") as f:
res.to_csv(f, index=None)