Please add support for automated feature engineering, ideally build on top of the already wonderful feature tool library.
This is especially helpful when one could just declare the target feature in the YAML file and then just declare "autofeatures=True" to let feature tool find and rank the best features for classification.
https://github.com/Featuretools/featuretools
https://blog.featurelabs.com/deep-feature-synthesis/
Similarly, for time series, please add automated feature extraction based on the tsfrsh library.
This would be beyond incredible because it would save so much time on feature engineering.
Thanks for the suggestion @marvin-hansen . I'm not overly familiar with those tools, but I will check them out and consider this enhancement for future releases.
Could I contribute to this?
@kamathhrishi sure you can! if you want let's sync offline because there are a bunch of architectural choices that may be not straightforward to make this work.
@kamathhrishi sure you can! if you want let's sync offline because there are a bunch of architectural choices that may be not straightforward to make this work.
Sure , where do we discuss this ?
@w4nderlust How about creating a draft pull request and we can discuss it over there?
Please create a Gitq topic and let's discuss it there, trying to keep the list of issues clean :)
@w4nderlust I did create a Gitq topic https://gitq.com/uber/ludwig/topics/11/automated-feature-selection
Is there any update on this topic? It would be extremely useful for a project i'm working on
@danicattaneob no updates yet. The main reason is that, as much as it would be good to have that integrated, users can definitely do that manually and save a new csv and use that csv as the input to Ludwig. So this feature requestis a matter of convenience, while there are feature requests that are more about things that now cannot be done with Ludwig or other types of limitations, and those have a higher priority at the moment.
That said, is someone has a big interest in having this implemented sooner, I will gladly accept contributions and I can help out directing the development and suggesting what to do. Reach out in case :)
Unfortunately I won't be able to work on this :( if anybody else is interested they could go ahead.
@w4nderlust yes, although it can be done manually it can be really tedious. It could be implemented a way of generating different variations of the inputs dataset (maybe using a library like featuretools) and evaluating each one of them to find the best model definition. I would like to contribute but I don't know if it's too complex for me, since I'm a jr developer with little experience.
@w4nderlust
@danicattaneob
I did some research on auto feature generation and for the most part, the generated features were pretty useless. Instead, I came up with ProcFlow to automate the tedious workflow of testing various featureset combinations.
Not sure if it is relevant to Ludwig, but certainly for those who do feature engineering before loading datasets into Ludwig or just any other DL framework.
Repo containing utils & ProcFlow: https://github.com/marvin-hansen/StockUtils
ProcFlow is a mechanism of daisy-chaining data pre-processing workflows (hence ProcFlow) in a way that allows rapid experimentation. Effectively, each ProcFlow describes a "FeatureSet" for a given dataset and adds a unique ID to it, so you can load FeatureSet-23 and compare it to FeatureSet-14 on the same data.
And the procs used in the ProcFlow:
https://github.com/marvin-hansen/StockUtils/blob/master/src/procs/Procs.py
Sample ProcFlow:
https://github.com/marvin-hansen/StockUtils/blob/master/src/procs/ProcFlow.py
On top of ProcFlow, I am building a "Preperator" that essentially automates the entire process just before running the experiment. That code is under construction to prepare experimentation automation so be mindful here.
https://github.com/marvin-hansen/StockUtils/blob/master/src/preps/Preperator.py
While the actual procs I'm using are fairly specialized to the domain I am working on,
the ProcFlow design is domain agnostic enough for usage in just about any DL project that requires some feature engineering.
Best
Marvin
"The struggle itself toward the heights is enough to fill a man 's heart"
@marvin-hansen thank you so much for sharing your experience, it's much appreciated!
Most helpful comment
@w4nderlust
@danicattaneob
I did some research on auto feature generation and for the most part, the generated features were pretty useless. Instead, I came up with ProcFlow to automate the tedious workflow of testing various featureset combinations.
Not sure if it is relevant to Ludwig, but certainly for those who do feature engineering before loading datasets into Ludwig or just any other DL framework.
Repo containing utils & ProcFlow: https://github.com/marvin-hansen/StockUtils
ProcFlow is a mechanism of daisy-chaining data pre-processing workflows (hence ProcFlow) in a way that allows rapid experimentation. Effectively, each ProcFlow describes a "FeatureSet" for a given dataset and adds a unique ID to it, so you can load FeatureSet-23 and compare it to FeatureSet-14 on the same data.
And the procs used in the ProcFlow:
https://github.com/marvin-hansen/StockUtils/blob/master/src/procs/Procs.py
Sample ProcFlow:
https://github.com/marvin-hansen/StockUtils/blob/master/src/procs/ProcFlow.py
On top of ProcFlow, I am building a "Preperator" that essentially automates the entire process just before running the experiment. That code is under construction to prepare experimentation automation so be mindful here.
https://github.com/marvin-hansen/StockUtils/blob/master/src/preps/Preperator.py
While the actual procs I'm using are fairly specialized to the domain I am working on,
the ProcFlow design is domain agnostic enough for usage in just about any DL project that requires some feature engineering.
Best
Marvin
"The struggle itself toward the heights is enough to fill a man 's heart"