NumericalNim is a package of numerical methods written in Nim
It feels like there are a lot of stuff happening in Arraymancer atm (Laser and new ptr+length) so perhaps this isn't the best time to start adding even more in it right now? Or am I just to picky?
A separate Arraymancer-addons package or something in the meanwhile as a dependency of Arraymancer perhaps? So when you install Arraymancer it automatically install this as well
But this may not feel as neat as having it all in the same package... 🤔
na, nothing much. For now I've finished on the low-level stuff
implementing the Lux compiler would take lots of time. I've been very impressed by the result of a new project by ETH Zurich https://github.com/spcl/dace
but doing it in Nim requires a graph library that works at compile-time
however it neatly addresses some problems that I may be stuck with for distributed computing
on a more impactful thing, I was otherwise thinking on implementing at least a simple random forest and/or some OneHotEncoding so that we can at least do the "Titanic" playground competition from Kaggle fully in Arraymancer and obtain OK results
Alright then! 👍 As there are no obstacles it should just be a matter of starting to implement things 😅
Once Lux is done it will be really cool!
I'm so amazed by how much you can abstract away from the user and still make the code run so much faster
Machine learning algorithms are cool as well and one of Arraymancers primary focuses if I understand it correctly?
Is there any point in implementing it all from scratch (apart from that you actually learn how it works) or is porting for example SciKit's random forest implementation acceptable?😅
yes ML algo are a primary focus because I don't know much about physics (besides being trained as a mechanical engineer so I do know about DE and used multiple FE simulations, including Nastran, Patran, Ansys Fluent for airplane design and many other computational dynamics tool for melted iron and steel but that was only as a user)
one thing I will definitely not implement from scratch is gradient boosted trees given the work that is being done in XGBoost and LightGBM
note that I didn't reimplement from scratch, just reused linear algebra components from Lapack
because I don't know much about physics
What are you thinking of here? I do know a thing or two of course. I can maybe help.
regarding implementing from scratch: for me as a - still sort of - beginner I often struggle to find the proper algorithms that I should implement. For many areas there's so many different ones with pros and cons one the one hand or the "algorithms" are not actually what's usually done implementation wise, because there's always a bunch of things, which for some people are obvious things to do, efficiency wise. And to be honest I'm pretty slow at converting math to code without running into a huge number of numerical problems, at least.
Oh perhaps it could be worthwhile at least trying to combine doing it from scratch and getting "heavy inspiration" from SciKit
With the physics things I should also be able to lend a helping hand 🖐️ And I agree that some things are really hard to understand hoe to implement from theory
Looking at how others have implemented things really is the thing that had taught me the most
Getting a working implementation is the most important first step in my opinion and then we can always switch the algorithm if we find a faster one in the future and hopefully we will be able to maintain the same function calls for the users
Getting a working implementation is the most important first step
And to be honest I'm pretty slow at converting math to code without running into a huge number of numerical problems, at least.
Reproducing papers is almost impossible
I don't try it whether in Machine Learning or Cryptography or blockchain
I look into the implementations
multithreading is even worse
that makes me feel a little better about myself ;)