I don't quite understand why putting linear constraints can promote orthogonality. For the interfaces, if the subproblem is determined by Y^T Y and Y^T b for each iteration, then the least squares solver, the non-negative least squares solver, or your convex solver is simply a function
(A, b) -> x. You can define it as an interface, and make the solver pluggable by adding a setter to ALS. If you want to use your lgpl solver, just include it in the classpath. Creating two separate files still seems unnecessary to me. Could you create a JIRA and we can move our discussion there? Thanks! Best, Xiangrui On Thu, Jun 5, 2014 at 7:20 PM, Debasish Das <debasish.da...@gmail.com> wrote: > Hi Xiangrui, > > For orthogonality properties in the factors we need a constraint solver > other than the usuals (l1, upper and lower bounds, l2 etc) > > The interface of constraint solver is standard and I can add it in mllib > optimization.... > > But I am not sure how will I call the gpl licensed ipm solver from > mllib....assume the solver interface is as follows: > > Qpsolver (densematrix h, array [double] f, int linearEquality, int > linearInequality, bool lb, bool ub) > > And then I have functions to update equalities, inequalities, bounds etc > followed by the run which generates the solution.... > > For l1 constraints I have to use epigraph formulation which needs a > variable transformation before the solve.... > > I was thinking that for the problems that does not need constraints people > will use ALS.scala and ConstrainedALS.scala will have the constrained > formulations.... > > I can point you to the code once it is ready and then you can guide me how > to refactor it to mllib als ? > > Thanks. > Deb > Hi Deb, > > Why do you want to make those methods public? If you only need to > replace the solver for subproblems. You can try to make the solver > pluggable. Now it supports least squares and non-negative least > squares. You can define an interface for the subproblem solvers and > maintain the IPM solver at your own code base, if the only information > you need is Y^T Y and Y^T b. > > Btw, just curious, what is the use case for quadratic constraints? > > Best, > Xiangrui > > On Thu, Jun 5, 2014 at 3:38 PM, Debasish Das <debasish.da...@gmail.com> > wrote: >> Hi, >> >> We are adding a constrained ALS solver in Spark to solve matrix >> factorization use-cases which needs additional constraints (bounds, >> equality, inequality, quadratic constraints) >> >> We are using a native version of a primal dual SOCP solver due to its > small >> memory footprint and sparse ccs matrix computation it uses...The solver >> depends on AMD and LDL packages from Timothy Davis for sparse ccs matrix >> algebra (released under lgpl)... >> >> Due to GPL dependencies, it won't be possible to release the code as > Apache >> license for now...If we get good results on our use-cases, we will plan to >> write a version in breeze/modify joptimizer for sparse ccs operations... >> >> I derived ConstrainedALS from Spark mllib ALS and I am comparing the >> performance with default ALS and non-negative ALS as baseline. Plan is to >> release the code as GPL license for community review...I have kept the >> package structure as org.apache.spark.mllib.recommendation >> >> There are some private functions defined in ALS, which I would like to >> reuse....Is it possible to take the private out from the following >> functions: >> >> 1. makeLinkRDDs >> 2. makeInLinkBlock >> 3. makeOutLinkBlock >> 4. randomFactor >> 5. unblockFactors >> >> I don't want to copy any code.... I can ask for a PR to make these >> changes... >> >> Thanks. >> Deb