Repository navigation
DiffPrecTest on ProximalSolvers' coordinate descent and ProximalBase 0.5, version 0.3.0 - #7
Merged
Merged
Conversation
… 0.3.0 - The two inverse Hessian losses are ProximalBase's KronQuadratic: on vec(Θ) for invAsymHessianEstimation, and on a symmetric Θ for invQSymHessian, whose svec coordinates scale the off-diagonal entries by √2. CDInverseKroneckerLoss and CDInverseReducedSymKroneckerLoss are removed. - diffEstimation uses CovSel's directDifferenceLoss, and the reduced estimators a QuadraticFunction of H. - The five two-stage estimators share one driver that builds the model once and solves with ProximalOPT's CDSolver, before and after recomputing the weights. They take a CDSolver in place of CDOptions; _warmStart is removed. - DTraceValidationSupport runs ProximalOPT's solve_path with a callback for the validation losses. - ProximalBase's tril_index and tril_cartesian replace sub2indLowerTriangular and ind2subLowerTriangular, also in exper/. - ProximalBase 0.5, ProximalOPT 0.2, CoordinateDescent 0.7 (for lasso) and CovSel come from their pull request branches through [sources], and on Julia 1.10 from the CI step, until they are registered. Co-Authored-By: Claude Opus 5.5 <[email protected]>
…master - SeparateNormal fits its node-wise lasso regressions with ProximalOPT's coordinate descent on (1/n) LeastSquaresLoss, with the residuals and their standard deviation, which is all it used of CoordinateDescent's lasso. So DiffPrecTest no longer depends on CoordinateDescent, nor on its unreleased 0.7. - benchmark/compare/: the estimators of DiffPrecTest master (with CovSel master, CoordinateDescent 0.6.0 and ProximalBase 0.4.1) against this branch, in interleaved rounds (ab.sh); newfix/ adds ProximalBase PR #24. Co-Authored-By: Claude Opus 5.5 <[email protected]>
ProximalBase at the merge of its PR #23 into master (0.5.0, being registered) and ProximalOPT at its PR #11 (1f82ae5): their branches go away when merged, and a branch name would then stop resolving. Co-Authored-By: Claude Opus 5.5 <[email protected]>
Codecov Report❌ Patch coverage is
Additional details and impacted files@@ Coverage Diff @@
## master #7 +/- ##
==========================================
- Coverage 98.65% 98.45% -0.20%
==========================================
Files 12 12
Lines 1409 1294 -115
==========================================
- Hits 1390 1274 -116
- Misses 19 20 +1 ☔ View full report in Codecov by Harness. 🚀 New features to boost your workflow:
|
…e loops The weights of the reduced estimators and the variance of ReducedOracleNormal called skron and svec with coordinate indices, so tril_cartesian ran twice in every term of their innermost loops. ProximalBase 0.5's tril_cartesian is three times slower than 0.4's ind2subLowerTriangular, which made these estimators 1.33 to 1.39 times slower than on master. skron and svec now also take the entries (row, col), computed once per call; the results are bitwise identical, and reducedDiffEstimation takes 41 instead of 79 ms at p = 20 (M3 Pro). Co-Authored-By: Claude Opus 5.5 <[email protected]>
This was referenced Oct 23, 2026
tril_cartesian: keep the isqrt path out of line, so the function inlines
mlakolar/ProximalBase.jl#26
Merged
- ProximalBase 0.5.0 and 0.5.1 are registered, so its [sources] entries and its URL in the Julia 1.10 CI step go; ProximalOPT moves to the current head of its PR #11 (aeed600). - benchmark/compare: results of four rounds on Discovery (README.md); the newfix side, for ProximalBase PR #24, goes, since 0.5.1 has it. Co-Authored-By: Claude Opus 5.5 <[email protected]>
This was referenced Oct 23, 2026
ProximalOPT's #11 was merged and the package renamed ProximalSolvers (new UUID), whose 0.1.0 is being registered (JuliaRegistries/General#173068) from 9cdd33c, which [sources], exper/, benchmark/compare/new and the Julia 1.10 CI step now take. Co-Authored-By: Claude Opus 5.5 <[email protected]>
Co-Authored-By: Claude Opus 5.5 <[email protected]>
Co-Authored-By: Claude Opus 5.5 <[email protected]>
CovSel #17 (DiffPrecTest's dependency on ProximalSolvers' CovSel) merged as 427a2b2, so [sources] and the Julia 1.10 CI step move from its proximalopt-0.2 branch to master. Co-Authored-By: Claude Opus 5.5 <[email protected]>
This file contains hidden or bidirectional Unicode text that may be interpreted or compiled differently than what appears below. To review, open the file in an editor that reveals hidden Unicode characters.
Learn more about bidirectional Unicode characters
Sign up for free
to join this conversation on GitHub.
Already have an account?
Sign in to comment
Add this suggestion to a batch that can be applied as a single commit.This suggestion is invalid because no changes were made to the code.Suggestions cannot be applied while the pull request is closed.Suggestions cannot be applied while viewing a subset of changes.Only one suggestion per line can be applied in a batch.Add this suggestion to a batch that can be applied as a single commit.Applying suggestions on deleted lines is not supported.You must change the existing code in this line in order to create a valid suggestion.Outdated suggestions cannot be applied.This suggestion has been applied or marked resolved.Suggestions cannot be applied from pending reviews.Suggestions cannot be applied on multi-line comments.Suggestions cannot be applied while the pull request is queued to merge.Suggestion cannot be applied right now. Please check back later.
Depends on CovSel's master, where mlakolar/CovarianceSelection.jl#17 (CovSel on ProximalSolvers) is merged, and on ProximalSolvers 0.1.0, formerly ProximalOPT, now mlakolar/ProximalSolvers.jl, with a new UUID. Its registration (JuliaRegistries/General#173068) merges around Oct 26. ProximalBase 0.5 is registered (0.5.0 and 0.5.1) and comes from the registry.
[sources]takes CovSel from its master, and ProximalSolvers at 9cdd33c, the commit of its registration. That is the same inexper/andbenchmark/compare/.[sources], CI adds both by URL in onePkg.addcall.DiffPrecTest's two coordinate descent losses and its five copies of the two-stage solve are replaced by ProximalBase losses and ProximalSolvers' solver. CoordinateDescent is no longer a dependency. Version 0.3.0, since exported names are removed.
What changes
KronQuadratic.invAsymHessianEstimation:⟨Θ, ΣxΘΣy⟩/2 - Θ[a, b]onvec(Θ).invQSymHessian: the reduced lossθ'Hθ/2 - θ[ind]inθ = svec(Θ), which is⟨Θ, ΣxΘΣy⟩/2 + ⟨C, Θ⟩of the symmetricΘ. A coordinate step onΘ[r, c]is the step onθ[k], since the off-diagonal entries ofsvecare only scaled by√2. The weights move with that scaling, and the result is returned insveccoordinates as before.CDInverseKroneckerLossandCDInverseReducedSymKroneckerLoss, with theirinitialize!,gradient,descendCoordinate!and stopping scales, are deleted (about 200 lines).diffEstimationuses CovSel'sdirectDifferenceLoss, and the reduced estimatorsreducedDiffEstimationandinvHessianReduceduse aQuadraticFunction(H, b)._twoStage!builds the ProximalSolvers model once and callssolve!twice. It does not usereweight!, which would recompute the weights a third time after the last solve. ForinvAsymHessianEstimationthe weights cost O(n p³) and take most of its time.supportEstimate(DTraceValidationSupport(), ...), take a ProximalSolversCDSolverin place ofCDOptions;_warmStartis removed. The defaults are the same: random order, tolerance 1e-7, scale-free stopping rule, and momentum for the quadratics as in CoordinateDescent 0.6.DTraceValidationSupportruns ProximalSolvers'solve_pathwithout screening, and computes the validation losses in its callback.SeparateNormalfits its four node-wise lasso regressions bysolve!((1/n) * LeastSquaresLoss(y, X), NormL1(λ), CDSolver()), with the residuals and their standard deviation. That is all it used of CoordinateDescent'slasso, so DiffPrecTest no longer waits for CoordinateDescent 0.7.tril_indexandtril_cartesianreplacesub2indLowerTriangularandind2subLowerTriangular, also inexper/.ReducedOracleNormalcallskronandsvecin their innermost loops, which rantril_cartesiantwice per term.tril_cartesianis three times slower than 0.4'sind2subLowerTriangular, which made the reduced path 1.33–1.39 times slower than master. 0.5.1 (tril_cartesian: the floating square root below p = 2^24 ProximalBase.jl#24) and #26 fix it at its source as well.skronandsvecnow also take the entry(row, col), computed once per call. The results are bitwise identical, and the reduced path is now faster than master whichever ProximalBase it runs on.benchmark/compare/(new) runs the estimators of master and of this branch on the same problems, in interleaved rounds (ab.sh).Breaking changes (version 0.3.0)
CDInverseKroneckerLossandCDInverseReducedSymKroneckerLossare no longer exported or defined.diffEstimation,invAsymHessianEstimation,invQSymHessian,reducedDiffEstimation,invHessianReducedandsupportEstimate(DTraceValidationSupport(), ...)take a ProximalSolversCDSolveras their optional last argument, in place of a CoordinateDescentCDOptions.supportEstimate(DTraceValidationSupport(), ...)now throws for penalty levels that are not decreasing, which its documentation already required.SymmetricSparseIterateis ap × pmatrix in 0.5.Benchmark against master (
benchmark/compare/)Four interleaved rounds on one core of an AMD EPYC 7513 (USC CARC Discovery, job 13326859), Julia 1.13.2, one BLAS thread, of this branch at 6fe3cf5 on ProximalOPT 1f82ae5 (now ProximalSolvers) and ProximalBase 0.5.0. The old side is master (0038089) with CovSel master, on CoordinateDescent 0.6.0 and ProximalBase 0.4.1. Times are the fastest median over the rounds, in ms;
benchmark/compare/README.mdhas the same.SeparateNormalcase, which varies from 0.90 to 1.15 between rounds.diffEstimationandinvAsymHessianEstimationtake the same time: their O(n p³) weights take most of it.invQSymHessiantakes a third less.tril_cartesian.DTraceValidationSupportis almost three times faster, mostly from CovSel'sdiffLoss, which now multiplies dense matrices.tril_cartesian).Testing
Pkg.test()with--depwarn=errorpasses all 20172 tests on Julia 1.13.2 (through[sources]) and on 1.10.12 (added by URL, as the CI step does), against ProximalSolvers 0.1.0 (9cdd33c) and ProximalBase 0.5.1, and earlier against ProximalOPT aeed600 and ProximalBase 0.5.0. Aqua is included.reducedDiffEstimationandinvHessianReducedat p = 20 and 30,estimate(ReducedNormal(), ...)andsupportEstimate(ANTSupport(), ...).KronQuadraticforms are checked against coordinate descent on the explicitkron(Σy, Σx)andH, thesvecgradient againstHθ - e, and the scale invariance of the passes. The second stages are checked against the rows of the inverse Hessians, as before.Release order
[sources]at them or remove them, and remove the CI step. DiffPrecTest itself stays unregistered.🤖 Generated with Claude Code