Skip to content

Add SenKin CITE-seq method (LightGBM + GRU ensemble) - #18

Merged
rcannood merged 10 commits into
openproblems-bio:mainfrom
benjaminfreyuu:add-senkin-clean
Jul 30, 2026
Merged

Add SenKin CITE-seq method (LightGBM + GRU ensemble)#18
rcannood merged 10 commits into
openproblems-bio:mainfrom
benjaminfreyuu:add-senkin-clean

Conversation

@benjaminfreyuu

Copy link
Copy Markdown
Contributor

Describe your changes

Checklist before requesting a review

  • [x ] I have performed a self-review of my code

  • Check the correct box. Does this PR contain:

    • Breaking changes
    • [x ] New functionality
    • Major changes
    • Minor changes
    • Bug fixes
  • Proposed changes are described in the CHANGELOG.md

  • [ x] CI Tests succeed and look good!

@VladimirShitov
VladimirShitov self-requested a review July 1, 2026 13:22

@VladimirShitov VladimirShitov left a comment

Copy link
Copy Markdown
Contributor

Choose a reason for hiding this comment

The reason will be displayed to describe this comment to others. Learn more.

Thanks! Looks very good overall, but some functionality should be moved to https://github.com/lueckenlab/senkin-tmp-cite-pred and imported from there for better reusability

Comment thread src/methods/senkin/senkin/config.vsh.yaml Outdated
Comment thread src/methods/senkin/senkin/config.vsh.yaml Outdated
Comment thread src/methods/senkin_tmp/senkin_tmp_train/script.py
@VladimirShitov

Copy link
Copy Markdown
Contributor

Could you update this one with the updated code from senkin-tmp repo and then merge (or tell me to merge)?

Replace the inline _lognorm and _clr_tsvd_fitted duplicates in senkin_train
with the now-published library functions log_normalize() and clr_tsvd() from
senkin_tmp_cite_pred.preprocess. Behaviour is unchanged: log_normalize uses
target_sum=1e4 (CP10K + log1p) matching the old _lognorm, and clr_tsvd uses
random_state=42 for reproducible components. The previously-kept fitted TSVD
object was unused and is dropped.
@benjaminfreyuu

Copy link
Copy Markdown
Contributor Author

Replaced the inline _lognorm and _clr_tsvd_fitted duplicates in senkin_train
with the added library functions log_normalize() and clr_tsvd() from
senkin_tmp_cite_pred.preprocess.

Ready to merge @VladimirShitov

log_normalize() preserves the input sparsity, so on the sparse counts layer it
returns a sparse matrix. np.asarray() on a sparse matrix yields a 0-d object
array, which crashed at X_lognorm_all[train_mask] with an IndexError. Use the
existing _to_dense() helper (and restore float64) so the downstream boolean-mask
slicing and concatenation work, matching the previous inline _lognorm behaviour.

Verified: viash test src/methods/senkin/senkin_train passes (1/1).

Co-Authored-By: Claude Opus 4.8 <noreply@anthropic.com>
@rcannood

This comment was marked as resolved.

rcannood added 2 commits July 30, 2026 08:47
* Add methods/senkin to run_benchmark's dependencies -- it was in the
  methods list but not declared, so the generated workflow referenced an
  undefined variable and the whole run died at startup
* Report "senkin" as the method id rather than senkin_predict; the
  metrics copy uns["method_id"] straight into the score
* Drop the gpu label: measured on a T4, senkin runs entirely on CPU
  (LightGBM's pip wheel is CPU-only and dominates the runtime, and
  TensorFlow cannot load CUDA in this image)
* Give senkin_predict a test_setup and generate its model in
  test_resources.sh, so viash test has an --input_model to use
* Rename the method and both sub-components to `senkin_tmp`, so the name
  credits both team members
* Point the doi at the 2026 competition paper (10.64898/2026.02.24.707614)

Co-authored-by: Vladimir Shitov <35199218+VladimirShitov@users.noreply.github.com>
@rcannood

Copy link
Copy Markdown
Member

@benjaminfreyuu @VladimirShitov Can we expect this method to be runnable on pairs other than GEX -> PROT, or will it always fail?

rcannood added 4 commits July 30, 2026 11:42
* Cap the boosting rounds, early stopping patience and nn epochs with
  `info.test_default`, the way openproblems-bio#57 did for the other two train components
* Fold the senkin_tmp fixture into the skip-if-up-to-date structure that
  came in with openproblems-bio#57
@rcannood
rcannood merged commit aa36872 into openproblems-bio:main Jul 30, 2026
3 checks passed
Sign up for free to join this conversation on GitHub. Already have an account? Sign in to comment

Labels

None yet

Projects

None yet

Development

Successfully merging this pull request may close these issues.

3 participants