--- Log opened Wed May 16 00:00:08 2018 | ||
@sukey | [https://github.com/shogun-toolbox/shogun] Pull Request https://github.com/shogun-toolbox/shogun/pull/4285 synchronized by vinx13 | 05:48 |
---|---|---|
@sukey | [https://github.com/shogun-toolbox/shogun] Pull Request https://github.com/shogun-toolbox/shogun/pull/4285 | 05:51 |
@sukey | [https://github.com/shogun-toolbox/shogun] Pull Request https://github.com/shogun-toolbox/shogun/pull/4235 synchronized by shubham808 | 08:25 |
@sukey | [https://github.com/shogun-toolbox/shogun] Pull Request https://github.com/shogun-toolbox/shogun/pull/4285 synchronized by vinx13 | 08:56 |
@wiking | wuwei, make sure that you use the right indenting for the python examples | 09:35 |
@wiking | some of them are wrong atm | 09:35 |
wuwei | all right, let me fix them | 09:36 |
-!- travis-ci [~travis-ci@ec2-54-81-74-116.compute-1.amazonaws.com] has joined #shogun | 09:42 | |
travis-ci | it's Shubham Shukla's turn to pay the next round of drinks for the massacre he caused in shubham808/shogun: https://travis-ci.org/shubham808/shogun/builds/379566332 | 09:42 |
-!- travis-ci [~travis-ci@ec2-54-81-74-116.compute-1.amazonaws.com] has left #shogun [] | 09:42 | |
-!- travis-ci [~travis-ci@ec2-54-81-74-116.compute-1.amazonaws.com] has joined #shogun | 10:03 | |
travis-ci | it's Shubham Shukla's turn to pay the next round of drinks for the massacre he caused in shubham808/shogun: https://travis-ci.org/shubham808/shogun/builds/379566332 | 10:03 |
-!- travis-ci [~travis-ci@ec2-54-81-74-116.compute-1.amazonaws.com] has left #shogun [] | 10:03 | |
wuwei | hi wiking, i'll be out a bit, can we delay our meeting an hour later (1800 beijing time) | 10:33 |
@wiking | sire | 10:36 |
@wiking | sure | 10:36 |
@wiking | no worries | 10:36 |
-!- micmn [uid216702@gateway/web/irccloud.com/x-gjcsjjkiileleoin] has joined #shogun | 11:16 | |
wuwei | wiking: hey | 12:01 |
@wiking | hey hey | 12:01 |
@wiking | just q asec | 12:03 |
@wiking | ok here | 12:04 |
wuwei | sure | 12:04 |
@wiking | ok so i haven't got time yet to thoroughly go trough the patch | 12:05 |
@wiking | but the question i just had in mind thinking about transformers and machines | 12:05 |
@wiking | is the following | 12:05 |
@wiking | ah ok nothing | 12:05 |
@wiking | or maybe yeah i'm not so sure | 12:05 |
@wiking | so i'm thinking about say we have a DAG (directed graph) where u define your pipeline | 12:06 |
@wiking | where each node is a simple Machine or Transformer | 12:06 |
wuwei | ok | 12:06 |
@wiking | so my problem is that how we would store this DAG | 12:08 |
wuwei | so u want everything, features, labels, in a single pipeline? | 12:10 |
@wiking | no | 12:13 |
@wiking | Pipeline: CMachine | 12:14 |
@wiking | so it has trian and apply | 12:14 |
@wiking | but internally it just executes the stack of transformers and machines | 12:14 |
wuwei | i see | 12:15 |
wuwei | i'm not sure, api for operating a graph may be complex for users | 12:18 |
wuwei | compared with a linear list | 12:19 |
@wiking | yeah i mean interally it's a graph | 12:20 |
@wiking | but as a use | 12:20 |
@wiking | you would rather just do | 12:20 |
@wiking | Pipeline::append(M/T) | 12:20 |
@wiking | or ::add | 12:20 |
@wiking | but the question is more how do you store those objs internally | 12:21 |
@wiking | i mean you could do a std::vector<SGObjectU*> | 12:21 |
@wiking | but then you need to infer the type every time you execute the pipeline | 12:21 |
wuwei | yeah | 12:23 |
wuwei | but we have to use some 'if' in runtime, because both preproc and machine are allowed | 12:26 |
wuwei | by either RTTI or storing the type in some way | 12:28 |
@wiking | wuwei, yeah | 12:39 |
@wiking | which would not be the case if everything woudl be a machine | 12:39 |
@wiking | :) | 12:39 |
wuwei | okay but I haven't got some idea now | 12:43 |
wuwei | btw could u elaborate a bit how this graph is built internally | 12:44 |
@wiking | ok say that we only now support linear | 12:45 |
@wiking | pipeline | 12:45 |
@wiking | so it's a simple A->B->C->D | 12:45 |
@wiking | as an example | 12:45 |
@wiking | i want to do a simple standardScaling(Transformer)->LinearSVM(Machine)( | 12:46 |
@wiking | so you do | 12:46 |
@wiking | auto p = new CPipeline(); | 12:46 |
@wiking | p->add(standardScaling); p->add(LinearSVM); | 12:46 |
@wiking | and then you would do | 12:46 |
@wiking | p->train(Features) | 12:46 |
@wiking | and later do p->apply(featureS) | 12:46 |
@wiking | now the question internally | 12:46 |
@wiking | how do you represent this pipeline | 12:46 |
wuwei | in this simple example I can use a list, and iterate over the list when applying | 12:49 |
@wiking | wuwei, yeah but what do you store in std::vector? | 13:21 |
wuwei | that should be SGObject*, which is bad :) | 13:23 |
-!- wiking [~wiking@huwico/staff/wiking] has quit [Read error: Connection reset by peer] | 13:43 | |
-!- wiking [~wiking@huwico/staff/wiking] has joined #shogun | 13:44 | |
-!- mode/#shogun [+o wiking] by ChanServ | 13:44 | |
@wiking | wuwei, yeah that's my oprobllem actually... that it's way too general | 13:44 |
@wiking | because every time you train | 13:44 |
@wiking | or apply | 13:44 |
@wiking | you'll do a type inference for every obj | 13:44 |
@wiking | wuwei, of course you can store an std::variant :P | 13:45 |
@wiking | the problem that it's c++17 | 13:46 |
@wiking | https://github.com/mpark/variant | 13:48 |
wuwei | i prefer variant, as we don't actually need SGObject*, for only preproc and machine | 13:49 |
@wiking | yep | 13:49 |
@wiking | so this way it's possible | 13:49 |
@wiking | dunno what lisitsyn thinks ^ | 13:49 |
@wiking | wuwei, note that plz only use this implementation of variant via a macro | 13:54 |
@wiking | something like | 13:54 |
@wiking | #define SG_VARIANT mpark::variant | 13:54 |
@wiking | so that flipping to std::variant should be easy | 13:54 |
wuwei | sure | 13:54 |
@wiking | or of course we can do this nicer | 13:54 |
@wiking | with | 13:54 |
@wiking | template<VARAGS... > using variant = typename ... | 13:55 |
@wiking | right? | 13:55 |
@wiking | :) | 13:55 |
wuwei | yeah | 13:56 |
@wiking | ok | 13:57 |
@wiking | do you have any blockers atm? | 13:57 |
wuwei | a type alias, right? | 13:57 |
@wiking | yes | 13:57 |
@wiking | a type alias | 13:57 |
@wiking | wuwei, can you actually prepare a patch against develop? | 13:58 |
@wiking | not urgent | 13:58 |
@wiking | but when you have some idle time | 13:58 |
@wiking | and actually make it so that you check in cmake whether std::variant is available or not | 13:58 |
wuwei | i'm trying to support inplace mode for transformers now | 13:59 |
@wiking | see for example HAVE_LGAMMAL | 13:59 |
@wiking | and then something like HAVE_STD_VARIANT | 13:59 |
@wiking | and basically do the corresponding type alias in the code | 14:00 |
@wiking | so if somebody uses a compile that supports c++17 then it would default to std::variant | 14:00 |
@wiking | wuwei, ok great :) | 14:00 |
@wiking | that's gonna be a bit tricky | 14:00 |
@wiking | :P | 14:00 |
@wiking | but yeah for things like standardization | 14:00 |
@wiking | we need that | 14:00 |
@wiking | btw | 14:00 |
@wiking | while you are changing so much stuff | 14:00 |
@wiking | can we actually standardize the names of some of our preprocessors | 14:01 |
@wiking | :) | 14:01 |
@wiking | for example CPruneVarSubMean | 14:01 |
@wiking | we should have a simple CStandardizer | 14:01 |
@wiking | or something liek that | 14:01 |
@wiking | (see StandardScaler in sklearn) | 14:01 |
@wiking | that has a flag for doing unit variance (true/false) | 14:02 |
@wiking | and dunno if we wanna extend this class to a CPruneFeature class | 14:02 |
@wiking | that does the pruning in case the variance is lower than a given threshold | 14:02 |
wuwei | sure | 14:02 |
@wiking | i dont really like the idea having 2 flags in CStandardizer | 14:03 |
@wiking | unit variance = true/false; prune = true/false | 14:03 |
@wiking | :) | 14:03 |
@wiking | but yeah there are other preprocessors that has some cryptic name | 14:03 |
@wiking | feel free to suggest different naming | 14:03 |
@wiking | we can discuss that in the PR | 14:03 |
@wiking | :) | 14:03 |
@wiking | wuwei, great! thnx a lot! | 14:04 |
wuwei | my problem for now is | 14:04 |
wuwei | implementing inplace mode, and now i'm trying to create a clone in base class and calls implementation like apply_to_feature_matrix of subclass | 14:05 |
@wiking | oh i see | 14:05 |
wuwei | and my idea is to share underlying data, but create a new instance instead | 14:06 |
wuwei | so features can still be immutable | 14:06 |
wuwei | im not so sure | 14:06 |
@wiking | ah | 14:07 |
@wiking | it's a bit tricky | 14:07 |
@wiking | :) | 14:07 |
wuwei | but this can be a bit more refactor | 14:07 |
@wiking | sure | 14:07 |
@wiking | i mean any idea you have just put it in | 14:07 |
@wiking | it's better to just do it | 14:07 |
@wiking | (not spend too much time atm on either this or that) | 14:07 |
wuwei | sure | 14:07 |
@wiking | and just see how it works | 14:07 |
@wiking | and discuss later | 14:07 |
wuwei | btw there are some apis in subclasses of preproc like apply_to_string() apply_to_feature_matrix, how about remove or make them protected? i think them confusing | 14:09 |
@wiking | yes | 14:10 |
@wiking | those are old apis | 14:10 |
@wiking | shouldn't be exposed like that anymore | 14:11 |
wuwei | great! | 14:11 |
-!- sukey [~nodebot@ks312251.kimsufi.com] has quit [Remote host closed the connection] | 17:48 | |
-!- sukey [~nodebot@ks312251.kimsufi.com] has joined #shogun | 17:49 | |
-!- mode/#shogun [+o sukey] by ChanServ | 17:49 | |
@wiking | https://www.vitavonni.de/blog/201503/2015031201-the-sad-state-of-sysadmin-in-the-age-of-containers.html | 18:44 |
@sukey | [https://github.com/shogun-toolbox/shogun] Pull Request https://github.com/shogun-toolbox/shogun/pull/4286 opened by shubham808 | 20:51 |
@sukey | [https://github.com/shogun-toolbox/shogun] Pull Request https://github.com/shogun-toolbox/shogun/pull/4286 synchronized by shubham808 | 20:55 |
--- Log closed Thu May 17 00:00:10 2018 |
Generated by irclog2html.py 2.10.0 by Marius Gedminas - find it at mg.pov.lt!