Hi, My guess is that the current Shogun PCA relies on a method that needs #vector < #features. The why and the how to handle that in LMNN is what I want to check further.
In any case, for your use case the situation is the following. LMNN starts with an initial transformation matrix. In Shogun, this transformation may be user given or automatically initialized making use of PCA. You pointed out that for the case use_pca=Flase it works, this is because metric_learn's code is giving an initial matrix transformation. You may have a look whether metric_learn allows you to specify the initial transformation as well. In that case, you could manually obtain the PCA matrix transformation of your data and input it. Good luck! Get back to us for anything else. Cheers, Fernando. On 15 April 2016 at 00:21, Deepak Rishi <[email protected]> wrote: > Hey Fernando, > > For my dataset #vectors < #features . It's weird why PCA would do that. > Anyways, thanks for your help. I'll try working around something. > > Regards, > Deepak > > On Thu, Apr 14, 2016 at 5:57 AM, Fernando J. Iglesias García < > [email protected]> wrote: > >> Hi Deepak, >> >> It seems what happens is that Shogun LMNN is asking Shogun PCA to compute >> a transformation of dimension equal to #features ( >> https://github.com/shogun-toolbox/shogun/blob/develop/src/shogun/metric/LMNNImpl.cpp#L327) >> while the current Shogun PCA makes a transformation of at most >> min(#features, #vectors) ( >> https://github.com/shogun-toolbox/shogun/blob/develop/src/shogun/preprocessor/PCA.cpp#L100). >> So I am concluding that your data is probably #vectors < #features (let me >> know otherwise). >> >> I must dig more in why current Shogun PCA is doing that. Perhaps for the >> moment this can help you to get going further. >> >> Cheers, >> Fernando. >> >> On 13 April 2016 at 15:10, Heiko Strathmann <[email protected]> >> wrote: >> >>> Just wanted to make sure ;) >>> I guess Fernando can help better then >>> >>> 2016-04-12 22:03 GMT+01:00 Deepak Rishi <[email protected]>: >>> >>>> Fernando, >>>> >>>> This particular error only comes when the feature vector dimension size >>>> is more than the number of examples. >>>> >>>> >>>> Regards, >>>> Deepak >>>> >>>> On Tue, Apr 12, 2016 at 5:00 PM, Deepak Rishi <[email protected]> >>>> wrote: >>>> >>>>> Hello Heiko, >>>>> >>>>> Yes, that is taken into account by the metric learn package. >>>>> >>>>> >>>>> Regards, >>>>> Deepak >>>>> >>>>> On Tue, Apr 12, 2016 at 4:48 PM, Heiko Strathmann < >>>>> [email protected]> wrote: >>>>> >>>>>> Reminder: shogun interprets data as column vectors. >>>>>> >>>>>> >>>>>> On Tuesday, 12 April 2016, Deepak Rishi <[email protected]> wrote: >>>>>> >>>>>>> Hey Fernando, >>>>>>> >>>>>>> By setting use_pca=True, I still get the same error. However, >>>>>>> setting it to False , the program runs. (though very slowly) >>>>>>> If i run the LMNN example from >>>>>>> http://all-umass.github.io/metric-learn/metric_learn.lmnn.html , it >>>>>>> runs fine without even setting the use_pca parameter. >>>>>>> >>>>>>> Would you have any advice on how to circumvent this problem? >>>>>>> >>>>>>> PS: my dataset shape is 500 x 6000. >>>>>>> >>>>>>> Regards, >>>>>>> Deepak >>>>>>> >>>>>>> On Tue, Apr 12, 2016 at 2:38 PM, Fernando J. Iglesias García < >>>>>>> [email protected]> wrote: >>>>>>> >>>>>>>> Hi Deepak, >>>>>>>> >>>>>>>> Then, there might be a problem (i.e. wrong dimension) with the >>>>>>>> matrix passed to initalise LMNN. I suggest you to try setting use_pca >>>>>>>> to >>>>>>>> True. That will make Shogun's LMNN to start using a matrix obtained by >>>>>>>> applying PCA. >>>>>>>> >>>>>>>> Modifying line 55 in your gist to >>>>>>>> >>>>>>>> lmnn = LMNN(k=3, learn_rate=1e-3, use_pca=True) >>>>>>>> >>>>>>>> should do it. >>>>>>>> >>>>>>>> Let me know how it goes. >>>>>>>> >>>>>>>> Cheers, >>>>>>>> Fernando. >>>>>>>> >>>>>>>> On 12 April 2016 at 18:52, Deepak Rishi <[email protected]> wrote: >>>>>>>> >>>>>>>>> Hi Fernando, >>>>>>>>> >>>>>>>>> The gist is at >>>>>>>>> https://gist.github.com/deerishi/e4ea6257e88ea924cc0fb091a5af1670 >>>>>>>>> . >>>>>>>>> >>>>>>>>> I did not use the parameter use_pca. Nor did I call the PCA >>>>>>>>> function. >>>>>>>>> >>>>>>>>> @Chintak , have you used LMNN before? >>>>>>>>> >>>>>>>>> >>>>>>>>> Regards, >>>>>>>>> Deepak >>>>>>>>> >>>>>>>>> On Tue, Apr 12, 2016 at 4:33 AM, Fernando J. Iglesias García < >>>>>>>>> [email protected]> wrote: >>>>>>>>> >>>>>>>>>> Dear Deepak, >>>>>>>>>> >>>>>>>>>> Can you share in a gist, pastebin, or the like, a snippet with >>>>>>>>>> your relevant code? Particularly at this moment I am interested to >>>>>>>>>> know >>>>>>>>>> whether you are using the parameter use_pca. >>>>>>>>>> >>>>>>>>>> Cheers, >>>>>>>>>> Fernando. >>>>>>>>>> >>>>>>>>>> On 12 April 2016 at 08:39, Deepak Rishi <[email protected]> >>>>>>>>>> wrote: >>>>>>>>>> >>>>>>>>>>> Hi everyone, >>>>>>>>>>> >>>>>>>>>>> I am using the python package metric_learn >>>>>>>>>>> http://all-umass.github.io/metric-learn/metric_learn.lmnn.html >>>>>>>>>>> for Large Margin Nearest Neighbour. It uses LMNN from Shogun if it >>>>>>>>>>> is >>>>>>>>>>> installed. Since Shogun has a faster implementation for LMNN I >>>>>>>>>>> decied to >>>>>>>>>>> use it. >>>>>>>>>>> >>>>>>>>>>> When I run my code for LMNN in python I get the error >>>>>>>>>>> "SystemError: [ERROR] In file >>>>>>>>>>> /home/drishi/shogun-4.1.0/src/shogun/preprocessor/PCA.cpp line 102: >>>>>>>>>>> target >>>>>>>>>>> dimension should be less or equal to than minimum of N and D >>>>>>>>>>> " >>>>>>>>>>> >>>>>>>>>>> Any advice on why is this error occurring ? >>>>>>>>>>> >>>>>>>>>>> >>>>>>>>>>> Regards, >>>>>>>>>>> Deepak >>>>>>>>>>> >>>>>>>>>> >>>>>>>>>> >>>>>>>>> >>>>>>>> >>>>>>> >>>>> >>>> >>> >> >
