singhn9 commited on
Commit
2da398d
·
verified ·
1 Parent(s): a2c0d56

Update src/streamlit_app.py

Browse files
Files changed (1) hide show
  1. src/streamlit_app.py +31 -6
src/streamlit_app.py CHANGED
@@ -617,17 +617,42 @@ with tabs[4]:
617
  selector = SelectKBest(f_regression, k=min(40, X_scaled.shape[1]))
618
  X_sel = pd.DataFrame(selector.fit_transform(X_scaled, y), columns=[X.columns[i] for i in selector.get_support(indices=True)])
619
 
 
620
  kf = KFold(n_splits=5, shuffle=True, random_state=42)
621
- oof_preds, base_models = pd.DataFrame(index=X_sel.index), []
622
- for fam, entry in [(r["family"], r) for r in tuned_results if r.get("model_obj")]:
 
 
 
 
 
 
 
 
 
 
623
  model = entry["model_obj"]
624
  preds = np.zeros(X_sel.shape[0])
625
  for tr, va in kf.split(X_sel):
626
- model.fit(X_sel.iloc[tr], y.iloc[tr])
627
- preds[va] = model.predict(X_sel.iloc[va])
 
 
 
628
  oof_preds[f"{fam}_oof"] = preds
629
- model.fit(X_sel, y)
630
- base_models.append({"family": fam, "model": model})
 
 
 
 
 
 
 
 
 
 
 
631
 
632
  meta = LinearRegression(positive=True)
633
  meta.fit(oof_preds, y)
 
617
  selector = SelectKBest(f_regression, k=min(40, X_scaled.shape[1]))
618
  X_sel = pd.DataFrame(selector.fit_transform(X_scaled, y), columns=[X.columns[i] for i in selector.get_support(indices=True)])
619
 
620
+ # --- Safe stacking ensemble build ---
621
  kf = KFold(n_splits=5, shuffle=True, random_state=42)
622
+ oof_preds = pd.DataFrame(index=X_sel.index)
623
+ base_models = []
624
+
625
+ # Explicitly filter valid models (no truthiness eval)
626
+ valid_results = []
627
+ for r in tuned_results:
628
+ m = r.get("model_obj", None)
629
+ if isinstance(m, object) and hasattr(m, "fit") and callable(getattr(m, "fit", None)):
630
+ valid_results.append((r["family"], r))
631
+
632
+ # Train each base model safely
633
+ for fam, entry in valid_results:
634
  model = entry["model_obj"]
635
  preds = np.zeros(X_sel.shape[0])
636
  for tr, va in kf.split(X_sel):
637
+ try:
638
+ model.fit(X_sel.iloc[tr], y.iloc[tr])
639
+ preds[va] = model.predict(X_sel.iloc[va])
640
+ except Exception as e:
641
+ st.warning(f"⚠️ {fam} failed in fold: {e}")
642
  oof_preds[f"{fam}_oof"] = preds
643
+ try:
644
+ model.fit(X_sel, y)
645
+ base_models.append({"family": fam, "model": model})
646
+ except Exception as e:
647
+ st.warning(f"⚠️ {fam} full-fit failed: {e}")
648
+
649
+ # Meta model on OOF predictions
650
+ meta = LinearRegression(positive=True)
651
+ meta.fit(oof_preds, y)
652
+ y_pred = meta.predict(oof_preds)
653
+ final_r2 = r2_score(y, y_pred)
654
+ st.success(f"Stacked Ensemble R² = {final_r2:.4f}")
655
+
656
 
657
  meta = LinearRegression(positive=True)
658
  meta.fit(oof_preds, y)