dyo3112 commited on
Commit
b6547a3
·
verified ·
1 Parent(s): da10edd

Upload app.py

Browse files
Files changed (1) hide show
  1. app.py +57 -0
app.py ADDED
@@ -0,0 +1,57 @@
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
1
+ import joblib
2
+ import pandas as pd
3
+ import gradio as gr
4
+ import numpy as np
5
+
6
+ # ======================
7
+ # LOAD MODEL
8
+ # ======================
9
+ artifact = joblib.load("stacking_model.pkl")
10
+
11
+ base_models = artifact["base_models"] # list of (name, model)
12
+ meta_model = artifact["meta_model"]
13
+ feature_names = artifact["features"]
14
+
15
+ # ======================
16
+ # PREDICTION FUNCTION
17
+ # ======================
18
+ def predict_malware(*inputs):
19
+ # Input → DataFrame
20
+ X = pd.DataFrame([inputs], columns=feature_names)
21
+
22
+ # Level-1 predictions
23
+ meta_inputs = []
24
+
25
+ for name, model in base_models:
26
+ prob = model.predict_proba(X)[:, 1]
27
+ meta_inputs.append(prob)
28
+
29
+ meta_X = np.column_stack(meta_inputs)
30
+
31
+ # Meta prediction
32
+ pred = meta_model.predict(meta_X)[0]
33
+ prob = meta_model.predict_proba(meta_X)[0, 1]
34
+
35
+ label = "Malware" if pred == 1 else "Benign"
36
+ return label, float(prob)
37
+
38
+ # ======================
39
+ # UI
40
+ # ======================
41
+ inputs = [gr.Number(label=feat) for feat in feature_names]
42
+
43
+ outputs = [
44
+ gr.Textbox(label="Prediction"),
45
+ gr.Number(label="Malware Probability")
46
+ ]
47
+
48
+ app = gr.Interface(
49
+ fn=predict_malware,
50
+ inputs=inputs,
51
+ outputs=outputs,
52
+ title="Stacking-based Malware Detection",
53
+ description="ExtraTrees + RandomForest + LightGBM + LogisticRegression → XGBoost"
54
+ )
55
+
56
+ if __name__ == "__main__":
57
+ app.launch()