{"action":"created","issue":{"url":"https://api.github.com/repos/mlr-org/mlr/issues/2456","repository_url":"https://api.github.com/repos/mlr-org/mlr","labels_url":"https://api.github.com/repos/mlr-org/mlr/issues/2456/labels{/name}","comments_url":"https://api.github.com/repos/mlr-org/mlr/issues/2456/comments","events_url":"https://api.github.com/repos/mlr-org/mlr/issues/2456/events","html_url":"https://github.com/mlr-org/mlr/pull/2456","id":372037257,"node_id":"MDExOlB1bGxSZXF1ZXN0MjI0MzQ5ODAz","number":2456,"title":"Filter: Add ensemble filter methods","user":{"login":"pat-s","id":8430564,"node_id":"MDQ6VXNlcjg0MzA1NjQ=","avatar_url":"https://avatars3.githubusercontent.com/u/8430564?v=4","gravatar_id":"","url":"https://api.github.com/users/pat-s","html_url":"https://github.com/pat-s","followers_url":"https://api.github.com/users/pat-s/followers","following_url":"https://api.github.com/users/pat-s/following{/other_user}","gists_url":"https://api.github.com/users/pat-s/gists{/gist_id}","starred_url":"https://api.github.com/users/pat-s/starred{/owner}{/repo}","subscriptions_url":"https://api.github.com/users/pat-s/subscriptions","organizations_url":"https://api.github.com/users/pat-s/orgs","repos_url":"https://api.github.com/users/pat-s/repos","events_url":"https://api.github.com/users/pat-s/events{/privacy}","received_events_url":"https://api.github.com/users/pat-s/received_events","type":"User","site_admin":false},"labels":[{"id":421273968,"node_id":"MDU6TGFiZWw0MjEyNzM5Njg=","url":"https://api.github.com/repos/mlr-org/mlr/labels/pr-work%20in%20progress%20-%20not%20done","name":"pr-work in progress - not done","color":"d4c5f9","default":false},{"id":556929614,"node_id":"MDU6TGFiZWw1NTY5Mjk2MTQ=","url":"https://api.github.com/repos/mlr-org/mlr/labels/project%20-%20base","name":"project - base","color":"bfd4f2","default":false},{"id":54191380,"node_id":"MDU6TGFiZWw1NDE5MTM4MA==","url":"https://api.github.com/repos/mlr-org/mlr/labels/type-enhancement","name":"type-enhancement","color":"84b6eb","default":false}],"state":"open","locked":false,"assignee":null,"assignees":[],"milestone":null,"comments":0,"created_at":"2018-10-19T16:54:25Z","updated_at":"2018-10-20T12:17:01Z","closed_at":null,"author_association":"CONTRIBUTOR","pull_request":{"url":"https://api.github.com/repos/mlr-org/mlr/pulls/2456","html_url":"https://github.com/mlr-org/mlr/pull/2456","diff_url":"https://github.com/mlr-org/mlr/pull/2456.diff","patch_url":"https://github.com/mlr-org/mlr/pull/2456.patch"},"body":"\r\n"},"comment":{"url":"https://api.github.com/repos/mlr-org/mlr/issues/comments/431575161","html_url":"https://github.com/mlr-org/mlr/pull/2456#issuecomment-431575161","issue_url":"https://api.github.com/repos/mlr-org/mlr/issues/2456","id":431575161,"node_id":"MDEyOklzc3VlQ29tbWVudDQzMTU3NTE2MQ==","user":{"login":"mb706","id":15801081,"node_id":"MDQ6VXNlcjE1ODAxMDgx","avatar_url":"https://avatars2.githubusercontent.com/u/15801081?v=4","gravatar_id":"","url":"https://api.github.com/users/mb706","html_url":"https://github.com/mb706","followers_url":"https://api.github.com/users/mb706/followers","following_url":"https://api.github.com/users/mb706/following{/other_user}","gists_url":"https://api.github.com/users/mb706/gists{/gist_id}","starred_url":"https://api.github.com/users/mb706/starred{/owner}{/repo}","subscriptions_url":"https://api.github.com/users/mb706/subscriptions","organizations_url":"https://api.github.com/users/mb706/orgs","repos_url":"https://api.github.com/users/mb706/repos","events_url":"https://api.github.com/users/mb706/events{/privacy}","received_events_url":"https://api.github.com/users/mb706/received_events","type":"User","site_admin":false},"created_at":"2018-10-20T12:17:01Z","updated_at":"2018-10-20T12:17:01Z","author_association":"CONTRIBUTOR","body":"Instead of putting lots of special code into the generateFilterValuesData function the ensemble stuff should probably happen somewhere else. My suggestion is that the filter code should be changed to also accept functions or `Filter` objects (i.e. the objects found in `mlr:::.FilterRegister`). Ensembles (and other interesting things) could then be implemented using functionals that create new filters from existing ones\r\n```r\r\nfilterFeatures(pid.task, \"univariate.model.score\", abs = 3,\r\n  perf.learner = \"classif.logreg\")\r\n# (there should probably be a better way to access this than by \":::\")\r\nfilterFeatures(pid.task, mlr:::.FilterRegister$univariate.model.score, abs = 3,\r\n  perf.learner = \"classif.logreg\")\r\nfilterFeatures(pid.task,\r\n  makeFilterEnsemble(\"median\", c(\"univariate.model.score\", \"variance\", \"anova.test\")),\r\n  abs = 3,\r\n  univariate.model.score.perf.learn = \"classif.logreg\")\r\n# alternative:\r\nfilterFeatures(pid.task,\r\n  makeFilterEnsemble(\"median\", c(\"univariate.model.score\", \"variance\", \"anova.test\")),\r\n    filter.args = list(univariate.model.score = list(perf.learn = \"classif.logreg\")),\r\n  abs = 3)\r\n```\r\nIn these examples, the `makeFilterEnsemble` method would return a `Filter` object (mostly a function with some metadata about allowed task types) that does the ensemble things internally; \"generateFilterValuesData\" should not be involved in this and call the metafilter just the same way it calls an ordinary filter."}}
{"actor":{"display_login":"mb706"}}