Pitch: scm2cpp-learn: estimadores do scikit-learn até ~1000x mais rápidos, com os mesmos resultados
Olá! Quero compartilhar meu projeto open source (MIT):
- 44 estimadores do scikit-learn (Lasso, LogisticRegression, RFE, PCA, SVM…) com os mesmos algoritmos e os mesmos resultados (coeficientes iguais até o arredondamento)
- de 1,5x a ~1000x mais rápidos (ex.: RFE 1047x, MultiTaskElasticNetCV ~100x em um único núcleo)
- compatível com a API do scikit-learn: funciona com Pipeline e GridSearchCV, passa no
check_estimator pip install scm2cpp-learn: wheels para Linux, macOS e Windows; GPU (CUDA) opcional
Por que é mais rápido?
Em vez de mudar o algoritmo, o ganho vem de reorganizar o cálculo. Por exemplo, a validação cruzada do Lasso calcula a matriz de Gram (X'X) uma única vez e obtém a de cada fold por subtração, então os dados originais não são percorridos de novo. No RFE, em vez de reajustar o modelo a cada rodada, a fatoração de Cholesky é atualizada ao remover cada variável. Na GPU, várias penalidades são resolvidas em paralelo, uma por bloco CUDA.
Curiosidade
Os algoritmos são escritos em Scheme e traduzidos para C++ legível pelo meu compilador scm2cpp, que deriva essas otimizações automaticamente a partir da versão ingênua.
Nem tudo é mais rápido: por exemplo, PCA com muitas features pode ser mais lento, e isso está documentado no README.
Repositório: https://github.com/niitsuma/scm2cpp
Feedback é muito bem-vindo! (Sou do Japão, o texto foi traduzido por máquina, desculpe qualquer erro.)