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
package/dist/base.js
ADDED
|
@@ -0,0 +1,358 @@
|
|
|
1
|
+
/**
|
|
2
|
+
* Shared machinery for PCA and IncrementalPCA — the counterpart of sklearn's
|
|
3
|
+
* `_BasePCA`: transform / inverseTransform / getCovariance / getPrecision /
|
|
4
|
+
* getFeatureNamesOut operating on the fitted state.
|
|
5
|
+
*/
|
|
6
|
+
import { asMatrix, Matrix } from './matrix.js';
|
|
7
|
+
import { PCA_MODEL_FORMAT_VERSION } from './model.js';
|
|
8
|
+
import { matmul, matmulTransB } from './numeric/blas.js';
|
|
9
|
+
import { inverse } from './numeric/lu.js';
|
|
10
|
+
import { dtypeOf, epsFor } from './types.js';
|
|
11
|
+
import { assertAllFinite, checkFeatureCount, NotFittedError } from './validation.js';
|
|
12
|
+
export function castTo(a, dtype) {
|
|
13
|
+
return dtype === 'float64' ? a : Float32Array.from(a);
|
|
14
|
+
}
|
|
15
|
+
export function promoteDtype(a, b) {
|
|
16
|
+
return a === 'float64' || b === 'float64' ? 'float64' : 'float32';
|
|
17
|
+
}
|
|
18
|
+
export class BasePCA {
|
|
19
|
+
estimatorName = 'PCA';
|
|
20
|
+
fitted = false;
|
|
21
|
+
/** True while a fit generator is live — re-entrant fits on one instance throw. */
|
|
22
|
+
fitting = false;
|
|
23
|
+
dtype = 'float64';
|
|
24
|
+
whitenOpt = false;
|
|
25
|
+
components_ = null;
|
|
26
|
+
explainedVariance_ = null;
|
|
27
|
+
explainedVarianceRatio_ = null;
|
|
28
|
+
singularValues_ = null;
|
|
29
|
+
mean_ = null;
|
|
30
|
+
nComponents_ = 0;
|
|
31
|
+
nFeaturesIn_ = 0;
|
|
32
|
+
noiseVariance_ = 0;
|
|
33
|
+
assertFitted() {
|
|
34
|
+
if (!this.fitted) {
|
|
35
|
+
throw new NotFittedError(this.estimatorName);
|
|
36
|
+
}
|
|
37
|
+
}
|
|
38
|
+
// ------------------------------------------------------------------
|
|
39
|
+
// Fitted attributes (sklearn's trailing-underscore attributes)
|
|
40
|
+
// ------------------------------------------------------------------
|
|
41
|
+
/** Principal axes (nComponents × nFeatures) — sklearn's `components_`. */
|
|
42
|
+
get components() {
|
|
43
|
+
this.assertFitted();
|
|
44
|
+
return this.components_;
|
|
45
|
+
}
|
|
46
|
+
/** sklearn's `explained_variance_`. */
|
|
47
|
+
get explainedVariance() {
|
|
48
|
+
this.assertFitted();
|
|
49
|
+
return this.explainedVariance_;
|
|
50
|
+
}
|
|
51
|
+
/**
|
|
52
|
+
* sklearn's `explained_variance_ratio_`. For zero-variance (all-constant)
|
|
53
|
+
* training data the total variance is 0, so every entry is NaN — the same
|
|
54
|
+
* 0/0 sklearn produces (alongside a RuntimeWarning) in that case.
|
|
55
|
+
*/
|
|
56
|
+
get explainedVarianceRatio() {
|
|
57
|
+
this.assertFitted();
|
|
58
|
+
return this.explainedVarianceRatio_;
|
|
59
|
+
}
|
|
60
|
+
/** sklearn's `singular_values_`. */
|
|
61
|
+
get singularValues() {
|
|
62
|
+
this.assertFitted();
|
|
63
|
+
return this.singularValues_;
|
|
64
|
+
}
|
|
65
|
+
/** Per-feature training mean — sklearn's `mean_`. */
|
|
66
|
+
get mean() {
|
|
67
|
+
this.assertFitted();
|
|
68
|
+
return this.mean_;
|
|
69
|
+
}
|
|
70
|
+
/** Estimated number of components — sklearn's `n_components_`. */
|
|
71
|
+
get nComponents() {
|
|
72
|
+
this.assertFitted();
|
|
73
|
+
return this.nComponents_;
|
|
74
|
+
}
|
|
75
|
+
/** sklearn's `n_features_in_`. */
|
|
76
|
+
get nFeaturesIn() {
|
|
77
|
+
this.assertFitted();
|
|
78
|
+
return this.nFeaturesIn_;
|
|
79
|
+
}
|
|
80
|
+
/** Tipping–Bishop noise variance — sklearn's `noise_variance_`. */
|
|
81
|
+
get noiseVariance() {
|
|
82
|
+
this.assertFitted();
|
|
83
|
+
return this.noiseVariance_;
|
|
84
|
+
}
|
|
85
|
+
/** Whether whitening is enabled (constructor option). */
|
|
86
|
+
get whiten() {
|
|
87
|
+
return this.whitenOpt;
|
|
88
|
+
}
|
|
89
|
+
// ------------------------------------------------------------------
|
|
90
|
+
// Transforms
|
|
91
|
+
// ------------------------------------------------------------------
|
|
92
|
+
/** Project X onto the principal components — sklearn's `transform`. */
|
|
93
|
+
transform(X) {
|
|
94
|
+
this.assertFitted();
|
|
95
|
+
const xm = asMatrix(X);
|
|
96
|
+
assertAllFinite(xm, `${this.estimatorName}.transform`);
|
|
97
|
+
checkFeatureCount(xm, this.nFeaturesIn_, this.estimatorName);
|
|
98
|
+
return this.transformCore(xm, false);
|
|
99
|
+
}
|
|
100
|
+
transformCore(X, xIsCentered) {
|
|
101
|
+
const comp = this.components_;
|
|
102
|
+
// Project first, then remove the projected mean — sklearn's operation
|
|
103
|
+
// order (avoids centering a copy of X).
|
|
104
|
+
const xt = matmulTransB(X.data, comp.data, X.rows, X.cols, comp.rows);
|
|
105
|
+
return this._transformFromProjection(xt, X.rows, X.dtype, xIsCentered);
|
|
106
|
+
}
|
|
107
|
+
/**
|
|
108
|
+
* @internal Everything in transform downstream of the X·componentsᵀ
|
|
109
|
+
* product (mean-projection removal, whitening, dtype cast). The WebGPU
|
|
110
|
+
* frontend calls this with a device-computed projection; `xt` is consumed.
|
|
111
|
+
*/
|
|
112
|
+
_transformFromProjection(xt, n, xDtype, xIsCentered) {
|
|
113
|
+
const comp = this.components_;
|
|
114
|
+
const ev = this.explainedVariance_;
|
|
115
|
+
const meanArr = this.mean_;
|
|
116
|
+
const p = comp.cols;
|
|
117
|
+
const k = comp.rows;
|
|
118
|
+
if (!xIsCentered) {
|
|
119
|
+
const meanProj = new Float64Array(k);
|
|
120
|
+
for (let c = 0; c < k; c++) {
|
|
121
|
+
let acc = 0;
|
|
122
|
+
const off = c * p;
|
|
123
|
+
for (let j = 0; j < p; j++) {
|
|
124
|
+
acc += meanArr[j] * comp.data[off + j];
|
|
125
|
+
}
|
|
126
|
+
meanProj[c] = acc;
|
|
127
|
+
}
|
|
128
|
+
for (let i = 0; i < n; i++) {
|
|
129
|
+
for (let c = 0; c < k; c++) {
|
|
130
|
+
xt[i * k + c] -= meanProj[c];
|
|
131
|
+
}
|
|
132
|
+
}
|
|
133
|
+
}
|
|
134
|
+
if (this.whitenOpt) {
|
|
135
|
+
// Clip near-zero variances at dtype eps, as sklearn does, so
|
|
136
|
+
// rank-deficient data cannot produce non-finite whitened output.
|
|
137
|
+
const minScale = epsFor(dtypeOf(ev));
|
|
138
|
+
for (let c = 0; c < k; c++) {
|
|
139
|
+
let scale = Math.sqrt(ev[c]);
|
|
140
|
+
if (scale < minScale) {
|
|
141
|
+
scale = minScale;
|
|
142
|
+
}
|
|
143
|
+
for (let i = 0; i < n; i++) {
|
|
144
|
+
xt[i * k + c] /= scale;
|
|
145
|
+
}
|
|
146
|
+
}
|
|
147
|
+
}
|
|
148
|
+
return new Matrix(castTo(xt, promoteDtype(xDtype, this.dtype)), n, k);
|
|
149
|
+
}
|
|
150
|
+
/** Map component-space data back to feature space — sklearn's `inverse_transform`. */
|
|
151
|
+
inverseTransform(X) {
|
|
152
|
+
this.assertFitted();
|
|
153
|
+
const xm = asMatrix(X);
|
|
154
|
+
const comp = this.components_;
|
|
155
|
+
const ev = this.explainedVariance_;
|
|
156
|
+
const meanArr = this.mean_;
|
|
157
|
+
const k = comp.rows;
|
|
158
|
+
const p = comp.cols;
|
|
159
|
+
if (xm.cols !== k) {
|
|
160
|
+
throw new Error(`X has ${xm.cols} features, but inverseTransform expects ${k} (= nComponents)`);
|
|
161
|
+
}
|
|
162
|
+
const n = xm.rows;
|
|
163
|
+
let compData = comp.data;
|
|
164
|
+
if (this.whitenOpt) {
|
|
165
|
+
const scaled = new Float64Array(k * p);
|
|
166
|
+
for (let c = 0; c < k; c++) {
|
|
167
|
+
const f = Math.sqrt(ev[c]);
|
|
168
|
+
const off = c * p;
|
|
169
|
+
for (let j = 0; j < p; j++) {
|
|
170
|
+
scaled[off + j] = f * comp.data[off + j];
|
|
171
|
+
}
|
|
172
|
+
}
|
|
173
|
+
compData = scaled;
|
|
174
|
+
}
|
|
175
|
+
const out = matmul(xm.data, compData, n, k, p);
|
|
176
|
+
for (let i = 0; i < n; i++) {
|
|
177
|
+
const off = i * p;
|
|
178
|
+
for (let j = 0; j < p; j++) {
|
|
179
|
+
out[off + j] += meanArr[j];
|
|
180
|
+
}
|
|
181
|
+
}
|
|
182
|
+
// numpy promotion: `X @ components + mean_` picks up mean_'s dtype, so a
|
|
183
|
+
// float32-fitted IncrementalPCA (whose mean_ is always float64) returns
|
|
184
|
+
// float64 here — unlike transform, whose in-place subtraction stays f32.
|
|
185
|
+
const outDtype = promoteDtype(promoteDtype(xm.dtype, this.dtype), dtypeOf(meanArr));
|
|
186
|
+
return new Matrix(castTo(out, outDtype), n, p);
|
|
187
|
+
}
|
|
188
|
+
// ------------------------------------------------------------------
|
|
189
|
+
// Generative model: covariance and precision
|
|
190
|
+
// ------------------------------------------------------------------
|
|
191
|
+
/** Model covariance `componentsᵀ diag(ev − nv) components + nv·I` — sklearn's `get_covariance`. */
|
|
192
|
+
getCovariance() {
|
|
193
|
+
this.assertFitted();
|
|
194
|
+
const p = this.nFeaturesIn_;
|
|
195
|
+
return new Matrix(castTo(this.covarianceF64(), this.dtype), p, p);
|
|
196
|
+
}
|
|
197
|
+
covarianceF64() {
|
|
198
|
+
const comp = this.components_;
|
|
199
|
+
const ev = this.explainedVariance_;
|
|
200
|
+
const nv = this.noiseVariance_;
|
|
201
|
+
const k = comp.rows;
|
|
202
|
+
const p = comp.cols;
|
|
203
|
+
// w = components (rows scaled by sqrt(ev) when whitening, like sklearn);
|
|
204
|
+
// scaled = diag(exp_var_diff) @ w, so cov = scaledᵀ @ w.
|
|
205
|
+
const w = new Float64Array(k * p);
|
|
206
|
+
const scaled = new Float64Array(k * p);
|
|
207
|
+
for (let c = 0; c < k; c++) {
|
|
208
|
+
const f = this.whitenOpt ? Math.sqrt(ev[c]) : 1;
|
|
209
|
+
const evd = ev[c] > nv ? ev[c] - nv : 0;
|
|
210
|
+
const off = c * p;
|
|
211
|
+
for (let j = 0; j < p; j++) {
|
|
212
|
+
const wv = comp.data[off + j] * f;
|
|
213
|
+
w[off + j] = wv;
|
|
214
|
+
scaled[off + j] = wv * evd;
|
|
215
|
+
}
|
|
216
|
+
}
|
|
217
|
+
const cov = new Float64Array(p * p);
|
|
218
|
+
for (let c = 0; c < k; c++) {
|
|
219
|
+
const offW = c * p;
|
|
220
|
+
for (let i = 0; i < p; i++) {
|
|
221
|
+
const sv = scaled[offW + i];
|
|
222
|
+
if (sv !== 0) {
|
|
223
|
+
const covOff = i * p;
|
|
224
|
+
for (let j = 0; j < p; j++) {
|
|
225
|
+
cov[covOff + j] += sv * w[offW + j];
|
|
226
|
+
}
|
|
227
|
+
}
|
|
228
|
+
}
|
|
229
|
+
}
|
|
230
|
+
for (let i = 0; i < p; i++) {
|
|
231
|
+
cov[i * p + i] += nv;
|
|
232
|
+
}
|
|
233
|
+
return cov;
|
|
234
|
+
}
|
|
235
|
+
/** Model precision via the matrix inversion lemma — sklearn's `get_precision`. */
|
|
236
|
+
getPrecision() {
|
|
237
|
+
this.assertFitted();
|
|
238
|
+
const p = this.nFeaturesIn_;
|
|
239
|
+
return new Matrix(castTo(this.precisionF64(), this.dtype), p, p);
|
|
240
|
+
}
|
|
241
|
+
precisionF64() {
|
|
242
|
+
const p = this.nFeaturesIn_;
|
|
243
|
+
const k = this.nComponents_;
|
|
244
|
+
const nv = this.noiseVariance_;
|
|
245
|
+
if (k === 0) {
|
|
246
|
+
const eye = new Float64Array(p * p);
|
|
247
|
+
for (let i = 0; i < p; i++) {
|
|
248
|
+
eye[i * p + i] = 1 / nv;
|
|
249
|
+
}
|
|
250
|
+
return eye;
|
|
251
|
+
}
|
|
252
|
+
if (nv === 0) {
|
|
253
|
+
return inverse(this.covarianceF64(), p);
|
|
254
|
+
}
|
|
255
|
+
const comp = this.components_;
|
|
256
|
+
const ev = this.explainedVariance_;
|
|
257
|
+
const w = new Float64Array(k * p);
|
|
258
|
+
for (let c = 0; c < k; c++) {
|
|
259
|
+
const f = this.whitenOpt ? Math.sqrt(ev[c]) : 1;
|
|
260
|
+
const off = c * p;
|
|
261
|
+
for (let j = 0; j < p; j++) {
|
|
262
|
+
w[off + j] = comp.data[off + j] * f;
|
|
263
|
+
}
|
|
264
|
+
}
|
|
265
|
+
// inner = w wᵀ / nv + diag(1 / (ev − nv))
|
|
266
|
+
const inner = new Float64Array(k * k);
|
|
267
|
+
for (let a = 0; a < k; a++) {
|
|
268
|
+
for (let b = 0; b < k; b++) {
|
|
269
|
+
let acc = 0;
|
|
270
|
+
const offA = a * p;
|
|
271
|
+
const offB = b * p;
|
|
272
|
+
for (let j = 0; j < p; j++) {
|
|
273
|
+
acc += w[offA + j] * w[offB + j];
|
|
274
|
+
}
|
|
275
|
+
inner[a * k + b] = acc / nv;
|
|
276
|
+
}
|
|
277
|
+
}
|
|
278
|
+
for (let c = 0; c < k; c++) {
|
|
279
|
+
const evd = ev[c] > nv ? ev[c] - nv : 0;
|
|
280
|
+
inner[c * k + c] += 1 / evd;
|
|
281
|
+
}
|
|
282
|
+
const innerInv = inverse(inner, k);
|
|
283
|
+
// precision = −(wᵀ innerInv w) / nv² + I/nv
|
|
284
|
+
const tmp = matmul(innerInv, w, k, k, p); // k×p
|
|
285
|
+
const prec = new Float64Array(p * p);
|
|
286
|
+
for (let c = 0; c < k; c++) {
|
|
287
|
+
const offW = c * p;
|
|
288
|
+
for (let i = 0; i < p; i++) {
|
|
289
|
+
const wv = w[offW + i];
|
|
290
|
+
if (wv !== 0) {
|
|
291
|
+
const off = i * p;
|
|
292
|
+
for (let j = 0; j < p; j++) {
|
|
293
|
+
prec[off + j] += wv * tmp[offW + j];
|
|
294
|
+
}
|
|
295
|
+
}
|
|
296
|
+
}
|
|
297
|
+
}
|
|
298
|
+
const nv2 = nv * nv;
|
|
299
|
+
for (let i = 0; i < p * p; i++) {
|
|
300
|
+
prec[i] /= -nv2;
|
|
301
|
+
}
|
|
302
|
+
for (let i = 0; i < p; i++) {
|
|
303
|
+
prec[i * p + i] += 1 / nv;
|
|
304
|
+
}
|
|
305
|
+
return prec;
|
|
306
|
+
}
|
|
307
|
+
/** Output feature names, e.g. ['pca0', 'pca1', …] — sklearn's `get_feature_names_out`. */
|
|
308
|
+
getFeatureNamesOut() {
|
|
309
|
+
this.assertFitted();
|
|
310
|
+
const prefix = this.estimatorName.toLowerCase();
|
|
311
|
+
const names = new Array(this.nComponents_);
|
|
312
|
+
for (let i = 0; i < this.nComponents_; i++) {
|
|
313
|
+
names[i] = `${prefix}${i}`;
|
|
314
|
+
}
|
|
315
|
+
return names;
|
|
316
|
+
}
|
|
317
|
+
// ------------------------------------------------------------------
|
|
318
|
+
// Model serialization
|
|
319
|
+
// ------------------------------------------------------------------
|
|
320
|
+
/**
|
|
321
|
+
* The shared fitted attributes as tight copies — a snapshot fully
|
|
322
|
+
* decoupled from live estimator state, safe to transfer or persist.
|
|
323
|
+
*/
|
|
324
|
+
exportBaseModel() {
|
|
325
|
+
this.assertFitted();
|
|
326
|
+
return {
|
|
327
|
+
formatVersion: PCA_MODEL_FORMAT_VERSION,
|
|
328
|
+
dtype: this.dtype,
|
|
329
|
+
nComponents: this.nComponents_,
|
|
330
|
+
nFeaturesIn: this.nFeaturesIn_,
|
|
331
|
+
whiten: this.whitenOpt,
|
|
332
|
+
noiseVariance: this.noiseVariance_,
|
|
333
|
+
components: this.components_.data.slice(),
|
|
334
|
+
mean: this.mean_.slice(),
|
|
335
|
+
explainedVariance: this.explainedVariance_.slice(),
|
|
336
|
+
explainedVarianceRatio: this.explainedVarianceRatio_.slice(),
|
|
337
|
+
singularValues: this.singularValues_.slice(),
|
|
338
|
+
};
|
|
339
|
+
}
|
|
340
|
+
/**
|
|
341
|
+
* Adopts a (validated) model's fields zero-copy and marks the estimator
|
|
342
|
+
* fitted. Callers own any defensive copying.
|
|
343
|
+
*/
|
|
344
|
+
importBaseModel(m) {
|
|
345
|
+
this.dtype = m.dtype;
|
|
346
|
+
this.whitenOpt = m.whiten;
|
|
347
|
+
this.nComponents_ = m.nComponents;
|
|
348
|
+
this.nFeaturesIn_ = m.nFeaturesIn;
|
|
349
|
+
this.noiseVariance_ = m.noiseVariance;
|
|
350
|
+
this.components_ = new Matrix(m.components, m.nComponents, m.nFeaturesIn);
|
|
351
|
+
this.mean_ = m.mean;
|
|
352
|
+
this.explainedVariance_ = m.explainedVariance;
|
|
353
|
+
this.explainedVarianceRatio_ = m.explainedVarianceRatio;
|
|
354
|
+
this.singularValues_ = m.singularValues;
|
|
355
|
+
this.fitted = true;
|
|
356
|
+
}
|
|
357
|
+
}
|
|
358
|
+
//# sourceMappingURL=base.js.map
|
package/dist/base.js.map
ADDED
|
@@ -0,0 +1 @@
|
|
|
1
|
+
{"version":3,"file":"base.js","sourceRoot":"","sources":["../src/base.ts"],"names":[],"mappings":"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"}
|
|
@@ -0,0 +1,86 @@
|
|
|
1
|
+
/**
|
|
2
|
+
* Incremental PCA matching `sklearn.decomposition.IncrementalPCA` (1.9):
|
|
3
|
+
* constant-memory fitting via `partialFit` batches (Ross et al. 2008), so the
|
|
4
|
+
* dataset never needs to reside in memory at once.
|
|
5
|
+
*/
|
|
6
|
+
import { BasePCA } from './base.js';
|
|
7
|
+
import { Matrix, type MatrixInput } from './matrix.js';
|
|
8
|
+
import { type IncrementalPCAModel } from './model.js';
|
|
9
|
+
import { type FitAsyncOptions, type FitObserver } from './progress.js';
|
|
10
|
+
export interface IncrementalPCAOptions {
|
|
11
|
+
/** Number of components to keep (integer ≥ 1), or null to use min(batch shape). */
|
|
12
|
+
nComponents?: number | null;
|
|
13
|
+
/** Scale transformed output to unit component-wise variance. */
|
|
14
|
+
whiten?: boolean;
|
|
15
|
+
/** When false, fit/partialFit may overwrite the input Matrix's data. */
|
|
16
|
+
copy?: boolean;
|
|
17
|
+
/** Rows per batch for fit(); null → 5 × nFeatures, like sklearn. */
|
|
18
|
+
batchSize?: number | null;
|
|
19
|
+
}
|
|
20
|
+
export declare class IncrementalPCA extends BasePCA {
|
|
21
|
+
protected readonly estimatorName: string;
|
|
22
|
+
private readonly opts;
|
|
23
|
+
private var_;
|
|
24
|
+
private meanF64_;
|
|
25
|
+
private nSamplesSeen_;
|
|
26
|
+
private batchSize_;
|
|
27
|
+
/** Mirrors sklearn's hasattr(self, 'components_') — set by fit() before batching. */
|
|
28
|
+
private hasComponentsAttr_;
|
|
29
|
+
constructor(options?: IncrementalPCAOptions);
|
|
30
|
+
/** Per-feature running variance (always float64, like sklearn) — `var_`. */
|
|
31
|
+
get variance(): Float64Array;
|
|
32
|
+
/** Samples processed so far — sklearn's `n_samples_seen_`. */
|
|
33
|
+
get nSamplesSeen(): number;
|
|
34
|
+
/** Batch size used by fit — sklearn's `batch_size_` (only set by fit()). */
|
|
35
|
+
get batchSize(): number;
|
|
36
|
+
/**
|
|
37
|
+
* Fit in minibatches of `batchSize` rows — sklearn's `IncrementalPCA.fit`.
|
|
38
|
+
* The first batch must have at least 2 samples.
|
|
39
|
+
*/
|
|
40
|
+
fit(X: MatrixInput, observer?: FitObserver): this;
|
|
41
|
+
/**
|
|
42
|
+
* Non-blocking fit: identical batching, time-sliced on the event loop.
|
|
43
|
+
* Results are bit-identical to the synchronous fit. An abort between
|
|
44
|
+
* batches keeps the completed-batch model (the estimator stays usable).
|
|
45
|
+
*/
|
|
46
|
+
fitAsync(X: MatrixInput, options?: FitAsyncOptions): Promise<this>;
|
|
47
|
+
/**
|
|
48
|
+
* @internal The batched fit as a step generator — one `yield` per batch
|
|
49
|
+
* is the suspension/abort checkpoint for the drivers. Mirrors sklearn's
|
|
50
|
+
* fit(): state is reset before validation, and each batch runs the
|
|
51
|
+
* unchanged partialFit update.
|
|
52
|
+
*/
|
|
53
|
+
_fitSteps(X: Matrix, observer?: FitObserver): Generator<void, void, void>;
|
|
54
|
+
/**
|
|
55
|
+
* Snapshot of the just-stored (batch-prefix) model, as fresh float64
|
|
56
|
+
* copies. Scores project the original input's rows seen so far; with
|
|
57
|
+
* `copy: false` the first batch's rows were destructively centered by
|
|
58
|
+
* the update (sklearn's contract), making those scores approximate.
|
|
59
|
+
*/
|
|
60
|
+
private batchSnapshot;
|
|
61
|
+
/**
|
|
62
|
+
* Incremental fit on one batch — sklearn's `partial_fit`. All of X is one
|
|
63
|
+
* batch. The first call must see at least 2 samples; later calls may
|
|
64
|
+
* stream batches of any size (including single rows).
|
|
65
|
+
*/
|
|
66
|
+
partialFit(X: MatrixInput): this;
|
|
67
|
+
/** Equivalent to fit(X).transform(X) (sklearn's TransformerMixin behavior). */
|
|
68
|
+
fitTransform(X: MatrixInput, observer?: FitObserver): Matrix;
|
|
69
|
+
/** Non-blocking fitTransform — fitAsync followed by transform. */
|
|
70
|
+
fitTransformAsync(X: MatrixInput, options?: FitAsyncOptions): Promise<Matrix>;
|
|
71
|
+
/**
|
|
72
|
+
* The fitted model as a plain structured-clone-friendly object. Includes
|
|
73
|
+
* the running statistics (`nSamplesSeen`, float64 mean/variance), so
|
|
74
|
+
* `partialFit` resumes bit-exactly after rehydration.
|
|
75
|
+
*/
|
|
76
|
+
toModel(): IncrementalPCAModel;
|
|
77
|
+
/**
|
|
78
|
+
* Rehydrates a fitted IncrementalPCA from `toModel()` output (validated
|
|
79
|
+
* first; arrays adopted without copying). Further `partialFit` calls
|
|
80
|
+
* continue the stream exactly where the exported estimator left off.
|
|
81
|
+
*/
|
|
82
|
+
static fromModel(model: IncrementalPCAModel): IncrementalPCA;
|
|
83
|
+
/** The whitening/update step; mutates `X`'s data (callers pass a copy unless copy=false). */
|
|
84
|
+
private partialFitCore;
|
|
85
|
+
}
|
|
86
|
+
//# sourceMappingURL=incremental-pca.d.ts.map
|
|
@@ -0,0 +1 @@
|
|
|
1
|
+
{"version":3,"file":"incremental-pca.d.ts","sourceRoot":"","sources":["../src/incremental-pca.ts"],"names":[],"mappings":"AAAA;;;;GAIG;AACH,OAAO,EAAE,OAAO,EAAU,MAAM,WAAW,CAAC;AAC5C,OAAO,EAAY,MAAM,EAAE,KAAK,WAAW,EAAE,MAAM,aAAa,CAAC;AACjE,OAAO,EAAoB,KAAK,mBAAmB,EAAE,MAAM,YAAY,CAAC;AAIxE,OAAO,EACL,KAAK,eAAe,EACpB,KAAK,WAAW,EAKjB,MAAM,eAAe,CAAC;AAKvB,MAAM,WAAW,qBAAqB;IACpC,mFAAmF;IACnF,WAAW,CAAC,EAAE,MAAM,GAAG,IAAI,CAAC;IAC5B,gEAAgE;IAChE,MAAM,CAAC,EAAE,OAAO,CAAC;IACjB,wEAAwE;IACxE,IAAI,CAAC,EAAE,OAAO,CAAC;IACf,oEAAoE;IACpE,SAAS,CAAC,EAAE,MAAM,GAAG,IAAI,CAAC;CAC3B;AA+CD,qBAAa,cAAe,SAAQ,OAAO;IACzC,mBAA4B,aAAa,EAAE,MAAM,CAAoB;IACrE,OAAO,CAAC,QAAQ,CAAC,IAAI,CAAkB;IAEvC,OAAO,CAAC,IAAI,CAA6B;IACzC,OAAO,CAAC,QAAQ,CAA6B;IAC7C,OAAO,CAAC,aAAa,CAAK;IAC1B,OAAO,CAAC,UAAU,CAAuB;IACzC,qFAAqF;IACrF,OAAO,CAAC,kBAAkB,CAAS;gBAEvB,OAAO,GAAE,qBAA0B;IAM/C,4EAA4E;IAC5E,IAAI,QAAQ,IAAI,YAAY,CAG3B;IAED,8DAA8D;IAC9D,IAAI,YAAY,IAAI,MAAM,CAGzB;IAED,4EAA4E;IAC5E,IAAI,SAAS,IAAI,MAAM,CAKtB;IAMD;;;OAGG;IACH,GAAG,CAAC,CAAC,EAAE,WAAW,EAAE,QAAQ,CAAC,EAAE,WAAW,GAAG,IAAI;IAKjD;;;;OAIG;IACG,QAAQ,CAAC,CAAC,EAAE,WAAW,EAAE,OAAO,GAAE,eAAoB,GAAG,OAAO,CAAC,IAAI,CAAC;IAQ5E;;;;;OAKG;IACF,SAAS,CAAC,CAAC,EAAE,MAAM,EAAE,QAAQ,CAAC,EAAE,WAAW,GAAG,SAAS,CAAC,IAAI,EAAE,IAAI,EAAE,IAAI,CAAC;IAwE1E;;;;;OAKG;IACH,OAAO,CAAC,aAAa;IA0BrB;;;;OAIG;IACH,UAAU,CAAC,CAAC,EAAE,WAAW,GAAG,IAAI;IAuBhC,+EAA+E;IAC/E,YAAY,CAAC,CAAC,EAAE,WAAW,EAAE,QAAQ,CAAC,EAAE,WAAW,GAAG,MAAM;IAK5D,kEAAkE;IAC5D,iBAAiB,CAAC,CAAC,EAAE,WAAW,EAAE,OAAO,GAAE,eAAoB,GAAG,OAAO,CAAC,MAAM,CAAC;IASvF;;;;OAIG;IACH,OAAO,IAAI,mBAAmB;IAiB9B;;;;OAIG;IACH,MAAM,CAAC,SAAS,CAAC,KAAK,EAAE,mBAAmB,GAAG,cAAc;IAa5D,6FAA6F;IAC7F,OAAO,CAAC,cAAc;CAmIvB"}
|