pca-web 0.1.0
This diff represents the content of publicly available package versions that have been released to one of the supported registries. The information contained in this diff is provided for informational purposes only and reflects changes between package versions as they appear in their respective public registries.
- package/LICENSE +21 -0
- package/README.md +421 -0
- package/dist/base.d.ts +79 -0
- package/dist/base.d.ts.map +1 -0
- package/dist/base.js +358 -0
- package/dist/base.js.map +1 -0
- package/dist/incremental-pca.d.ts +86 -0
- package/dist/incremental-pca.d.ts.map +1 -0
- package/dist/incremental-pca.js +397 -0
- package/dist/incremental-pca.js.map +1 -0
- package/dist/index.d.ts +21 -0
- package/dist/index.d.ts.map +1 -0
- package/dist/index.js +14 -0
- package/dist/index.js.map +1 -0
- package/dist/matrix.d.ts +44 -0
- package/dist/matrix.d.ts.map +1 -0
- package/dist/matrix.js +99 -0
- package/dist/matrix.js.map +1 -0
- package/dist/model.d.ts +86 -0
- package/dist/model.d.ts.map +1 -0
- package/dist/model.js +132 -0
- package/dist/model.js.map +1 -0
- package/dist/numeric/blas.d.ts +33 -0
- package/dist/numeric/blas.d.ts.map +1 -0
- package/dist/numeric/blas.js +130 -0
- package/dist/numeric/blas.js.map +1 -0
- package/dist/numeric/eigh.d.ts +21 -0
- package/dist/numeric/eigh.d.ts.map +1 -0
- package/dist/numeric/eigh.js +233 -0
- package/dist/numeric/eigh.js.map +1 -0
- package/dist/numeric/lanczos.d.ts +31 -0
- package/dist/numeric/lanczos.d.ts.map +1 -0
- package/dist/numeric/lanczos.js +287 -0
- package/dist/numeric/lanczos.js.map +1 -0
- package/dist/numeric/lu.d.ts +27 -0
- package/dist/numeric/lu.d.ts.map +1 -0
- package/dist/numeric/lu.js +149 -0
- package/dist/numeric/lu.js.map +1 -0
- package/dist/numeric/mle.d.ts +5 -0
- package/dist/numeric/mle.d.ts.map +1 -0
- package/dist/numeric/mle.js +67 -0
- package/dist/numeric/mle.js.map +1 -0
- package/dist/numeric/qr.d.ts +15 -0
- package/dist/numeric/qr.d.ts.map +1 -0
- package/dist/numeric/qr.js +88 -0
- package/dist/numeric/qr.js.map +1 -0
- package/dist/numeric/randomized.d.ts +54 -0
- package/dist/numeric/randomized.d.ts.map +1 -0
- package/dist/numeric/randomized.js +130 -0
- package/dist/numeric/randomized.js.map +1 -0
- package/dist/numeric/rng.d.ts +40 -0
- package/dist/numeric/rng.d.ts.map +1 -0
- package/dist/numeric/rng.js +127 -0
- package/dist/numeric/rng.js.map +1 -0
- package/dist/numeric/special.d.ts +2 -0
- package/dist/numeric/special.d.ts.map +1 -0
- package/dist/numeric/special.js +25 -0
- package/dist/numeric/special.js.map +1 -0
- package/dist/numeric/stats.d.ts +27 -0
- package/dist/numeric/stats.d.ts.map +1 -0
- package/dist/numeric/stats.js +110 -0
- package/dist/numeric/stats.js.map +1 -0
- package/dist/numeric/svd.d.ts +27 -0
- package/dist/numeric/svd.d.ts.map +1 -0
- package/dist/numeric/svd.js +374 -0
- package/dist/numeric/svd.js.map +1 -0
- package/dist/numeric/svdflip.d.ts +9 -0
- package/dist/numeric/svdflip.d.ts.map +1 -0
- package/dist/numeric/svdflip.js +32 -0
- package/dist/numeric/svdflip.js.map +1 -0
- package/dist/pca.d.ts +170 -0
- package/dist/pca.d.ts.map +1 -0
- package/dist/pca.js +649 -0
- package/dist/pca.js.map +1 -0
- package/dist/progress.d.ts +155 -0
- package/dist/progress.d.ts.map +1 -0
- package/dist/progress.js +173 -0
- package/dist/progress.js.map +1 -0
- package/dist/scheduling.d.ts +66 -0
- package/dist/scheduling.d.ts.map +1 -0
- package/dist/scheduling.js +160 -0
- package/dist/scheduling.js.map +1 -0
- package/dist/types.d.ts +10 -0
- package/dist/types.d.ts.map +1 -0
- package/dist/types.js +11 -0
- package/dist/types.js.map +1 -0
- package/dist/validation.d.ts +17 -0
- package/dist/validation.d.ts.map +1 -0
- package/dist/validation.js +36 -0
- package/dist/validation.js.map +1 -0
- package/dist/webgpu/df64.d.ts +18 -0
- package/dist/webgpu/df64.d.ts.map +1 -0
- package/dist/webgpu/df64.js +42 -0
- package/dist/webgpu/df64.js.map +1 -0
- package/dist/webgpu/engine.d.ts +74 -0
- package/dist/webgpu/engine.d.ts.map +1 -0
- package/dist/webgpu/engine.js +326 -0
- package/dist/webgpu/engine.js.map +1 -0
- package/dist/webgpu/gpu-pca.d.ts +90 -0
- package/dist/webgpu/gpu-pca.d.ts.map +1 -0
- package/dist/webgpu/gpu-pca.js +407 -0
- package/dist/webgpu/gpu-pca.js.map +1 -0
- package/dist/webgpu/index.d.ts +19 -0
- package/dist/webgpu/index.d.ts.map +1 -0
- package/dist/webgpu/index.js +16 -0
- package/dist/webgpu/index.js.map +1 -0
- package/dist/webgpu/kernels.d.ts +47 -0
- package/dist/webgpu/kernels.d.ts.map +1 -0
- package/dist/webgpu/kernels.js +147 -0
- package/dist/webgpu/kernels.js.map +1 -0
- package/dist/worker/client.d.ts +174 -0
- package/dist/worker/client.d.ts.map +1 -0
- package/dist/worker/client.js +482 -0
- package/dist/worker/client.js.map +1 -0
- package/dist/worker/handler.d.ts +17 -0
- package/dist/worker/handler.d.ts.map +1 -0
- package/dist/worker/handler.js +404 -0
- package/dist/worker/handler.js.map +1 -0
- package/dist/worker/protocol.d.ts +192 -0
- package/dist/worker/protocol.d.ts.map +1 -0
- package/dist/worker/protocol.js +70 -0
- package/dist/worker/protocol.js.map +1 -0
- package/dist/worker/worker.d.ts +14 -0
- package/dist/worker/worker.d.ts.map +1 -0
- package/dist/worker/worker.js +20 -0
- package/dist/worker/worker.js.map +1 -0
- package/package.json +94 -0
|
@@ -0,0 +1 @@
|
|
|
1
|
+
{"version":3,"file":"eigh.js","sourceRoot":"","sources":["../../src/numeric/eigh.ts"],"names":[],"mappings":"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"}
|
|
@@ -0,0 +1,31 @@
|
|
|
1
|
+
/**
|
|
2
|
+
* Truncated SVD via Golub–Kahan–Lanczos bidiagonalization with full
|
|
3
|
+
* reorthogonalization — the `svdSolver: 'arpack'` equivalent. Like ARPACK at
|
|
4
|
+
* tol=0, it converges the requested singular triplets to machine precision,
|
|
5
|
+
* so its output matches `scipy.sparse.linalg.svds` (and hence sklearn's
|
|
6
|
+
* arpack solver) up to floating-point noise and the sign convention that the
|
|
7
|
+
* caller fixes afterwards with svd_flip.
|
|
8
|
+
*
|
|
9
|
+
* Memory: O((m+n) · j) for a Krylov basis of size j (typically a small
|
|
10
|
+
* multiple of k), never O(m·n) beyond the input itself.
|
|
11
|
+
*/
|
|
12
|
+
import type { SolverHooks } from '../progress.js';
|
|
13
|
+
import type { FloatArray } from '../types.js';
|
|
14
|
+
import type { RandomState } from './rng.js';
|
|
15
|
+
import { type SvdResult } from './svd.js';
|
|
16
|
+
/**
|
|
17
|
+
* Top-k singular triplets of `a` (m×n) as a step generator: yields `void`
|
|
18
|
+
* at the top of every Lanczos iteration — the suspension/abort checkpoints
|
|
19
|
+
* used by the async drivers. Numerically identical to draining it in one go
|
|
20
|
+
* (`lanczosSvd` below). `hooks` reports each residual checkpoint; snapshot
|
|
21
|
+
* Ritz triplets reuse the small SVD already computed for the residual test,
|
|
22
|
+
* and no RNG is drawn for reporting, so the stream is unchanged.
|
|
23
|
+
*/
|
|
24
|
+
export declare function lanczosSvdSteps(a: FloatArray, m: number, n: number, k: number, v0: Float64Array, rng: RandomState, hooks?: SolverHooks | null): Generator<void, SvdResult, void>;
|
|
25
|
+
/**
|
|
26
|
+
* Top-k singular triplets of `a` (m×n). `v0` seeds the start vector (length
|
|
27
|
+
* min(m,n), like scipy's svds); the converged result does not depend on it.
|
|
28
|
+
* Requires 1 <= k < min(m, n) (ARPACK's constraint, enforced by the caller).
|
|
29
|
+
*/
|
|
30
|
+
export declare function lanczosSvd(a: FloatArray, m: number, n: number, k: number, v0: Float64Array, rng: RandomState): SvdResult;
|
|
31
|
+
//# sourceMappingURL=lanczos.d.ts.map
|
|
@@ -0,0 +1 @@
|
|
|
1
|
+
{"version":3,"file":"lanczos.d.ts","sourceRoot":"","sources":["../../src/numeric/lanczos.ts"],"names":[],"mappings":"AAAA;;;;;;;;;;GAUG;AACH,OAAO,KAAK,EAAE,WAAW,EAAE,MAAM,gBAAgB,CAAC;AAClD,OAAO,KAAK,EAAE,UAAU,EAAE,MAAM,aAAa,CAAC;AAE9C,OAAO,KAAK,EAAE,WAAW,EAAE,MAAM,UAAU,CAAC;AAC5C,OAAO,EAAE,KAAK,SAAS,EAAO,MAAM,UAAU,CAAC;AAsD/C;;;;;;;GAOG;AACH,wBAAiB,eAAe,CAC9B,CAAC,EAAE,UAAU,EACb,CAAC,EAAE,MAAM,EACT,CAAC,EAAE,MAAM,EACT,CAAC,EAAE,MAAM,EACT,EAAE,EAAE,YAAY,EAChB,GAAG,EAAE,WAAW,EAChB,KAAK,CAAC,EAAE,WAAW,GAAG,IAAI,GACzB,SAAS,CAAC,IAAI,EAAE,SAAS,EAAE,IAAI,CAAC,CAuIlC;AAED;;;;GAIG;AACH,wBAAgB,UAAU,CACxB,CAAC,EAAE,UAAU,EACb,CAAC,EAAE,MAAM,EACT,CAAC,EAAE,MAAM,EACT,CAAC,EAAE,MAAM,EACT,EAAE,EAAE,YAAY,EAChB,GAAG,EAAE,WAAW,GACf,SAAS,CAOX"}
|
|
@@ -0,0 +1,287 @@
|
|
|
1
|
+
import { matvec, matvecTransA } from './blas.js';
|
|
2
|
+
import { svd } from './svd.js';
|
|
3
|
+
const EPS = 2 ** -52;
|
|
4
|
+
function norm(v) {
|
|
5
|
+
let s = 0;
|
|
6
|
+
for (let i = 0; i < v.length; i++) {
|
|
7
|
+
s += v[i] * v[i];
|
|
8
|
+
}
|
|
9
|
+
return Math.sqrt(s);
|
|
10
|
+
}
|
|
11
|
+
/** v -= (basis_j · v) basis_j for all j — classical Gram–Schmidt, run twice. */
|
|
12
|
+
function reorthogonalize(v, basis) {
|
|
13
|
+
for (let pass = 0; pass < 2; pass++) {
|
|
14
|
+
for (let j = 0; j < basis.length; j++) {
|
|
15
|
+
const b = basis[j];
|
|
16
|
+
let d = 0;
|
|
17
|
+
for (let i = 0; i < v.length; i++) {
|
|
18
|
+
d += b[i] * v[i];
|
|
19
|
+
}
|
|
20
|
+
if (d !== 0) {
|
|
21
|
+
for (let i = 0; i < v.length; i++) {
|
|
22
|
+
v[i] -= d * b[i];
|
|
23
|
+
}
|
|
24
|
+
}
|
|
25
|
+
}
|
|
26
|
+
}
|
|
27
|
+
}
|
|
28
|
+
/** A fresh random unit vector orthogonal to `basis`, or null if the space is exhausted. */
|
|
29
|
+
function randomOrthogonal(dim, basis, rng) {
|
|
30
|
+
if (basis.length >= dim) {
|
|
31
|
+
return null;
|
|
32
|
+
}
|
|
33
|
+
for (let attempt = 0; attempt < 5; attempt++) {
|
|
34
|
+
const v = new Float64Array(dim);
|
|
35
|
+
rng.standardNormal(v);
|
|
36
|
+
reorthogonalize(v, basis);
|
|
37
|
+
const nv = norm(v);
|
|
38
|
+
if (nv > 1e-8 * Math.sqrt(dim)) {
|
|
39
|
+
for (let i = 0; i < dim; i++) {
|
|
40
|
+
v[i] /= nv;
|
|
41
|
+
}
|
|
42
|
+
return v;
|
|
43
|
+
}
|
|
44
|
+
}
|
|
45
|
+
return null;
|
|
46
|
+
}
|
|
47
|
+
/**
|
|
48
|
+
* Top-k singular triplets of `a` (m×n) as a step generator: yields `void`
|
|
49
|
+
* at the top of every Lanczos iteration — the suspension/abort checkpoints
|
|
50
|
+
* used by the async drivers. Numerically identical to draining it in one go
|
|
51
|
+
* (`lanczosSvd` below). `hooks` reports each residual checkpoint; snapshot
|
|
52
|
+
* Ritz triplets reuse the small SVD already computed for the residual test,
|
|
53
|
+
* and no RNG is drawn for reporting, so the stream is unchanged.
|
|
54
|
+
*/
|
|
55
|
+
export function* lanczosSvdSteps(a, m, n, k, v0, rng, hooks) {
|
|
56
|
+
// Run the recurrence with the v-side on the smaller dimension, mirroring
|
|
57
|
+
// scipy operating on the smaller Gram operator.
|
|
58
|
+
const wide = m < n;
|
|
59
|
+
const rows = wide ? n : m; // u-side dimension
|
|
60
|
+
const cols = wide ? m : n; // v-side dimension
|
|
61
|
+
const mulA = (x) => wide ? matvecTransA(a, x, m, n) : matvec(a, x, m, n);
|
|
62
|
+
const mulAT = (x) => wide ? matvec(a, x, m, n) : matvecTransA(a, x, m, n);
|
|
63
|
+
const jmax = cols;
|
|
64
|
+
const V = [];
|
|
65
|
+
const U = [];
|
|
66
|
+
const alphas = [];
|
|
67
|
+
const betas = [];
|
|
68
|
+
const v = Float64Array.from(v0);
|
|
69
|
+
const v0norm = norm(v);
|
|
70
|
+
if (v0norm === 0) {
|
|
71
|
+
throw new Error('lanczosSvd: starting vector must be nonzero');
|
|
72
|
+
}
|
|
73
|
+
for (let i = 0; i < cols; i++) {
|
|
74
|
+
v[i] /= v0norm;
|
|
75
|
+
}
|
|
76
|
+
V.push(v);
|
|
77
|
+
let anormEst = 0;
|
|
78
|
+
let result = null;
|
|
79
|
+
let checkCount = 0;
|
|
80
|
+
for (let j = 0; j < jmax; j++) {
|
|
81
|
+
yield;
|
|
82
|
+
// u_j = A v_j - beta_{j-1} u_{j-1}
|
|
83
|
+
const u = mulA(V[j]);
|
|
84
|
+
if (j > 0) {
|
|
85
|
+
const b = betas[j - 1];
|
|
86
|
+
const uPrev = U[j - 1];
|
|
87
|
+
for (let i = 0; i < rows; i++) {
|
|
88
|
+
u[i] -= b * uPrev[i];
|
|
89
|
+
}
|
|
90
|
+
}
|
|
91
|
+
reorthogonalize(u, U);
|
|
92
|
+
let alpha = norm(u);
|
|
93
|
+
anormEst = Math.max(anormEst, alpha);
|
|
94
|
+
if (alpha > EPS * anormEst * rows) {
|
|
95
|
+
for (let i = 0; i < rows; i++) {
|
|
96
|
+
u[i] /= alpha;
|
|
97
|
+
}
|
|
98
|
+
U.push(u);
|
|
99
|
+
}
|
|
100
|
+
else {
|
|
101
|
+
// Breakdown: the u-side Krylov space is exhausted in this direction.
|
|
102
|
+
alpha = 0;
|
|
103
|
+
const fresh = randomOrthogonal(rows, U, rng);
|
|
104
|
+
if (fresh === null) {
|
|
105
|
+
// Full u-space captured; finish with what we have (post-loop).
|
|
106
|
+
break;
|
|
107
|
+
}
|
|
108
|
+
U.push(fresh);
|
|
109
|
+
}
|
|
110
|
+
alphas.push(alpha);
|
|
111
|
+
// v_{j+1} = Aᵀ u_j - alpha_j v_j
|
|
112
|
+
const vn = mulAT(U[j]);
|
|
113
|
+
const al = alphas[j];
|
|
114
|
+
const vj = V[j];
|
|
115
|
+
for (let i = 0; i < cols; i++) {
|
|
116
|
+
vn[i] -= al * vj[i];
|
|
117
|
+
}
|
|
118
|
+
reorthogonalize(vn, V);
|
|
119
|
+
let beta = norm(vn);
|
|
120
|
+
const basisSize = j + 1;
|
|
121
|
+
const canStop = basisSize >= k;
|
|
122
|
+
const shouldCheck = canStop && (basisSize === jmax || (basisSize - k) % 3 === 0);
|
|
123
|
+
if (shouldCheck && alphas.length >= k) {
|
|
124
|
+
// Inlined tryFinish so the residual test's small SVD can also feed the
|
|
125
|
+
// progress event (and, when wanted, a Ritz-triplet snapshot) at no
|
|
126
|
+
// extra decomposition cost. Decisions are identical to tryFinish.
|
|
127
|
+
const decB = smallSvdOfB(alphas, betas);
|
|
128
|
+
const force = basisSize === jmax;
|
|
129
|
+
const smax = decB.s[0] > 0 ? decB.s[0] : 1;
|
|
130
|
+
const residual = maxTopKResidual(decB, beta, k);
|
|
131
|
+
const converged = residual <= 1e-13 * smax;
|
|
132
|
+
if (hooks) {
|
|
133
|
+
checkCount++;
|
|
134
|
+
// The terminal checkpoint's triplets feed the model itself; only
|
|
135
|
+
// non-terminal checkpoints assemble a separate snapshot copy.
|
|
136
|
+
let snapDec = null;
|
|
137
|
+
if (!(converged || force) && hooks.wantSnapshot(checkCount)) {
|
|
138
|
+
const ritz = assembleTriplets(decB, U, V, k, rows, cols);
|
|
139
|
+
snapDec = wide ? untransposeResult(ritz, m, n, k) : ritz;
|
|
140
|
+
}
|
|
141
|
+
hooks.emit({
|
|
142
|
+
phase: 'lanczos-step',
|
|
143
|
+
step: checkCount,
|
|
144
|
+
totalSteps: null,
|
|
145
|
+
dec: snapDec,
|
|
146
|
+
detail: { basisSize, jmax, maxResidual: residual },
|
|
147
|
+
});
|
|
148
|
+
}
|
|
149
|
+
if (converged || force) {
|
|
150
|
+
result = assembleTriplets(decB, U, V, k, rows, cols);
|
|
151
|
+
break;
|
|
152
|
+
}
|
|
153
|
+
}
|
|
154
|
+
if (beta > EPS * anormEst * cols) {
|
|
155
|
+
for (let i = 0; i < cols; i++) {
|
|
156
|
+
vn[i] /= beta;
|
|
157
|
+
}
|
|
158
|
+
V.push(vn);
|
|
159
|
+
}
|
|
160
|
+
else {
|
|
161
|
+
beta = 0;
|
|
162
|
+
const fresh = randomOrthogonal(cols, V, rng);
|
|
163
|
+
if (fresh === null) {
|
|
164
|
+
result = tryFinish(U, V, alphas, betas, 0, k, rows, cols, true);
|
|
165
|
+
break;
|
|
166
|
+
}
|
|
167
|
+
V.push(fresh);
|
|
168
|
+
}
|
|
169
|
+
betas.push(beta);
|
|
170
|
+
}
|
|
171
|
+
if (result === null) {
|
|
172
|
+
result = tryFinish(U, V, alphas, betas, 0, k, rows, cols, true);
|
|
173
|
+
if (result === null) {
|
|
174
|
+
throw new Error('lanczosSvd: failed to converge');
|
|
175
|
+
}
|
|
176
|
+
}
|
|
177
|
+
if (!wide) {
|
|
178
|
+
return result;
|
|
179
|
+
}
|
|
180
|
+
return untransposeResult(result, m, n, k);
|
|
181
|
+
}
|
|
182
|
+
/**
|
|
183
|
+
* Top-k singular triplets of `a` (m×n). `v0` seeds the start vector (length
|
|
184
|
+
* min(m,n), like scipy's svds); the converged result does not depend on it.
|
|
185
|
+
* Requires 1 <= k < min(m, n) (ARPACK's constraint, enforced by the caller).
|
|
186
|
+
*/
|
|
187
|
+
export function lanczosSvd(a, m, n, k, v0, rng) {
|
|
188
|
+
const gen = lanczosSvdSteps(a, m, n, k, v0, rng);
|
|
189
|
+
let step = gen.next();
|
|
190
|
+
while (!step.done) {
|
|
191
|
+
step = gen.next();
|
|
192
|
+
}
|
|
193
|
+
return step.value;
|
|
194
|
+
}
|
|
195
|
+
/** We decomposed Aᵀ; swap sides back: A = V_op Σ U_opᵀ. */
|
|
196
|
+
function untransposeResult(result, m, n, k) {
|
|
197
|
+
const { u: uOp, s, vt: vtOp } = result;
|
|
198
|
+
const uA = new Float64Array(m * k);
|
|
199
|
+
for (let i = 0; i < m; i++) {
|
|
200
|
+
for (let c = 0; c < k; c++) {
|
|
201
|
+
uA[i * k + c] = vtOp[c * m + i];
|
|
202
|
+
}
|
|
203
|
+
}
|
|
204
|
+
const vtA = new Float64Array(k * n);
|
|
205
|
+
for (let c = 0; c < k; c++) {
|
|
206
|
+
for (let i = 0; i < n; i++) {
|
|
207
|
+
vtA[c * n + i] = uOp[i * k + c];
|
|
208
|
+
}
|
|
209
|
+
}
|
|
210
|
+
return { u: uA, s, vt: vtA };
|
|
211
|
+
}
|
|
212
|
+
function smallSvdOfB(alphas, betas) {
|
|
213
|
+
const J = alphas.length;
|
|
214
|
+
const B = new Float64Array(J * J);
|
|
215
|
+
for (let i = 0; i < J; i++) {
|
|
216
|
+
B[i * J + i] = alphas[i];
|
|
217
|
+
if (i + 1 < J) {
|
|
218
|
+
B[i * J + i + 1] = betas[i];
|
|
219
|
+
}
|
|
220
|
+
}
|
|
221
|
+
const { u: p, s, vt: qt } = svd(B, J, J);
|
|
222
|
+
return { p, s, qt, j: J };
|
|
223
|
+
}
|
|
224
|
+
/** Largest residual estimate |betaNext · P[J−1, i]| over the top-k triplets. */
|
|
225
|
+
function maxTopKResidual(dec, betaNext, k) {
|
|
226
|
+
const J = dec.j;
|
|
227
|
+
let worst = 0;
|
|
228
|
+
for (let i = 0; i < k; i++) {
|
|
229
|
+
const residual = Math.abs(betaNext * dec.p[(J - 1) * J + i]);
|
|
230
|
+
if (residual > worst) {
|
|
231
|
+
worst = residual;
|
|
232
|
+
}
|
|
233
|
+
}
|
|
234
|
+
return worst;
|
|
235
|
+
}
|
|
236
|
+
/** Ritz triplets from the current basis: uOut = U·P[:, :k], vtOut = Qt[:k]·V. */
|
|
237
|
+
function assembleTriplets(dec, U, V, k, rows, cols) {
|
|
238
|
+
const { p: P, s, qt: Qt, j: J } = dec;
|
|
239
|
+
// uOut (rows×k) = U_mat @ P[:, :k]; U_mat columns are the U basis vectors.
|
|
240
|
+
const uOut = new Float64Array(rows * k);
|
|
241
|
+
for (let j = 0; j < J; j++) {
|
|
242
|
+
const uj = U[j];
|
|
243
|
+
for (let c = 0; c < k; c++) {
|
|
244
|
+
const w = P[j * J + c];
|
|
245
|
+
if (w !== 0) {
|
|
246
|
+
for (let i = 0; i < rows; i++) {
|
|
247
|
+
uOut[i * k + c] += w * uj[i];
|
|
248
|
+
}
|
|
249
|
+
}
|
|
250
|
+
}
|
|
251
|
+
}
|
|
252
|
+
// vtOut (k×cols): row c = Σ_j Qt[c, j] * V[j].
|
|
253
|
+
const vtOut = new Float64Array(k * cols);
|
|
254
|
+
for (let c = 0; c < k; c++) {
|
|
255
|
+
const off = c * cols;
|
|
256
|
+
for (let j = 0; j < J; j++) {
|
|
257
|
+
const w = Qt[c * J + j];
|
|
258
|
+
if (w !== 0) {
|
|
259
|
+
const vj = V[j];
|
|
260
|
+
for (let i = 0; i < cols; i++) {
|
|
261
|
+
vtOut[off + i] += w * vj[i];
|
|
262
|
+
}
|
|
263
|
+
}
|
|
264
|
+
}
|
|
265
|
+
}
|
|
266
|
+
return { u: uOut, s: s.slice(0, k), vt: vtOut };
|
|
267
|
+
}
|
|
268
|
+
/**
|
|
269
|
+
* Builds the bidiagonal B from (alphas, betas), takes its SVD, and returns
|
|
270
|
+
* the top-k Ritz triplets if they are converged (residual = betaNext ·
|
|
271
|
+
* |last row of P|), or unconditionally when `force` is set.
|
|
272
|
+
*/
|
|
273
|
+
function tryFinish(U, V, alphas, betas, betaNext, k, rows, cols, force) {
|
|
274
|
+
const J = alphas.length;
|
|
275
|
+
if (J < k) {
|
|
276
|
+
return null;
|
|
277
|
+
}
|
|
278
|
+
const dec = smallSvdOfB(alphas, betas);
|
|
279
|
+
if (!force) {
|
|
280
|
+
const smax = dec.s[0] > 0 ? dec.s[0] : 1;
|
|
281
|
+
if (maxTopKResidual(dec, betaNext, k) > 1e-13 * smax) {
|
|
282
|
+
return null;
|
|
283
|
+
}
|
|
284
|
+
}
|
|
285
|
+
return assembleTriplets(dec, U, V, k, rows, cols);
|
|
286
|
+
}
|
|
287
|
+
//# sourceMappingURL=lanczos.js.map
|
|
@@ -0,0 +1 @@
|
|
|
1
|
+
{"version":3,"file":"lanczos.js","sourceRoot":"","sources":["../../src/numeric/lanczos.ts"],"names":[],"mappings":"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"}
|
|
@@ -0,0 +1,27 @@
|
|
|
1
|
+
/**
|
|
2
|
+
* LU decomposition with partial pivoting (LAPACK dgetrf conventions: pivot is
|
|
3
|
+
* the first maximal |value|), plus the helpers PCA needs: `permute_l` output
|
|
4
|
+
* matching `scipy.linalg.lu(A, permute_l=True)` (used as the randomized
|
|
5
|
+
* solver's power-iteration normalizer), matrix inverse, and slogdet.
|
|
6
|
+
*/
|
|
7
|
+
export interface LuFactor {
|
|
8
|
+
/** In-place L\U factors, m×n row-major. */
|
|
9
|
+
lu: Float64Array;
|
|
10
|
+
/** ipiv[j]: row j was swapped with row ipiv[j] at step j. */
|
|
11
|
+
ipiv: Int32Array;
|
|
12
|
+
}
|
|
13
|
+
/** Factorizes a copy of `a` (m×n). Singular pivots are tolerated (column skipped). */
|
|
14
|
+
export declare function luFactor(a: Float64Array, m: number, n: number): LuFactor;
|
|
15
|
+
/**
|
|
16
|
+
* P@L from an LU factorization: the m×k unit-lower-trapezoidal factor with
|
|
17
|
+
* the row permutation applied, as returned by scipy's `lu(permute_l=True)`.
|
|
18
|
+
*/
|
|
19
|
+
export declare function permutedL(f: LuFactor, m: number, n: number): Float64Array;
|
|
20
|
+
/** Solves A x = b in place using a square LU factorization. */
|
|
21
|
+
export declare function luSolveInPlace(f: LuFactor, n: number, b: Float64Array): void;
|
|
22
|
+
/** Matrix inverse of a square `a` (n×n) via LU. Throws on an exactly singular
|
|
23
|
+
* matrix, like scipy.linalg.inv. */
|
|
24
|
+
export declare function inverse(a: Float64Array, n: number): Float64Array;
|
|
25
|
+
/** numpy `slogdet` for a square matrix: [sign, log|det|]. */
|
|
26
|
+
export declare function slogdet(a: Float64Array, n: number): [number, number];
|
|
27
|
+
//# sourceMappingURL=lu.d.ts.map
|
|
@@ -0,0 +1 @@
|
|
|
1
|
+
{"version":3,"file":"lu.d.ts","sourceRoot":"","sources":["../../src/numeric/lu.ts"],"names":[],"mappings":"AAAA;;;;;GAKG;AAEH,MAAM,WAAW,QAAQ;IACvB,2CAA2C;IAC3C,EAAE,EAAE,YAAY,CAAC;IACjB,6DAA6D;IAC7D,IAAI,EAAE,UAAU,CAAC;CAClB;AAED,sFAAsF;AACtF,wBAAgB,QAAQ,CAAC,CAAC,EAAE,YAAY,EAAE,CAAC,EAAE,MAAM,EAAE,CAAC,EAAE,MAAM,GAAG,QAAQ,CAwCxE;AAED;;;GAGG;AACH,wBAAgB,SAAS,CAAC,CAAC,EAAE,QAAQ,EAAE,CAAC,EAAE,MAAM,EAAE,CAAC,EAAE,MAAM,GAAG,YAAY,CA0BzE;AAED,+DAA+D;AAC/D,wBAAgB,cAAc,CAAC,CAAC,EAAE,QAAQ,EAAE,CAAC,EAAE,MAAM,EAAE,CAAC,EAAE,YAAY,GAAG,IAAI,CA0B5E;AAED;oCACoC;AACpC,wBAAgB,OAAO,CAAC,CAAC,EAAE,YAAY,EAAE,CAAC,EAAE,MAAM,GAAG,YAAY,CAkBhE;AAED,6DAA6D;AAC7D,wBAAgB,OAAO,CAAC,CAAC,EAAE,YAAY,EAAE,CAAC,EAAE,MAAM,GAAG,CAAC,MAAM,EAAE,MAAM,CAAC,CAkBpE"}
|
|
@@ -0,0 +1,149 @@
|
|
|
1
|
+
/**
|
|
2
|
+
* LU decomposition with partial pivoting (LAPACK dgetrf conventions: pivot is
|
|
3
|
+
* the first maximal |value|), plus the helpers PCA needs: `permute_l` output
|
|
4
|
+
* matching `scipy.linalg.lu(A, permute_l=True)` (used as the randomized
|
|
5
|
+
* solver's power-iteration normalizer), matrix inverse, and slogdet.
|
|
6
|
+
*/
|
|
7
|
+
/** Factorizes a copy of `a` (m×n). Singular pivots are tolerated (column skipped). */
|
|
8
|
+
export function luFactor(a, m, n) {
|
|
9
|
+
const lu = a.slice();
|
|
10
|
+
const k = Math.min(m, n);
|
|
11
|
+
const ipiv = new Int32Array(k);
|
|
12
|
+
for (let j = 0; j < k; j++) {
|
|
13
|
+
// Partial pivot: first index of maximal |value| in column j, rows j..m-1.
|
|
14
|
+
let p = j;
|
|
15
|
+
let maxv = Math.abs(lu[j * n + j]);
|
|
16
|
+
for (let i = j + 1; i < m; i++) {
|
|
17
|
+
const v = Math.abs(lu[i * n + j]);
|
|
18
|
+
if (v > maxv) {
|
|
19
|
+
maxv = v;
|
|
20
|
+
p = i;
|
|
21
|
+
}
|
|
22
|
+
}
|
|
23
|
+
ipiv[j] = p;
|
|
24
|
+
if (lu[p * n + j] !== 0) {
|
|
25
|
+
if (p !== j) {
|
|
26
|
+
for (let c = 0; c < n; c++) {
|
|
27
|
+
const t = lu[j * n + c];
|
|
28
|
+
lu[j * n + c] = lu[p * n + c];
|
|
29
|
+
lu[p * n + c] = t;
|
|
30
|
+
}
|
|
31
|
+
}
|
|
32
|
+
const inv = 1 / lu[j * n + j];
|
|
33
|
+
for (let i = j + 1; i < m; i++) {
|
|
34
|
+
lu[i * n + j] *= inv;
|
|
35
|
+
}
|
|
36
|
+
for (let i = j + 1; i < m; i++) {
|
|
37
|
+
const l = lu[i * n + j];
|
|
38
|
+
if (l !== 0) {
|
|
39
|
+
for (let c = j + 1; c < n; c++) {
|
|
40
|
+
lu[i * n + c] -= l * lu[j * n + c];
|
|
41
|
+
}
|
|
42
|
+
}
|
|
43
|
+
}
|
|
44
|
+
}
|
|
45
|
+
}
|
|
46
|
+
return { lu, ipiv };
|
|
47
|
+
}
|
|
48
|
+
/**
|
|
49
|
+
* P@L from an LU factorization: the m×k unit-lower-trapezoidal factor with
|
|
50
|
+
* the row permutation applied, as returned by scipy's `lu(permute_l=True)`.
|
|
51
|
+
*/
|
|
52
|
+
export function permutedL(f, m, n) {
|
|
53
|
+
const k = Math.min(m, n);
|
|
54
|
+
const sigma = new Int32Array(m);
|
|
55
|
+
for (let i = 0; i < m; i++) {
|
|
56
|
+
sigma[i] = i;
|
|
57
|
+
}
|
|
58
|
+
for (let j = 0; j < k; j++) {
|
|
59
|
+
const p = f.ipiv[j];
|
|
60
|
+
const t = sigma[j];
|
|
61
|
+
sigma[j] = sigma[p];
|
|
62
|
+
sigma[p] = t;
|
|
63
|
+
}
|
|
64
|
+
const pl = new Float64Array(m * k);
|
|
65
|
+
for (let i = 0; i < m; i++) {
|
|
66
|
+
const dest = sigma[i] * k;
|
|
67
|
+
const lim = Math.min(i, k - 1);
|
|
68
|
+
for (let j = 0; j < lim; j++) {
|
|
69
|
+
pl[dest + j] = f.lu[i * n + j];
|
|
70
|
+
}
|
|
71
|
+
if (i < k) {
|
|
72
|
+
pl[dest + i] = 1;
|
|
73
|
+
}
|
|
74
|
+
else {
|
|
75
|
+
pl[dest + lim] = f.lu[i * n + lim];
|
|
76
|
+
}
|
|
77
|
+
}
|
|
78
|
+
return pl;
|
|
79
|
+
}
|
|
80
|
+
/** Solves A x = b in place using a square LU factorization. */
|
|
81
|
+
export function luSolveInPlace(f, n, b) {
|
|
82
|
+
const { lu, ipiv } = f;
|
|
83
|
+
for (let j = 0; j < n; j++) {
|
|
84
|
+
const p = ipiv[j];
|
|
85
|
+
if (p !== j) {
|
|
86
|
+
const t = b[j];
|
|
87
|
+
b[j] = b[p];
|
|
88
|
+
b[p] = t;
|
|
89
|
+
}
|
|
90
|
+
}
|
|
91
|
+
// Forward substitution with unit lower triangle.
|
|
92
|
+
for (let i = 1; i < n; i++) {
|
|
93
|
+
let s = b[i];
|
|
94
|
+
for (let j = 0; j < i; j++) {
|
|
95
|
+
s -= lu[i * n + j] * b[j];
|
|
96
|
+
}
|
|
97
|
+
b[i] = s;
|
|
98
|
+
}
|
|
99
|
+
// Back substitution.
|
|
100
|
+
for (let i = n - 1; i >= 0; i--) {
|
|
101
|
+
let s = b[i];
|
|
102
|
+
for (let j = i + 1; j < n; j++) {
|
|
103
|
+
s -= lu[i * n + j] * b[j];
|
|
104
|
+
}
|
|
105
|
+
b[i] = s / lu[i * n + i];
|
|
106
|
+
}
|
|
107
|
+
}
|
|
108
|
+
/** Matrix inverse of a square `a` (n×n) via LU. Throws on an exactly singular
|
|
109
|
+
* matrix, like scipy.linalg.inv. */
|
|
110
|
+
export function inverse(a, n) {
|
|
111
|
+
const f = luFactor(a, n, n);
|
|
112
|
+
for (let j = 0; j < n; j++) {
|
|
113
|
+
if (f.lu[j * n + j] === 0) {
|
|
114
|
+
throw new Error('singular matrix: inverse cannot be computed');
|
|
115
|
+
}
|
|
116
|
+
}
|
|
117
|
+
const inv = new Float64Array(n * n);
|
|
118
|
+
const col = new Float64Array(n);
|
|
119
|
+
for (let j = 0; j < n; j++) {
|
|
120
|
+
col.fill(0);
|
|
121
|
+
col[j] = 1;
|
|
122
|
+
luSolveInPlace(f, n, col);
|
|
123
|
+
for (let i = 0; i < n; i++) {
|
|
124
|
+
inv[i * n + j] = col[i];
|
|
125
|
+
}
|
|
126
|
+
}
|
|
127
|
+
return inv;
|
|
128
|
+
}
|
|
129
|
+
/** numpy `slogdet` for a square matrix: [sign, log|det|]. */
|
|
130
|
+
export function slogdet(a, n) {
|
|
131
|
+
const f = luFactor(a, n, n);
|
|
132
|
+
let sign = 1;
|
|
133
|
+
let logdet = 0;
|
|
134
|
+
for (let j = 0; j < n; j++) {
|
|
135
|
+
if (f.ipiv[j] !== j) {
|
|
136
|
+
sign = -sign;
|
|
137
|
+
}
|
|
138
|
+
const d = f.lu[j * n + j];
|
|
139
|
+
if (d === 0) {
|
|
140
|
+
return [0, Number.NEGATIVE_INFINITY];
|
|
141
|
+
}
|
|
142
|
+
if (d < 0) {
|
|
143
|
+
sign = -sign;
|
|
144
|
+
}
|
|
145
|
+
logdet += Math.log(Math.abs(d));
|
|
146
|
+
}
|
|
147
|
+
return [sign, logdet];
|
|
148
|
+
}
|
|
149
|
+
//# sourceMappingURL=lu.js.map
|
|
@@ -0,0 +1 @@
|
|
|
1
|
+
{"version":3,"file":"lu.js","sourceRoot":"","sources":["../../src/numeric/lu.ts"],"names":[],"mappings":"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"}
|
|
@@ -0,0 +1,5 @@
|
|
|
1
|
+
/** Log-likelihood that the data has rank `rank`, given the eigenvalue spectrum. */
|
|
2
|
+
export declare function assessDimension(spectrum: Float64Array, rank: number, nSamples: number): number;
|
|
3
|
+
/** argmax over rank of assessDimension, ranks 1..p-1 (never returns 0). */
|
|
4
|
+
export declare function inferDimension(spectrum: Float64Array, nSamples: number): number;
|
|
5
|
+
//# sourceMappingURL=mle.d.ts.map
|
|
@@ -0,0 +1 @@
|
|
|
1
|
+
{"version":3,"file":"mle.d.ts","sourceRoot":"","sources":["../../src/numeric/mle.ts"],"names":[],"mappings":"AAYA,mFAAmF;AACnF,wBAAgB,eAAe,CAAC,QAAQ,EAAE,YAAY,EAAE,IAAI,EAAE,MAAM,EAAE,QAAQ,EAAE,MAAM,GAAG,MAAM,CAgD9F;AAED,2EAA2E;AAC3E,wBAAgB,cAAc,CAAC,QAAQ,EAAE,YAAY,EAAE,QAAQ,EAAE,MAAM,GAAG,MAAM,CAY/E"}
|
|
@@ -0,0 +1,67 @@
|
|
|
1
|
+
/**
|
|
2
|
+
* Minka's MLE for choosing the number of PCA components — a direct port of
|
|
3
|
+
* sklearn's `_assess_dimension` / `_infer_dimension`.
|
|
4
|
+
*
|
|
5
|
+
* Reference: Thomas P. Minka, "Automatic Choice of Dimensionality for PCA",
|
|
6
|
+
* NIPS 2000.
|
|
7
|
+
*/
|
|
8
|
+
import { lgamma } from './special.js';
|
|
9
|
+
const LOG_PI = Math.log(Math.PI);
|
|
10
|
+
const LOG_2PI = Math.log(2 * Math.PI);
|
|
11
|
+
/** Log-likelihood that the data has rank `rank`, given the eigenvalue spectrum. */
|
|
12
|
+
export function assessDimension(spectrum, rank, nSamples) {
|
|
13
|
+
const p = spectrum.length;
|
|
14
|
+
if (!(rank >= 1 && rank < p)) {
|
|
15
|
+
throw new Error('the tested rank should be in [1, n_features - 1]');
|
|
16
|
+
}
|
|
17
|
+
const eps = 1e-15;
|
|
18
|
+
if (spectrum[rank - 1] < eps) {
|
|
19
|
+
// Tiny eigenvalue: log-likelihood would be tiny and numerically fragile.
|
|
20
|
+
return Number.NEGATIVE_INFINITY;
|
|
21
|
+
}
|
|
22
|
+
let pu = -rank * Math.LN2;
|
|
23
|
+
for (let i = 1; i <= rank; i++) {
|
|
24
|
+
pu += lgamma((p - i + 1) / 2) - (LOG_PI * (p - i + 1)) / 2;
|
|
25
|
+
}
|
|
26
|
+
let pl = 0;
|
|
27
|
+
for (let i = 0; i < rank; i++) {
|
|
28
|
+
pl += Math.log(spectrum[i]);
|
|
29
|
+
}
|
|
30
|
+
pl = (-pl * nSamples) / 2;
|
|
31
|
+
let v = 0;
|
|
32
|
+
for (let i = rank; i < p; i++) {
|
|
33
|
+
v += spectrum[i];
|
|
34
|
+
}
|
|
35
|
+
v = Math.max(eps, v / (p - rank));
|
|
36
|
+
const pv = (-Math.log(v) * nSamples * (p - rank)) / 2;
|
|
37
|
+
const m = p * rank - (rank * (rank + 1)) / 2;
|
|
38
|
+
const pp = (LOG_2PI * (m + rank)) / 2;
|
|
39
|
+
const spectrumFilled = Float64Array.from(spectrum);
|
|
40
|
+
for (let i = rank; i < p; i++) {
|
|
41
|
+
spectrumFilled[i] = v;
|
|
42
|
+
}
|
|
43
|
+
let pa = 0;
|
|
44
|
+
const logN = Math.log(nSamples);
|
|
45
|
+
for (let i = 0; i < rank; i++) {
|
|
46
|
+
for (let j = i + 1; j < p; j++) {
|
|
47
|
+
pa +=
|
|
48
|
+
Math.log((spectrum[i] - spectrum[j]) * (1.0 / spectrumFilled[j] - 1.0 / spectrumFilled[i])) + logN;
|
|
49
|
+
}
|
|
50
|
+
}
|
|
51
|
+
return pu + pl + pv + pp - pa / 2 - (rank * logN) / 2;
|
|
52
|
+
}
|
|
53
|
+
/** argmax over rank of assessDimension, ranks 1..p-1 (never returns 0). */
|
|
54
|
+
export function inferDimension(spectrum, nSamples) {
|
|
55
|
+
const p = spectrum.length;
|
|
56
|
+
let best = 0;
|
|
57
|
+
let bestLl = Number.NEGATIVE_INFINITY;
|
|
58
|
+
for (let rank = 1; rank < p; rank++) {
|
|
59
|
+
const ll = assessDimension(spectrum, rank, nSamples);
|
|
60
|
+
if (ll > bestLl) {
|
|
61
|
+
bestLl = ll;
|
|
62
|
+
best = rank;
|
|
63
|
+
}
|
|
64
|
+
}
|
|
65
|
+
return best;
|
|
66
|
+
}
|
|
67
|
+
//# sourceMappingURL=mle.js.map
|
|
@@ -0,0 +1 @@
|
|
|
1
|
+
{"version":3,"file":"mle.js","sourceRoot":"","sources":["../../src/numeric/mle.ts"],"names":[],"mappings":"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"}
|