--- Log opened Fri Mar 15 00:00:52 2019 | ||
-!- wiking [~wiking@huwico/staff/wiking] has quit [Remote host closed the connection] | 04:41 | |
-!- wiking [~wiking@c-185-45-237-122.customer.ggaweb.ch] has joined #shogun | 06:41 | |
-!- wiking [~wiking@c-185-45-237-122.customer.ggaweb.ch] has quit [Changing host] | 06:41 | |
-!- wiking [~wiking@huwico/staff/wiking] has joined #shogun | 06:41 | |
-!- mode/#shogun [+o wiking] by ChanServ | 06:41 | |
-!- wiking [~wiking@huwico/staff/wiking] has quit [Ping timeout: 272 seconds] | 06:46 | |
-!- wiking [~wiking@huwico/staff/wiking] has joined #shogun | 07:16 | |
-!- mode/#shogun [+o wiking] by ChanServ | 07:16 | |
-!- wiking [~wiking@huwico/staff/wiking] has quit [Remote host closed the connection] | 07:16 | |
-!- wiking [~wiking@c-185-45-237-122.customer.ggaweb.ch] has joined #shogun | 07:40 | |
-!- wiking [~wiking@c-185-45-237-122.customer.ggaweb.ch] has quit [Changing host] | 07:40 | |
-!- wiking [~wiking@huwico/staff/wiking] has joined #shogun | 07:40 | |
-!- mode/#shogun [+o wiking] by ChanServ | 07:40 | |
-!- zhuq [~zuq@30.123.127.176.dynamic.wline.res.cust.swisscom.ch] has joined #shogun | 07:46 | |
-!- gf712 [905208fd@gateway/web/freenode/ip.144.82.8.253] has joined #shogun | 09:32 | |
-!- zhuq [~zuq@30.123.127.176.dynamic.wline.res.cust.swisscom.ch] has quit [Ping timeout: 246 seconds] | 09:45 | |
-!- HeikoS [b924003b@gateway/web/cgi-irc/kiwiirc.com/ip.185.36.0.59] has joined #shogun | 10:31 | |
gf712 | HeikoS: hey | 10:37 |
---|---|---|
HeikoS | gf712 yo! | 10:38 |
gf712 | sorry I disappeared yesterday! I had to go | 10:38 |
gf712 | I need some help with the openml stuff | 10:38 |
gf712 | do you want to choose and openml task and a shogun algorithm for it? :D | 10:38 |
gf712 | and then I can test it out for a demo | 10:39 |
gf712 | and send a NB | 10:39 |
HeikoS | that would be really nice yes | 10:40 |
HeikoS | I also wonder | 10:40 |
HeikoS | shall I mention the task business on the poster? | 10:41 |
HeikoS | or rather just talk about it | 10:41 |
HeikoS | what do you think? | 10:41 |
gf712 | I think you should | 10:41 |
HeikoS | ok | 10:41 |
HeikoS | let me do that now then | 10:41 |
gf712 | because it explains where the data comes from | 10:41 |
gf712 | it is basically a competition | 10:41 |
gf712 | so we need to beat sklearn, weka and all of those :D | 10:42 |
gf712 | HeikoS: do you know any of the sets here https://www.openml.org/search?type=task ? | 10:42 |
HeikoS | hehe ok | 10:42 |
HeikoS | what is the metric? | 10:43 |
HeikoS | no dont think so | 10:43 |
HeikoS | I would go for some UCI dataset | 10:43 |
HeikoS | if they have | 10:43 |
HeikoS | because the scientists know those | 10:43 |
gf712 | I tested out a bit but didn't get any good results | 10:43 |
gf712 | because I was probably using the wrong algos | 10:43 |
gf712 | and wrong params | 10:43 |
HeikoS | just a moment will be back in a bit | 10:43 |
gf712 | OK | 10:43 |
HeikoS | what problems/algos were you using? | 10:44 |
HeikoS | what about something simple, like boston housing?= | 10:44 |
gf712 | this https://www.openml.org/t/4423 ? | 10:45 |
gf712 | but it says classification...? | 10:45 |
gf712 | I thought it was a regression problem no? | 10:45 |
gf712 | but yea, this one uses accuracy as a metric | 10:45 |
gf712 | and the leader is weka's rbf kernel logistic regression | 10:46 |
@wiking | lisitsyn: ping | 10:58 |
-!- HeikoS [b924003b@gateway/web/cgi-irc/kiwiirc.com/ip.185.36.0.59] has quit [Ping timeout: 268 seconds] | 10:58 | |
-!- HeikoS [b924003b@gateway/web/cgi-irc/kiwiirc.com/ip.185.36.0.59] has joined #shogun | 11:02 | |
HeikoS | gf712 back now | 11:03 |
HeikoS | so what does it classify? | 11:03 |
gf712 | HeikoS some sort of binary version of the regression problem | 11:07 |
gf712 | https://www.openml.org/d/853 | 11:07 |
gf712 | HeikoS: there is the regression version though | 11:08 |
HeikoS | I see so the labels are "value lower than mean" | 11:08 |
HeikoS | let's do both? | 11:08 |
gf712 | yes was going to say | 11:08 |
gf712 | any suggestions for also choice? | 11:08 |
gf712 | also we don't have pipeline support yes | 11:08 |
gf712 | yet | 11:08 |
gf712 | so can't do any preprocessing :/ | 11:08 |
HeikoS | mmh good point | 11:12 |
HeikoS | linear regression? | 11:13 |
HeikoS | it can learn the mean | 11:13 |
gf712 | OK, and then svm for classification? | 11:15 |
gf712 | btw is there any way of having binary labels in shogun that don't have to be -1 and +1 | 11:15 |
gf712 | I.e. also have 0 and +1 | 11:15 |
HeikoS | yeah svm is good | 11:15 |
HeikoS | yes | 11:15 |
HeikoS | they are automatically converted | 11:15 |
HeikoS | i.e. you pass multiclasslabels(0,1) | 11:16 |
gf712 | ah ok! | 11:16 |
HeikoS | to an algorithm that wants binary labels | 11:16 |
gf712 | and that works then for binary | 11:16 |
gf712 | cool! | 11:16 |
HeikoS | not always | 11:16 |
HeikoS | we have a conversion method | 11:16 |
HeikoS | called binary_labels(CLabels*) | 11:17 |
HeikoS | CBinaryLabels binary_labels(CLabels*) | 11:17 |
HeikoS | and it will either cast, or convert | 11:18 |
HeikoS | some algorithms already use it (all those covered in the meta examples do) | 11:18 |
gf712 | HeikoS i am trying out with svmlight because it has a train method | 11:20 |
HeikoS | maybe libsvm? | 11:20 |
HeikoS | because of the license issues? | 11:20 |
gf712 | ok! | 11:21 |
gf712 | HeikoS but then I get SystemError: [ERROR] In file /Users/ghoben/shogun/src/shogun/labels/BinaryLabels.cpp line 161: Cannot convert MulticlassLabels to binary labels: [ERROR] In file /Users/ghoben/shogun/src/shogun/labels/BinaryLabels.cpp line 154: Sorry, not yet implemented . | 11:23 |
HeikoS | easy to fix | 11:23 |
gf712 | and with binary I get SystemError: [ERROR] In file /Users/ghoben/shogun/src/shogun/labels/BinaryLabels.cpp line 81: Binary Labels must be -1 or +1! | 11:24 |
HeikoS | you need to add a case | 11:24 |
HeikoS | and convert | 11:24 |
HeikoS | cleverly | 11:24 |
gf712 | you mean on the shogun side? | 11:25 |
HeikoS | yes | 11:26 |
HeikoS | in CBinaryLabels::binary_labels | 11:27 |
gf712 | yup, adding a case there | 11:27 |
gf712 | but would I have to construct a CBinaryLabels there? | 11:28 |
gf712 | or is it possible to do some casting? | 11:28 |
HeikoS | yes construct them | 11:30 |
HeikoS | best to add a private helper method inside CBinaryLablels.cpp | 11:31 |
HeikoS | and then call it from the case | 11:31 |
HeikoS | the method will need to create a new labels instance with new data | 11:31 |
HeikoS | check CMulticlassLabels::to_multiclass | 11:31 |
HeikoS | just do the similar thing | 11:31 |
HeikoS | inside CMulticlassLabels.cpp | 11:32 |
gf712 | OK, let me try it out | 11:32 |
gf712 | HeikoS: would CBinaryLabels::binary_labels return Some<CBinaryLabels>? | 11:34 |
HeikoS | yes | 11:34 |
HeikoS | you might need to fix some memory issues after | 11:34 |
HeikoS | because sometimes shogun code doesnt REF pointers it receives | 11:35 |
HeikoS | and since Some does, there have been segfaults when I converted things from binary to multiclass | 11:35 |
HeikoS | but you will see that in the CI | 11:35 |
HeikoS | for now, if you just follow the same recipe, it should work | 11:35 |
gf712 | aight! | 11:36 |
gf712 | for Some, do you construct the raw pointer and then pass it to Some::from_raw? | 11:37 |
HeikoS | can you give me a snippet to run a task? | 11:38 |
HeikoS | check the CMulticlassLabels::to_multiclass method | 11:38 |
HeikoS | it first converts the SGVector with the labels | 11:38 |
HeikoS | and then calls the constructor, via some<CMulticlassLabels>(result_vector); | 11:38 |
gf712 | HeikoS: https://pastebin.com/b4fZVkbw | 11:39 |
HeikoS | thanks | 11:39 |
HeikoS | gf712 btw if you share notebooks, could you always share a gist link so I can look at the rendere version? | 11:39 |
gf712 | Ah yes, sure! | 11:40 |
gf712 | didn't realise gist rendered it | 11:40 |
HeikoS | yeah its pretty cook | 11:41 |
HeikoS | one click views, also from phone | 11:41 |
HeikoS | gf712 what can I do with "run" | 11:44 |
HeikoS | gf712 what would be the command to publish it on the website? | 11:44 |
HeikoS | (even if it doesnt work) | 11:45 |
gf712 | ah, it would be just run.publish() | 11:46 |
gf712 | it's almost there | 11:47 |
gf712 | I just need to clean up some stuff | 11:47 |
gf712 | HeikoS: i am guessing we don't publish the learnt parameters | 11:47 |
gf712 | i.e. bias and weights | 11:48 |
HeikoS | no worries | 11:48 |
HeikoS | just for the poster | 11:48 |
HeikoS | nope dont worry | 11:48 |
-shogun-buildbot:#shogun- Build FC23 - libshogun #617 is complete: Failure [failed compile (failure)] - http://buildbot.shogun-toolbox.org:8080/#builders/27/builds/617 | 12:02 | |
gf712 | HeikoS: I think the label conversion is working fine now | 12:04 |
gf712 | Any suggestions for parameter? :D | 12:04 |
gf712 | and kernel? | 12:04 |
HeikoS | gaussian kernel with median heuristic | 12:05 |
-!- sighingnow [~sighingno@2001:da8:203:81:61cb:e403:788a:f5c3] has joined #shogun | 12:05 | |
HeikoS | https://arxiv.org/pdf/1707.07269.pdf | 12:06 |
HeikoS | Sec 2.2 describes it | 12:06 |
gf712 | ah yes, I'll try that out | 12:06 |
HeikoS | note their kernel is parametrized differently | 12:07 |
HeikoS | so need to convert the median slightly differently | 12:07 |
HeikoS | gf712 actually no, it is the same | 12:07 |
HeikoS | (x-y)^2 / tau | 12:08 |
HeikoS | gf712 note they compute the median on the distances for i<j, that is only the lower (or upper) triangular values of the pairwise distance matrix without the diagonal | 12:09 |
gf712 | ah ok ok, I am starting to understand now | 12:10 |
HeikoS | pretty simple | 12:10 |
HeikoS | you can also do it on a subset (as the paper analyses) | 12:10 |
HeikoS | like 1000 points or so | 12:11 |
gf712 | yea, in this case it is fine because the dataset is pretty small | 12:11 |
gf712 | about 500 or so | 12:11 |
gf712 | I'll pick 400 and get the mean of that and see how it does | 12:11 |
gf712 | median even | 12:13 |
HeikoS | if it is < 1000 just use all | 12:14 |
gf712 | HeikoS: dumb question (my ml isn't as good as it once was..), but is it pretty much this np.median(spatial.distance.pdist(X)) ? | 12:15 |
gf712 | spatial.distance.pdist just returns values from the u triangle I think | 12:16 |
HeikoS | yeah almost | 12:16 |
HeikoS | ah really | 12:16 |
HeikoS | cool | 12:16 |
HeikoS | then that is it :) | 12:16 |
gf712 | yes, it is a condensed matrix | 12:16 |
HeikoS | and then you need to multiply it with some scaling factor | 12:16 |
gf712 | but I can convert to square form | 12:16 |
HeikoS | to match the gaussian | 12:16 |
HeikoS | no need | 12:16 |
gf712 | and check | 12:16 |
HeikoS | to convert to square form | 12:16 |
HeikoS | heck eq 2 | 12:17 |
HeikoS | so you so sqrt(median/2) as the bw | 12:17 |
HeikoS | this thing pretty much always works when the global scaling of the data is where the information is | 12:17 |
gf712 | you mean (4) ? | 12:17 |
HeikoS | and it doesnt work if some high frequency stuff distinguishes the data | 12:17 |
gf712 | ok, let's see what it gives here | 12:17 |
HeikoS | no equation (2) | 12:18 |
HeikoS | H_n = ... | 12:18 |
HeikoS | and then \nu = \sqrt(H_n / 2) | 12:18 |
gf712 | ah sorry | 12:18 |
gf712 | yes yes | 12:18 |
gf712 | 9.223096323000963 | 12:19 |
gf712 | 0.7924528301886793 | 12:24 |
gf712 | HeikoS: accuracy^ | 12:24 |
gf712 | pretty good | 12:25 |
HeikoS | yeah that is ok | 12:25 |
HeikoS | for illustration | 12:25 |
gf712 | default values just gave 0 label for everything | 12:25 |
HeikoS | default for the gaussian kernel should be the median | 12:25 |
HeikoS | so that is a nice auto parameter to add | 12:25 |
HeikoS | could write an entrance task issue for that | 12:25 |
gf712 | any tricks for C1 and C2 of SVM> :D | 12:25 |
gf712 | ?* | 12:25 |
HeikoS | 1.0 ? :D | 12:26 |
gf712 | haha ok | 12:26 |
HeikoS | it shouldnt matter too much | 12:26 |
HeikoS | since the dataset is low D | 12:26 |
HeikoS | this only becomes an issue in high D | 12:26 |
HeikoS | the choice of C | 12:26 |
HeikoS | actually | 12:26 |
HeikoS | set it lower | 12:26 |
HeikoS | 0.1 | 12:26 |
HeikoS | it is the penalty for margin violations | 12:26 |
HeikoS | ah sorry no | 12:26 |
HeikoS | higher | 12:26 |
HeikoS | well | 12:27 |
HeikoS | just keep 1.0 :D | 12:27 |
gf712 | haha ok! | 12:27 |
HeikoS | you can maybe try 0.1, 1.0, 10 | 12:27 |
HeikoS | and then take the best | 12:27 |
gf712 | sounds good | 12:27 |
HeikoS | interpretation of the C: | 12:27 |
gf712 | and then I'll try and publish this | 12:27 |
HeikoS | the higher it is, the more the SVM will try to avoid data lying on or on the wrong side of the margin of the hyperplane | 12:27 |
gf712 | so what is C1 v C2? | 12:28 |
HeikoS | in high D, one can often get a much better generalization ability by allowing a few margin errors | 12:28 |
HeikoS | itis for positive and negative examples | 12:28 |
HeikoS | just set them equal | 12:28 |
gf712 | ah ok! | 12:28 |
gf712 | cool thanks D: | 12:28 |
gf712 | :D | 12:28 |
gf712 | HeikoS btw are you going to the ATI on Wednesday? | 12:28 |
HeikoS | ah yes | 12:29 |
HeikoS | let me check | 12:29 |
gf712 | just need to know to get you a visitor pass | 12:29 |
HeikoS | yes | 12:29 |
HeikoS | ill be there | 12:29 |
HeikoS | all day was my plan | 12:29 |
HeikoS | so we can work/chat/lunch | 12:29 |
gf712 | ok, I'll get you a pass then | 12:29 |
HeikoS | pass would be good althoug I think there will be a proper pass for me ready to pick up | 12:30 |
gf712 | ah really? | 12:30 |
gf712 | ill get one just in case | 12:31 |
HeikoS | yeah maybe | 12:31 |
HeikoS | so avoid annoyance | 12:31 |
HeikoS | and then traveling to Cambrdige I need to decide when to go | 12:31 |
HeikoS | I think I will go in the evening | 12:31 |
HeikoS | staying with a friend that night | 12:31 |
gf712 | aight! | 12:31 |
gf712 | and then start at 9am on Thursday? | 12:32 |
HeikoS | yeah 930 I think it starts | 12:32 |
gf712 | so is it just poster? | 12:33 |
gf712 | or can we do a demo? | 12:33 |
HeikoS | I think let's prepare a demo notebook | 12:34 |
HeikoS | we will have to do those from the laptop | 12:34 |
HeikoS | but main presentation is poster | 12:35 |
HeikoS | I just sent you a link for the ready poster | 12:35 |
HeikoS | any comments on the snippets/bullet points? | 12:35 |
gf712 | HeikoS: having a look | 12:36 |
@wiking | gf712: ping | 12:36 |
@wiking | gf712: dangerzone: using namespace shogun; | 12:36 |
gf712 | shouldn't it be .train(X)? | 12:36 |
gf712 | wiking: where? | 12:36 |
@wiking | in SGObjectIterator.h | 12:36 |
@wiking | plz change | 12:36 |
@wiking | ah it wasnt u | 12:37 |
@wiking | :D | 12:37 |
@wiking | who merged this? | 12:37 |
@wiking | me? :D | 12:37 |
gf712 | is it me? | 12:37 |
gf712 | ah | 12:37 |
gf712 | haha | 12:37 |
@wiking | boom develop striaght | 12:40 |
@wiking | lets see if it breaks everything | 12:40 |
@wiking | :D | 12:40 |
gf712 | not sure why it would break stuff :D | 12:43 |
@wiking | who knows | 12:44 |
@wiking | just encountered some magical diff between gcc and clang | 12:44 |
@wiking | with namespace :) | 12:44 |
@wiking | so u never really know | 12:44 |
HeikoS | wiking you want this to be inside namespace shogun { ... } ? | 12:47 |
@wiking | which? | 12:47 |
@wiking | i mean this == ? | 12:47 |
HeikoS | the iterator | 12:47 |
@wiking | yes but its fixed already | 12:47 |
@wiking | i mean i dont care where it is | 12:47 |
HeikoS | ah ok | 12:47 |
@wiking | just dont use using namespace bla | 12:47 |
@wiking | in .h | 12:47 |
HeikoS | yep, sorry I simply missed it | 12:48 |
@wiking | lisitsyn: need u! AnyVisitor is getting craaaaazy.... | 12:50 |
@wiking | HeikoS: btw deadbeef pr has STL container clone support... as well as json serialization based on tags | 12:51 |
HeikoS | wiking yeah I saw it, pretty cool | 12:52 |
HeikoS | is this recursive issue still in there? | 12:52 |
@wiking | HeikoS: which? | 12:52 |
@wiking | vector<vector<vector>>> | 12:52 |
@wiking | ? | 12:52 |
HeikoS | like when an object had a subobject, loading it from file was tricky | 12:52 |
@wiking | HeikoS: nono it works | 12:53 |
HeikoS | ah that is ace! | 12:53 |
@wiking | jsonserialization unit test is there | 12:53 |
@wiking | with a guassiankernel | 12:53 |
HeikoS | how did you fix it? :) | 12:53 |
@wiking | that has a densefeature | 12:53 |
@wiking | but i mean the other unit test will show that its all good | 12:53 |
@wiking | but | 12:53 |
@wiking | anyvisitor is not limited | 12:53 |
@wiking | hence i dont see many types | 12:53 |
HeikoS | i see | 12:53 |
@wiking | but i mean iether i start making crazy interface in anyvusitor | 12:54 |
HeikoS | haha | 12:54 |
@wiking | like putting all sgvector<type> and sgmatrix... etc there as a virtual function | 12:54 |
@wiking | or else | 12:54 |
@wiking | :) | 12:54 |
@wiking | dont like this idea | 12:54 |
@wiking | as it'll look fucking crazy | 12:54 |
HeikoS | I guess | 12:55 |
@wiking | btw ascii, xml serializzation format can go right? | 12:55 |
HeikoS | on the other hand, we have only limited number of types | 12:55 |
HeikoS | yes I think so | 12:55 |
HeikoS | kill it | 12:55 |
@wiking | we'll have json and one binary | 12:55 |
HeikoS | yep ++ | 12:55 |
@wiking | HeikoS: https://pastebin.com/PqAvM8Ui | 12:55 |
@wiking | you mean this limited? | 12:55 |
@wiking | :) | 12:55 |
@wiking | and sparse and string is still missing | 12:55 |
@wiking | :P | 12:56 |
HeikoS | yeah it is nuts | 12:56 |
HeikoS | and std::vector also | 12:56 |
@wiking | and std::map | 12:56 |
@wiking | and std::list | 12:56 |
@wiking | etc | 12:56 |
HeikoS | map and list dont even work yet, but yeah | 12:56 |
HeikoS | mmmh | 12:56 |
@wiking | HeikoS: see my comment above | 12:56 |
@wiking | btw deadbeef pr has STL container clone support | 12:56 |
HeikoS | ah | 12:57 |
HeikoS | sorry missed | 12:57 |
@wiking | stl container = map, list, vector etc | 12:57 |
HeikoS | ah cool so you generalized sergeys thing | 12:57 |
@wiking | yep | 12:57 |
@wiking | there's a unit test that passes for make_any(std::map) | 12:57 |
@wiking | and equal works | 12:57 |
HeikoS | ah man | 12:58 |
HeikoS | really nice | 12:58 |
@wiking | so this should work nicely | 12:58 |
@wiking | but msvc dies | 12:58 |
@wiking | on the sfinae trait | 12:58 |
@wiking | :D | 12:58 |
@wiking | with an error: contact microsfot | 12:58 |
@wiking | :D | 12:58 |
@wiking | :>>> | 12:58 |
HeikoS | lol | 12:59 |
HeikoS | awesome | 12:59 |
@wiking | but yeha | 12:59 |
@wiking | need to see what to do with visitor | 12:59 |
@wiking | as it blows up | 12:59 |
-shogun-buildbot:#shogun- Build FC23 - libshogun #618 is complete: Success [build successful] - http://buildbot.shogun-toolbox.org:8080/#builders/27/builds/618 | 13:02 | |
HeikoS | wiking I mean this is the usual dispatching problem | 13:02 |
HeikoS | for templated code | 13:03 |
HeikoS | not sure there is a good solutionm | 13:03 |
@wiking | yeah there's no better way | 13:03 |
@wiking | just then if you dont implement certain stuff then blabla | 13:03 |
@wiking | or of course | 13:03 |
@wiking | we can do | 13:03 |
HeikoS | maybe generate the code somehow | 13:03 |
HeikoS | or just define the things that are needed onmly | 13:04 |
@wiking | container_starts() container_ends() | 13:04 |
@wiking | and then call base types | 13:04 |
@wiking | so visitor is a bit different | 13:04 |
@wiking | it's stateful | 13:04 |
HeikoS | mmmh | 13:04 |
HeikoS | sketchy as well ;) | 13:04 |
@wiking | yeah but that way you can enforce | 13:04 |
@wiking | the api | 13:04 |
@wiking | with virtual | 13:04 |
HeikoS | wiking this PR is the culmination of quite some time, I remember you showing the FS stuff at the WS in zurich 2 years ago | 13:05 |
@wiking | yeah | 13:05 |
@wiking | pulled all the shit together in the backlog | 13:05 |
@wiking | because in the meantime i wanna get rid of File.h | 13:06 |
@wiking | as that's shit as well | 13:06 |
HeikoS | yeah, a lot of code can go once this is merged | 13:06 |
@wiking | the reason i'm doing this actually | 13:06 |
@wiking | is because fucking windows build | 13:06 |
@wiking | with the SHOGUN_EXPORT | 13:06 |
@wiking | does not work | 13:06 |
@wiking | :D | 13:06 |
@wiking | for reading fucking files | 13:06 |
@wiking | :DDDD | 13:06 |
@wiking | in the integration test | 13:06 |
@wiking | so i was like fuck file fuck ascii serialization | 13:07 |
HeikoS | haha i see | 13:07 |
@wiking | without SHOGUN_EXPORT we dont have a proper windows build | 13:07 |
@wiking | and on the other | 13:07 |
@wiking | we should have a static class | 13:07 |
@wiking | Env | 13:07 |
@wiking | like ShogunEnv | 13:07 |
@wiking | that is wrapping every bullshit global stuff | 13:08 |
@wiking | and get rid of init_shogun() | 13:08 |
@wiking | and just have the env global var have static so if u load in the lib | 13:08 |
@wiking | that's initied | 13:08 |
@wiking | *inited | 13:08 |
HeikoS | yes Id prefer that as well tbh | 13:09 |
HeikoS | ok ill send the poster to amber now | 13:12 |
gf712 | HeikoS: sounds good | 13:14 |
@wiking | do we have type trait for SGVector||SGMatrix||SGString||SGStringList||SGSparseVector ? | 13:17 |
@wiking | or it's like SGReferencedData ? :) | 13:17 |
HeikoS | we dont | 13:18 |
HeikoS | but we should have one | 13:18 |
gf712 | wiking: you mean like this https://github.com/shogun-toolbox/shogun/blob/79fa98a85aed7eb88be30884349dd0666567ac5a/src/shogun/lib/type_case.h#L70 ? | 13:18 |
HeikoS | wiking btw I think we can pretty much drop some | 13:18 |
HeikoS | SGString -> SGVector is very easy | 13:18 |
HeikoS | and then | 13:18 |
HeikoS | SGStringList -> std::vector<SGVector<T>> should be better as well | 13:19 |
HeikoS | string list is a fuck | 13:19 |
HeikoS | Im off for lunch now | 13:19 |
HeikoS | see you later | 13:19 |
@wiking | is_base<SGReferenced | 13:19 |
@wiking | covers most of these | 13:19 |
gf712 | HeikoS: published the model but it isn't showing yet... seems like openml is down right now | 13:25 |
gf712 | but I checked the scores and it is pretty decent | 13:25 |
-!- theartful [c53556e9@gateway/web/freenode/ip.197.53.86.233] has joined #shogun | 13:44 | |
HeikoS | gf712 cool! | 13:44 |
HeikoS | that is a good demo to show | 13:44 |
theartful | hi, i have a question. why the MKLOneClass works only with SVMOneClass and not with SVMLightOneClass? | 13:49 |
HeikoS | theartful hi | 13:59 |
HeikoS | it has to do with the interleaving | 14:00 |
gf712 | HeikoS: I completely forgot an important thing for the poster | 14:00 |
gf712 | you can do ShogunConverter.from_flow(openml.flows.get_flow(9603)) | 14:00 |
gf712 | and that gives you the model instance of that flow | 14:00 |
HeikoS | ah | 14:00 |
HeikoS | so maybe we have to add a line that downloads the flow? | 14:00 |
gf712 | anyway, can have that in the NB | 14:00 |
HeikoS | yeah | 14:01 |
gf712 | yea, it's kinda the whole point right? | 14:01 |
HeikoS | I mean we can say that one can download flows from online | 14:01 |
HeikoS | yes | 14:01 |
theartful | I don't like the idea of adding these methods to the abstract class, since each one will only be used once. | 14:01 |
HeikoS | theartful I think it crashes otherwise, implementation details, badly designed | 14:01 |
HeikoS | theartful there is another way to do it in a more hacky fashion | 14:01 |
HeikoS | theartful you could add a member variable "bool supports_mkl" | 14:02 |
HeikoS | in the respective classes | 14:02 |
HeikoS | and then you can do | 14:02 |
HeikoS | svm.get<bool>("supports_mkl") | 14:02 |
HeikoS | you surround it with try catch | 14:02 |
theartful | MKLRegression requires SVRLight. Interleaving requires SVMLight. and MKLOneClass requires SVMOneCLass | 14:02 |
theartful | there are 3 different cases, 3 different methods, used only once | 14:03 |
HeikoS | sure | 14:03 |
HeikoS | in a good world, everything would work with everything, and error messages and code design would be clear | 14:03 |
HeikoS | but in this world, that isnt the case | 14:03 |
theartful | but isn't adding these the abstract class bad? I think if they tightly coupled, then it's their problem not the interface | 14:04 |
HeikoS | yes agreed | 14:04 |
HeikoS | but the way I see this is more in the sense of "does the solver work on a certain type of optimization problem" | 14:05 |
HeikoS | so the method is more of a decorator of what is going on inside | 14:05 |
HeikoS | and that is valid for a base class | 14:05 |
HeikoS | however | 14:05 |
HeikoS | you can also just do the "get" approach I wrote above | 14:05 |
HeikoS | or, if you also dont like that | 14:06 |
HeikoS | we can also use the name, and try to dive into the problem a bit in a second PR and refactor things | 14:06 |
theartful | i think that's better, since the only think they want is a specific class. for example MKLOneClass works with SVMOneClass and not with SVMLightOneClass, so property of "one-classness" is not the issue | 14:07 |
HeikoS | that is not really true, but only because the code is a bit shitty ;) | 14:08 |
theartful | aha :"D | 14:09 |
HeikoS | it actually HAS to do with the fact that a svm is oneclass | 14:09 |
HeikoS | and that it supports interleaving optimization | 14:09 |
HeikoS | that is the real reason | 14:09 |
HeikoS | but the code just asserts the specific class since somebody was lazy | 14:09 |
theartful | ok, then this sounds good get<bool>("supports_interleaving") and get<bool>("one_class") | 14:10 |
HeikoS | The real issue is that there is no base class for oneclass-svms | 14:10 |
theartful | aha | 14:11 |
HeikoS | mmh | 14:11 |
HeikoS | the more I think of it the less I like the "get" version either | 14:11 |
HeikoS | I think we either leave it as it is "use name", or we add a virtual method to CSVM, or we refactor | 14:12 |
HeikoS | what about this: | 14:12 |
HeikoS | you keep using the name for now, but you add a // TODO. FIXME replace this with an API call | 14:12 |
HeikoS | since it is not your fault that the design is this way | 14:12 |
HeikoS | and then we could look into re-structuring things a bit nicer in a second PR? | 14:13 |
theartful | ok, great | 14:13 |
HeikoS | theartful thanks for your efforts! | 14:14 |
-!- zhuq [~z@30.123.127.176.dynamic.wline.res.cust.swisscom.ch] has joined #shogun | 14:18 | |
theartful | no problem, thanks for your patience. I really learned a lot about c++ and other things in limited time :"D | 14:20 |
-!- zhuq [~z@30.123.127.176.dynamic.wline.res.cust.swisscom.ch] has quit [Ping timeout: 272 seconds] | 14:51 | |
-!- zhuq [~z@30.123.127.176.dynamic.wline.res.cust.swisscom.ch] has joined #shogun | 15:36 | |
gf712 | HeikoS: is the new repo to push all ati stuff? i.e. notebook with OpenML stuff? | 15:51 |
HeikoS | gf712 indeed | 15:51 |
HeikoS | feel free to create a folder for the demo | 15:51 |
gf712 | OK cool! | 15:52 |
-!- zhuq [~z@30.123.127.176.dynamic.wline.res.cust.swisscom.ch] has quit [Ping timeout: 272 seconds] | 15:57 | |
-!- gf712 [905208fd@gateway/web/freenode/ip.144.82.8.253] has quit [Ping timeout: 256 seconds] | 16:06 | |
-!- gf712 [905208fd@gateway/web/freenode/ip.144.82.8.253] has joined #shogun | 16:19 | |
-!- HeikoS [b924003b@gateway/web/cgi-irc/kiwiirc.com/ip.185.36.0.59] has quit [Ping timeout: 272 seconds] | 16:24 | |
-!- theartful [c53556e9@gateway/web/freenode/ip.197.53.86.233] has quit [Quit: Page closed] | 16:42 | |
-!- abhishekgoyal1 [67763204@gateway/web/freenode/ip.103.118.50.4] has joined #shogun | 16:53 | |
-!- HeikoS [b924003b@gateway/web/cgi-irc/kiwiirc.com/ip.185.36.0.59] has joined #shogun | 17:13 | |
HeikoS | lisitsyn wiking I have a q | 17:13 |
HeikoS | will features be plugins? | 17:14 |
HeikoS | or shall we keep their types | 17:14 |
HeikoS | i.e. shall everything in SWIG by CFeatures*, or do we keep RealFeatures etc | 17:14 |
HeikoS | I realised it is quite different to say CMachine | 17:14 |
HeikoS | we dont add new CFeatures spezializations all the time .... | 17:15 |
-!- zhuq [~z@30.123.127.176.dynamic.wline.res.cust.swisscom.ch] has joined #shogun | 17:16 | |
@wiking | HeikoS: #4571: these is_ methods is gonna be the same mess | 17:16 |
@wiking | see my comments | 17:16 |
HeikoS | yes | 17:16 |
HeikoS | we have machine type anyways | 17:17 |
@wiking | we anyways wanna have a way to see what are the supported input | 17:17 |
@wiking | etc | 17:17 |
HeikoS | we might need it for this interleaved stuff | 17:17 |
@wiking | so just use a bitmask | 17:17 |
@wiking | and have support() | 17:17 |
HeikoS | that hack to ensure something doesnt crash | 17:17 |
HeikoS | yes agree | 17:17 |
HeikoS | wiking what are your thoughts on labels/features being plugins or not | 17:17 |
HeikoS | and about base interface vs spezialized interface | 17:17 |
@wiking | mmm | 17:18 |
@wiking | features will be plugins | 17:18 |
@wiking | i would do them like that | 17:18 |
HeikoS | tend to agree | 17:18 |
HeikoS | but just was touching all this extra stuff we have for swig features | 17:18 |
HeikoS | and thought maybe it is good to think twice | 17:18 |
HeikoS | certainly makes the wrapper much smaller | 17:19 |
-!- gf712 [905208fd@gateway/web/freenode/ip.144.82.8.253] has quit [Ping timeout: 256 seconds] | 17:25 | |
-!- zhuq [~z@30.123.127.176.dynamic.wline.res.cust.swisscom.ch] has quit [Ping timeout: 245 seconds] | 17:31 | |
-!- zhuq [~z@30.123.127.176.dynamic.wline.res.cust.swisscom.ch] has joined #shogun | 17:43 | |
-!- abhishekgoyal1 [67763204@gateway/web/freenode/ip.103.118.50.4] has quit [Ping timeout: 256 seconds] | 17:48 | |
-!- HeikoS [b924003b@gateway/web/cgi-irc/kiwiirc.com/ip.185.36.0.59] has quit [Ping timeout: 246 seconds] | 18:01 | |
-!- theartful [c53556e9@gateway/web/freenode/ip.197.53.86.233] has joined #shogun | 18:15 | |
-!- theartful [c53556e9@gateway/web/freenode/ip.197.53.86.233] has quit [Quit: Page closed] | 18:21 | |
-!- theartful [c53556e9@gateway/web/freenode/ip.197.53.86.233] has joined #shogun | 18:23 | |
theartful | about the supports function. I think we can add a bitset into machine, and leave the enums as they are. the change would be that if enum A ends with number n for example, enum B starts with n+1 | 18:27 |
theartful | then create a variadic macro to put the enums, and it sets the bits with the indices of the enum values | 18:27 |
theartful | and maybe make the indices from 0 to N (for some N) general purpose properties, and each machine can add its own specific properties (as long as they have values greater than N) | 18:29 |
-!- zhuq [~z@30.123.127.176.dynamic.wline.res.cust.swisscom.ch] has quit [Ping timeout: 246 seconds] | 18:31 | |
theartful | now, supports would be implemented in CMachine and would be something like (bool supports(uint index) const) | 18:31 |
theartful | @wiking how about that? | 18:32 |
@wiking | no | 18:33 |
@wiking | return an uint65_t | 18:33 |
@wiking | uint64_t | 18:33 |
@wiking | and we'll deal later with syntactic sugar | 18:33 |
@wiking | just want to have a function that returns everything about the machine | 18:34 |
@wiking | in your case as well | 18:35 |
@wiking | the index should not be an index for a bit | 18:35 |
@wiking | but then rather the whole OR-ed bitmask | 18:35 |
@wiking | note you need to implement the enum in a way that each one is setting a bit in the variable | 18:36 |
@wiking | so not 0... N | 18:36 |
@wiking | but rather 1, 2, 4, 8 etc | 18:36 |
theartful | yes i get that, the macro would do the shifting | 18:36 |
@wiking | no need for macro shifting | 18:36 |
theartful | or maybe just uses a bitset | 18:36 |
@wiking | just set the enum values right | 18:36 |
@wiking | and then use bit operation to set the uint64_t | 18:37 |
theartful | okay, if I want to query some property, I would have to do the bit oring myself in each class | 18:39 |
theartful | or will this be just used to show the whole list of properties? | 18:40 |
theartful | actually it's not a problem, nvm | 18:40 |
@wiking | yeah you can then have a macro or a constexpr method | 18:41 |
@wiking | that does the checking for a certain set of bits | 18:41 |
theartful | sounds good | 18:41 |
theartful | one more thing. I have a bad feeling about putting 'interleaving' in CMachine. why not let have a CMachine properties that occupy a certain number of the 64 bits, and let each family of classes define their own properties (in a common header file for example)? | 18:44 |
theartful | why not let CMachine properties occupy** :"D | 18:44 |
-!- zhuq [~z@30.123.127.176.dynamic.wline.res.cust.swisscom.ch] has joined #shogun | 19:06 | |
-!- theartful [c53556e9@gateway/web/freenode/ip.197.53.86.233] has quit [Quit: Page closed] | 19:18 | |
-!- zhuq [~z@30.123.127.176.dynamic.wline.res.cust.swisscom.ch] has quit [Ping timeout: 245 seconds] | 19:39 | |
-!- zhuq [~z@30.123.127.176.dynamic.wline.res.cust.swisscom.ch] has joined #shogun | 19:58 | |
-!- zhuq [~z@30.123.127.176.dynamic.wline.res.cust.swisscom.ch] has quit [Remote host closed the connection] | 22:09 | |
-!- zhuq [~z@30.123.127.176.dynamic.wline.res.cust.swisscom.ch] has joined #shogun | 22:09 | |
-!- zhuq [~z@30.123.127.176.dynamic.wline.res.cust.swisscom.ch] has quit [Ping timeout: 272 seconds] | 22:46 | |
-!- zhuq [~z@30.123.127.176.dynamic.wline.res.cust.swisscom.ch] has joined #shogun | 22:46 | |
-!- zhuq [~z@30.123.127.176.dynamic.wline.res.cust.swisscom.ch] has quit [Ping timeout: 268 seconds] | 23:51 | |
--- Log closed Sat Mar 16 00:00:53 2019 |
Generated by irclog2html.py 2.10.0 by Marius Gedminas - find it at mg.pov.lt!