Multiple123 commited on
Commit
7dcfbfd
·
verified ·
1 Parent(s): aa5c128

Update app.py

Browse files
Files changed (1) hide show
  1. app.py +7 -7
app.py CHANGED
@@ -14,7 +14,7 @@ MODEL_PATH = "models/svm_pipeline.joblib"
14
  BG_PATH = "data/bg.csv"
15
 
16
  # 模型最终需要的 8 个特征(顺序必须与训练一致)
17
- FEATURES = ["ALB", "TP", "TBA", "AST/ALT", "CREA", "PNI", "AAPR", "DBIL"]
18
 
19
  # 加载模型与背景
20
  pipeline = joblib.load(MODEL_PATH)
@@ -52,7 +52,7 @@ def _render_force_plot(base_val: float, shap_1d: np.ndarray, feat_1d: np.ndarray
52
  # ——将特征值按需四舍五入,减少标签长度(可根据需要微调每列小数位)
53
  feat = np.asarray(feat_1d, dtype=float).copy()
54
  round_map = {
55
- "ALB": 2, "TP": 2, "TBA": 2, "AST/ALT": 2, "CREA": 1, "PNI": 1, "AAPR": 3, "DBIL": 1
56
  }
57
  feat_rounded = [
58
  np.round(val, round_map.get(name, 2)) for val, name in zip(feat, fnames)
@@ -78,20 +78,20 @@ def _coerce_float(x):
78
  return float(x) if x is not None and x != "" else np.nan
79
 
80
 
81
- def predict_and_explain(ALB, TP, TBA, AST/ALT, CREA, LYM, ALP, DBIL, nsamples=200):
82
  status = []
83
  try:
84
  # ---- 1) 取数并校验 ----
85
  ALB = _coerce_float(ALB)
86
  TP = _coerce_float(TP)
87
  TBA = _coerce_float(TBA)
88
- AST/ALT = _coerce_float(AST/ALT)
89
  CREA = _coerce_float(CREA)
90
  LYM = _coerce_float(LYM)
91
  ALP = _coerce_float(ALP)
92
  DBIL = _coerce_float(DBIL)
93
 
94
- vals = [ALB, TP, TBA, AST/ALT, CREA, LYM, ALP, DBIL]
95
  if any(np.isnan(v) for v in vals):
96
  return None, None, "Error: 所有输入必须为数值且不可缺失。"
97
 
@@ -106,7 +106,7 @@ def predict_and_explain(ALB, TP, TBA, AST/ALT, CREA, LYM, ALP, DBIL, nsamples=20
106
  status.append(f"Derived: PNI={PNI:.1f}, AAPR={AAPR:.3f}")
107
 
108
  # ---- 3) 组装最终 8 特征并预测 ----
109
- x_row = np.array([[ALB, TP, TBA, AST/ALT, CREA, PNI, AAPR, DBIL]], dtype=np.float64)
110
 
111
  if hasattr(pipeline, "predict_proba"):
112
  classes_ = getattr(pipeline, "classes_", None)
@@ -227,4 +227,4 @@ with gr.Blocks() as demo:
227
  )
228
 
229
  if __name__ == "__main__":
230
- demo.launch()
 
14
  BG_PATH = "data/bg.csv"
15
 
16
  # 模型最终需要的 8 个特征(顺序必须与训练一致)
17
+ FEATURES = ["ALB", "TP", "TBA", "AST_ALT", "CREA", "PNI", "AAPR", "DBIL"]
18
 
19
  # 加载模型与背景
20
  pipeline = joblib.load(MODEL_PATH)
 
52
  # ——将特征值按需四舍五入,减少标签长度(可根据需要微调每列小数位)
53
  feat = np.asarray(feat_1d, dtype=float).copy()
54
  round_map = {
55
+ "ALB": 2, "TP": 2, "TBA": 2, "AST_ALT": 2, "CREA": 1, "PNI": 1, "AAPR": 3, "DBIL": 1
56
  }
57
  feat_rounded = [
58
  np.round(val, round_map.get(name, 2)) for val, name in zip(feat, fnames)
 
78
  return float(x) if x is not None and x != "" else np.nan
79
 
80
 
81
+ def predict_and_explain(ALB, TP, TBA, AST_ALT, CREA, LYM, ALP, DBIL, nsamples=200):
82
  status = []
83
  try:
84
  # ---- 1) 取数并校验 ----
85
  ALB = _coerce_float(ALB)
86
  TP = _coerce_float(TP)
87
  TBA = _coerce_float(TBA)
88
+ AST_ALT = _coerce_float(AST_ALT)
89
  CREA = _coerce_float(CREA)
90
  LYM = _coerce_float(LYM)
91
  ALP = _coerce_float(ALP)
92
  DBIL = _coerce_float(DBIL)
93
 
94
+ vals = [ALB, TP, TBA, AST_ALT, CREA, LYM, ALP, DBIL]
95
  if any(np.isnan(v) for v in vals):
96
  return None, None, "Error: 所有输入必须为数值且不可缺失。"
97
 
 
106
  status.append(f"Derived: PNI={PNI:.1f}, AAPR={AAPR:.3f}")
107
 
108
  # ---- 3) 组装最终 8 特征并预测 ----
109
+ x_row = np.array([[ALB, TP, TBA, AST_ALT, CREA, PNI, AAPR, DBIL]], dtype=np.float64)
110
 
111
  if hasattr(pipeline, "predict_proba"):
112
  classes_ = getattr(pipeline, "classes_", None)
 
227
  )
228
 
229
  if __name__ == "__main__":
230
+ demo.launch()