Comments (10)
Thank you so much for the resources! I really appreciate it.
I guess that second paper is the most general, but doesn't guarantee optimality.
I am happy to make a pull request some time if you think this would be relevant to your project.
Main pieces for projected gradient are in section 3.3 & Eq. 14 of this paper (same author as your #2.)
from procrustes.
Hi yes - sorry for the delayed response. Still potentially interested. I ended up doing iteratively reweighted least squares to solve the l1 problem for my application since I did not really need a high quality solution.
Let me take another look at the papers originally posted in this thread and get back to you.
from procrustes.
Sounds good. Yeah- those plots don't look right to me. Here is the result from my run:
Likely there is some issue with the implementation of the descent direction since the foc (eq 15, left plot) should ideally go to zero monotonically. I'll get back to you when I have some time to debug. I agree next step should be reproduce their result.
from procrustes.
Thanks for the nice words!
We don't have any implementation to support l1 norm-based Procrustes
(I am not familiar with that either). But we may add this as a feature in the future depending on other project progress and time avaliability. I found some interesting papers,
- https://link.springer.com/article/10.1007%2Fs10851-008-0077-2
- https://www.sciencedirect.com/science/article/pii/S0167739X03000438
- https://ieeexplore.ieee.org/stamp/stamp.jsp?arnumber=8378175
Are you looking for the implementation of l1 norm-based Procrustes
?
@choltz95
from procrustes.
Wow! This is going to be a nice improvement!! Thanks.
Please let me know when you need a code review or any other problems. I will tag this issue as an enhancement.
from procrustes.
@choltz95 were you going to tackle this issue?
from procrustes.
Hey - just started working on a prototype. I implemented a preliminary version of PGD for the smoothened l1 problem (huber) from the Trendafilov & Watson paper in Jax here.
I saw that the convergence is mediocre and needs many iterations on even some very simple testcases. I tried some simple things like gridding over geometric step lengths and early stopping. Did you find any other papers that discuss nicer solutions to this problem? There could also be some bugs.
When I initialize using solution to l-2 procrustes, result looks a little more reasonable.
I am thinking of trying a projected admm-type algorithm to solve the problem directly very quickly. I had some success on a similar problem. I feel that neither is ideal since the other methods in your library all have nice solutions, but it seems there is no way to get around iterating or potentially bad solutions for this one.
from procrustes.
Thank you for your efforts!
I have tried your Colab codes, but it seems that the implementation is giving the strange behavior with missing value in foc and all the error values are nan
. Can you check why is that?
I think for the implementation, maybe a good check is to reproduce the results listed in the paper you mentioned. I will also do more literature reading to find if we can get better algorithms on this problem.
from procrustes.
Hi, sorry for the late response. Quick follow-up. Took another look at my implementation. I think it may be possible that the implementation is okay - I reproduced the concrete numerical experiments in Example 2 of the paper to get similar error, even though the foc is nonzero. I think the issue may simply be that projected gradient method may not be ideal for this kind of problem with orthogonality constraint.
I am thinking this: since there is already some api support for weighted least squares procrustes (with weights on the rows of A / the "samples"), it is probably easier to do something naive like iterative reweighting: https://en.wikipedia.org/wiki/Iteratively_reweighted_least_squares. This way we remain within the procrustes api and require minimal effort while supporting some notion of robust / l1-procrustes. I think there could be some problems like convergence is usually pretty slow, solution won't change much from least squares, but maybe it's better then projected gradient.
Let me know if you would like me to proceed!
from procrustes.
Looks like a good feature to have. Please go ahead and make a pull request. Can you tag me when you are done? Thank you for making our package grow! @choltz95
from procrustes.
Related Issues (20)
- Can't install from pip HOT 3
- Support of missing values for generalized Procrustes analysis
- Installing with pip according to instructions does not work HOT 5
- Molecular Structure Distance HOT 1
- Non square data in softassign function - cannot reshape array HOT 4
- An alternative way of solving rotational Procrutes problem HOT 4
- Web Site HOT 2
- Would be nice to have the used scaling and translation returned in the answer HOT 9
- Add support of 1D, 2D and 3D molecular structures HOT 3
- translation, scling, weighting for positive semi-definite Procrustes problem HOT 2
- Deprecated `pinv2` function in `scipy.linalg` HOT 2
- Update the summary table when #98 is done
- Failing testing, `test_psdp_woodgate_non_full_rank` HOT 11
- More algorithms on `PSDP` HOT 18
- Another round of code review for GSoC HOT 1
- pinv2 deprecated HOT 12
- Support Weight Matrices
- One-Sided Procrustes for Toeplitz matrices HOT 5
- positive semi-definite Procrustes problem HOT 6
Recommend Projects
-
React
A declarative, efficient, and flexible JavaScript library for building user interfaces.
-
Vue.js
🖖 Vue.js is a progressive, incrementally-adoptable JavaScript framework for building UI on the web.
-
Typescript
TypeScript is a superset of JavaScript that compiles to clean JavaScript output.
-
TensorFlow
An Open Source Machine Learning Framework for Everyone
-
Django
The Web framework for perfectionists with deadlines.
-
Laravel
A PHP framework for web artisans
-
D3
Bring data to life with SVG, Canvas and HTML. 📊📈🎉
-
Recommend Topics
-
javascript
JavaScript (JS) is a lightweight interpreted programming language with first-class functions.
-
web
Some thing interesting about web. New door for the world.
-
server
A server is a program made to process requests and deliver data to clients.
-
Machine learning
Machine learning is a way of modeling and interpreting data that allows a piece of software to respond intelligently.
-
Visualization
Some thing interesting about visualization, use data art
-
Game
Some thing interesting about game, make everyone happy.
Recommend Org
-
Facebook
We are working to build community through open source technology. NB: members must have two-factor auth.
-
Microsoft
Open source projects and samples from Microsoft.
-
Google
Google ❤️ Open Source for everyone.
-
Alibaba
Alibaba Open Source for everyone
-
D3
Data-Driven Documents codes.
-
Tencent
China tencent open source team.
from procrustes.