Skip to content

constrained_lasso: results at a glance, constraints in Table 2, subsections in Section 5 - #70

Merged
tschm merged 1 commit into
constrained-lasso-review-2from
constrained-lasso-readability
Oct 24, 2026
Merged

tschm merged 1 commit into
constrained-lasso-review-2from
constrained-lasso-readability

Conversation

@tschm

@tschm tschm commented Oct 24, 2026

Copy link
Copy Markdown
Member

Three readability changes to the constrained-LASSO note. Stacked on #69; review that first.

1. Results at a glance (end of Section 1)

A boxed table with one row per kind of constraint the note tests. For each it gives the encoding that takes it, whether the path is exact or declined, and which references confirm it. A reader gets the whole result before the method.

constraint encoding result also checked against
none, or signs penalty exact LARS
caps, inequality rows penalty exact IPM, Gaines et al.
nonhomogeneous rows penalty exact IPM
zero sum, with signs at most budget exact IPM, comlasso, Gaines et al., c-lasso*
zero sum with caps, monotone penalty, relaxed exact IPM
p > n (Table 5's constraints) as above exact, no ridge LARS, IPM, comlasso, c-lasso*
two nearly identical free columns – declined –

* With c-lasso's ridge set to 1e-12.

The box is unnumbered, like Algorithm 1. A numbered table would renumber Tables 2–7, which about 25 comments in the code, the README and the Julia check cite by number.

2. Constraints in Table 2

  • Table 2 gains a constraint column, e.g. |β_j| ≤ u or 1ᵀβ = 0, β_2j ≥ 0. make_figures.py writes it from a new CONSTRAINTS map, and test_table_tex checks every problem has one.
  • The paragraph that defined all twelve problems in prose now keeps only what the column can't say: data, design and behaviour.

3. Subsections in Section 5

Run-in paragraphs become numbered subsections:

  • 5.1 Test problems and checks
  • 5.2 Accuracy
  • 5.3 Scale and cost
  • 5.4 Hostile problems
  • 5.5 More predictors than observations
  • 5.6 Three independent path algorithms

Checks

  • make_figures.py test: 17 passed. Every table is regenerated, and no number changes.
  • 19 pages, with no LaTeX warnings. The array package is added for the box's ragged-right columns.

🤖 Generated with Claude Code

…ctions in Section 5

- Section 1 ends with a 'results at a glance' box: one row per kind of
  constraint tested, the encoding that takes it, the outcome, and the
  references that confirm it. Unnumbered, like Algorithm 1, so no table
  is renumbered.
- Table 2 gains a constraint column, written by make_figures.py
  (CONSTRAINTS), and the paragraph that defined each problem in prose
  keeps only data, design and behaviour.
- Section 5 has subsections: test problems and checks, accuracy, scale
  and cost, hostile problems, more predictors than observations, and
  three independent path algorithms.

Co-Authored-By: Claude Opus 5.5 <noreply@anthropic.com>
@tschm
tschm merged commit 5ad2af3 into constrained-lasso-review-2 Oct 24, 2026
@tschm
tschm deleted the constrained-lasso-readability branch October 24, 2026 19:54
tschm added a commit that referenced this pull request Oct 25, 2026
* constrained_lasso: second-round review fixes

1. Section 5: the three path algorithms trace the CLA's path once
   started at the exact first knot (Gaines et al. as shipped do not).
2. Section 1: the two encodings are the general one and the direct one
   for homogeneous constraints, not both needed (Appendix B).
3. Section 3: the penalty form's start includes the rows C S z <= h, which
   move it off z = 0 when some h_r < 0.
4. Section 2: inequality rows fit Markowitz's form as equality rows with
   a nonnegative slack, cited, instead of 'a standard extension'.
5. Scale: the cost ratios are the one set of results, not numbers, the
   script does not write.
6. Section 6: only the largest zero sum needed a retry, as cvxcla 2.6.0,
   which tried only the first relaxation, shows.
7. Section 1: the CLA gives exact paths or stops with an error.
8. Tables 3-5 follow the paragraphs that cite them.

Co-Authored-By: Claude Opus 5.5 <noreply@anthropic.com>

* constrained_lasso: a 'When to use which encoding' box

At the end of Section 6, in the style of Algorithm 1 and the companion
note's 'When to use it': which encoding cvxcla.Lasso picks for which
constraints, and what each costs - the budget form in one run for
homogeneous equality rows with signs, the penalty form in one run from a
nondegenerate start, two or more relaxed runs and a certificate for
homogeneous rows with caps or rows, either form with p > n, and an error
on two nearly identical columns.

Co-Authored-By: Claude Opus 5.5 <noreply@anthropic.com>

* constrained_lasso: results at a glance, constraints in Table 2, subsections in Section 5 (#70)

- Section 1 ends with a 'results at a glance' box: one row per kind of
  constraint tested, the encoding that takes it, the outcome, and the
  references that confirm it. Unnumbered, like Algorithm 1, so no table
  is renumbered.
- Table 2 gains a constraint column, written by make_figures.py
  (CONSTRAINTS), and the paragraph that defined each problem in prose
  keeps only data, design and behaviour.
- Section 5 has subsections: test problems and checks, accuracy, scale
  and cost, hostile problems, more predictors than observations, and
  three independent path algorithms.

Co-authored-by: Claude Opus 5.5 <noreply@anthropic.com>

---------

Co-authored-by: Claude Opus 5.5 <noreply@anthropic.com>
tschm added a commit that referenced this pull request Oct 25, 2026
* constrained_lasso: second-round review fixes

1. Section 5: the three path algorithms trace the CLA's path once
   started at the exact first knot (Gaines et al. as shipped do not).
2. Section 1: the two encodings are the general one and the direct one
   for homogeneous constraints, not both needed (Appendix B).
3. Section 3: the penalty form's start includes the rows C S z <= h, which
   move it off z = 0 when some h_r < 0.
4. Section 2: inequality rows fit Markowitz's form as equality rows with
   a nonnegative slack, cited, instead of 'a standard extension'.
5. Scale: the cost ratios are the one set of results, not numbers, the
   script does not write.
6. Section 6: only the largest zero sum needed a retry, as cvxcla 2.6.0,
   which tried only the first relaxation, shows.
7. Section 1: the CLA gives exact paths or stops with an error.
8. Tables 3-5 follow the paragraphs that cite them.

Co-Authored-By: Claude Opus 5.5 <noreply@anthropic.com>

* constrained_lasso: a 'When to use which encoding' box

At the end of Section 6, in the style of Algorithm 1 and the companion
note's 'When to use it': which encoding cvxcla.Lasso picks for which
constraints, and what each costs - the budget form in one run for
homogeneous equality rows with signs, the penalty form in one run from a
nondegenerate start, two or more relaxed runs and a certificate for
homogeneous rows with caps or rows, either form with p > n, and an error
on two nearly identical columns.

Co-Authored-By: Claude Opus 5.5 <noreply@anthropic.com>

* constrained_lasso: results at a glance, constraints in Table 2, subsections in Section 5 (#70)

- Section 1 ends with a 'results at a glance' box: one row per kind of
  constraint tested, the encoding that takes it, the outcome, and the
  references that confirm it. Unnumbered, like Algorithm 1, so no table
  is renumbered.
- Table 2 gains a constraint column, written by make_figures.py
  (CONSTRAINTS), and the paragraph that defined each problem in prose
  keeps only data, design and behaviour.
- Section 5 has subsections: test problems and checks, accuracy, scale
  and cost, hostile problems, more predictors than observations, and
  three independent path algorithms.

Co-authored-by: Claude Opus 5.5 <noreply@anthropic.com>

* constrained_lasso: one home for each repeated argument

- p > n and the ridge: argued in Section 6, measured in Section 5.6.
  Section 1 now says it in two sentences and points to both; the 0.58
  figure appears where it is measured and where the argument uses it.
- The relaxation: Related work no longer repeats the sentence just above
  it, and the encodings list no longer repeats Section 4's opening.
- The near-duplicate decline: Section 5.4 gives the result and points
  to Section 6, which explains why.

18 pages, down from 19; no evidence or number removed.

Co-Authored-By: Claude Opus 5.5 <noreply@anthropic.com>

* constrained_lasso: third-round review fixes

1. Section 2: Markowitz's algorithm handles general linear constraints,
   as its title says; the note writes them as equality rows, inequality
   rows and bounds. Replaces a claim about the 1956 paper's exact form
   that could not be checked against the source.
2. Cross-references: Monotone is described in Appendix A; comlasso's
   agreement on Wide, zero-sum is in Section 5.6.
3. Table 2 is placed with Section 5.1 (page 9), not after Figure 3.
4. Competing interests: comlasso is named among the checks.
5. The encoding box's second bullet separates its two conditions.

Co-Authored-By: Claude Opus 5.5 <noreply@anthropic.com>

* constrained_lasso: plainer sentences where the text read machine-written

Measured against the companion LASSO note, published in the same
journal, the note's voice already matched (sentence length, parentheses,
contrasts). It ran heavier on two habits: a short claim, a colon, then
the explanation, and sentences that announce a count before the content.
Those are rewritten:

- 'certified, not trusted:' and 'a candidate path, not a proof' after
  Lemma 1 become one plain statement of what cvxcla accepts;
- 'Bounds that exclude zero are not a limit: they enter as rows' and
  'The practical consequence is simple:' lose the colon;
- 'it is an example, not a proof' (Appendix A) and the 'one set of
  results' sentence (Scale) are rephrased;
- Section 6's opening no longer announces what the section says;
  'Two things stop the run', 'Two other starts' open on the content;
- the encodings paragraph no longer summarises the list right below it;
- Appendix D's closing line, which the conclusion already carries, goes.

No number, citation or claim changes.

Co-Authored-By: Claude Opus 5.5 <noreply@anthropic.com>

* constrained_lasso: fold Appendix D into a cited sentence

The two CLA defects the checks exposed (a tied maximum return, a
low-rank covariance) are cvxcla's own fixes, and the cvxcla paper
already documents both. Section 1 now names them and cites it; Appendix D
and its table go. The conclusion keeps its one-sentence summary.

Co-Authored-By: Claude Opus 5.5 <noreply@anthropic.com>

* constrained_lasso: drop the portfolio problems, now tested in cvxcla

The note no longer reports them (Appendix D was folded into a cited
sentence), and the test moved to cvxcla's own suite (cvxgrp/cvxcla#988),
where the problems belong. Removes portfolio_problems, portfolios,
portfolios_tex, test_portfolios, the figures/portfolios.tex output and
the now-unused CLA import. 16 tests pass.

Co-Authored-By: Claude Opus 5.5 <noreply@anthropic.com>

---------

Co-authored-by: Claude Opus 5.5 <noreply@anthropic.com>
Sign up for free to join this conversation on GitHub. Already have an account? Sign in to comment

Labels

None yet

Projects

None yet

Development

Successfully merging this pull request may close these issues.

1 participant