@seanhogg/builderforce-memory-engine 2026.10.1 → 2026.10.3
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/dist/evermind/adapt.d.ts +7 -0
- package/dist/evermind/adapt.d.ts.map +1 -1
- package/dist/evermind/adapt.js +1 -1
- package/dist/evermind/adapt.js.map +1 -1
- package/dist/evermind/delta_wire.d.ts +16 -1
- package/dist/evermind/delta_wire.d.ts.map +1 -1
- package/dist/evermind/delta_wire.js +22 -2
- package/dist/evermind/delta_wire.js.map +1 -1
- package/dist/evermind/index.d.ts +2 -2
- package/dist/evermind/index.d.ts.map +1 -1
- package/dist/evermind/index.js +1 -1
- package/dist/evermind/index.js.map +1 -1
- package/dist/evermind/merge.d.ts +5 -2
- package/dist/evermind/merge.d.ts.map +1 -1
- package/dist/evermind/merge.js +5 -2
- package/dist/evermind/merge.js.map +1 -1
- package/dist/evermind/ml_head.d.ts +28 -0
- package/dist/evermind/ml_head.d.ts.map +1 -0
- package/dist/evermind/ml_head.js +47 -0
- package/dist/evermind/ml_head.js.map +1 -0
- package/dist/evermind/package.d.ts +2 -2
- package/dist/evermind/package.d.ts.map +1 -1
- package/dist/evermind/package.js +1 -1
- package/dist/evermind/package.js.map +1 -1
- package/dist/experience/index.d.ts +2 -2
- package/dist/experience/index.d.ts.map +1 -1
- package/dist/experience/index.js.map +1 -1
- package/dist/experience/store.d.ts +19 -1
- package/dist/experience/store.d.ts.map +1 -1
- package/dist/experience/store.js +14 -2
- package/dist/experience/store.js.map +1 -1
- package/dist/experience/types.d.ts +18 -0
- package/dist/experience/types.d.ts.map +1 -1
- package/dist/experience/types.js.map +1 -1
- package/dist/index.d.ts +2 -2
- package/dist/index.d.ts.map +1 -1
- package/dist/index.js +1 -1
- package/dist/index.js.map +1 -1
- package/dist/kernels/weight_update.d.ts.map +1 -1
- package/dist/kernels/weight_update.js +12 -0
- package/dist/kernels/weight_update.js.map +1 -1
- package/dist/limbic/limbic_model.d.ts.map +1 -1
- package/dist/limbic/limbic_model.js +1 -3
- package/dist/limbic/limbic_model.js.map +1 -1
- package/dist/ml/classical/anomaly_composite.d.ts +32 -0
- package/dist/ml/classical/anomaly_composite.d.ts.map +1 -0
- package/dist/ml/classical/anomaly_composite.js +29 -0
- package/dist/ml/classical/anomaly_composite.js.map +1 -0
- package/dist/ml/classical/ewma.d.ts +7 -1
- package/dist/ml/classical/ewma.d.ts.map +1 -1
- package/dist/ml/classical/ewma.js +6 -4
- package/dist/ml/classical/ewma.js.map +1 -1
- package/dist/ml/classical/gbm.d.ts.map +1 -1
- package/dist/ml/classical/gbm.js +2 -1
- package/dist/ml/classical/gbm.js.map +1 -1
- package/dist/ml/classical/index.d.ts +6 -2
- package/dist/ml/classical/index.d.ts.map +1 -1
- package/dist/ml/classical/index.js +5 -1
- package/dist/ml/classical/index.js.map +1 -1
- package/dist/ml/classical/kmeans.d.ts.map +1 -1
- package/dist/ml/classical/kmeans.js +23 -4
- package/dist/ml/classical/kmeans.js.map +1 -1
- package/dist/ml/classical/knn.d.ts +15 -5
- package/dist/ml/classical/knn.d.ts.map +1 -1
- package/dist/ml/classical/knn.js +28 -7
- package/dist/ml/classical/knn.js.map +1 -1
- package/dist/ml/classical/logistic.d.ts +1 -9
- package/dist/ml/classical/logistic.d.ts.map +1 -1
- package/dist/ml/classical/logistic.js +17 -9
- package/dist/ml/classical/logistic.js.map +1 -1
- package/dist/ml/classical/naive_bayes.d.ts +5 -1
- package/dist/ml/classical/naive_bayes.d.ts.map +1 -1
- package/dist/ml/classical/naive_bayes.js +8 -3
- package/dist/ml/classical/naive_bayes.js.map +1 -1
- package/dist/ml/classical/robust_z.d.ts +15 -1
- package/dist/ml/classical/robust_z.d.ts.map +1 -1
- package/dist/ml/classical/robust_z.js +6 -1
- package/dist/ml/classical/robust_z.js.map +1 -1
- package/dist/ml/eval_loss.d.ts +15 -0
- package/dist/ml/eval_loss.d.ts.map +1 -0
- package/dist/ml/eval_loss.js +20 -0
- package/dist/ml/eval_loss.js.map +1 -0
- package/dist/ml/federate.d.ts +11 -25
- package/dist/ml/federate.d.ts.map +1 -1
- package/dist/ml/federate.js +15 -38
- package/dist/ml/federate.js.map +1 -1
- package/dist/ml/head_trainer.d.ts +16 -2
- package/dist/ml/head_trainer.d.ts.map +1 -1
- package/dist/ml/head_trainer.js +64 -27
- package/dist/ml/head_trainer.js.map +1 -1
- package/dist/ml/run.d.ts +11 -2
- package/dist/ml/run.d.ts.map +1 -1
- package/dist/ml/run.js +56 -17
- package/dist/ml/run.js.map +1 -1
- package/dist/ml/tasks/experience.d.ts +95 -13
- package/dist/ml/tasks/experience.d.ts.map +1 -1
- package/dist/ml/tasks/experience.js +172 -20
- package/dist/ml/tasks/experience.js.map +1 -1
- package/dist/ml/tasks/run_anomaly.d.ts +37 -19
- package/dist/ml/tasks/run_anomaly.d.ts.map +1 -1
- package/dist/ml/tasks/run_anomaly.js +50 -31
- package/dist/ml/tasks/run_anomaly.js.map +1 -1
- package/dist/ml/train.d.ts +8 -7
- package/dist/ml/train.d.ts.map +1 -1
- package/dist/ml/train.js +21 -30
- package/dist/ml/train.js.map +1 -1
- package/dist/ml/types.d.ts +6 -3
- package/dist/ml/types.d.ts.map +1 -1
- package/dist/ml/types.js +3 -2
- package/dist/ml/types.js.map +1 -1
- package/dist/optim/adamw.d.ts +11 -5
- package/dist/optim/adamw.d.ts.map +1 -1
- package/dist/optim/adamw.js +19 -4
- package/dist/optim/adamw.js.map +1 -1
- package/package.json +1 -1
- package/src/evermind/adapt.ts +8 -2
- package/src/evermind/delta_wire.ts +173 -148
- package/src/evermind/index.ts +36 -35
- package/src/evermind/merge.ts +10 -4
- package/src/evermind/ml_head.ts +63 -0
- package/src/evermind/package.ts +488 -488
- package/src/experience/index.ts +2 -1
- package/src/experience/store.ts +35 -3
- package/src/experience/types.ts +19 -0
- package/src/index.ts +2 -0
- package/src/kernels/weight_update.ts +12 -0
- package/src/limbic/limbic_model.ts +1 -4
- package/src/limbic/limbic_trainer.ts +91 -91
- package/src/ml/classical/anomaly_composite.ts +46 -0
- package/src/ml/classical/ewma.ts +8 -2
- package/src/ml/classical/gbm.ts +144 -143
- package/src/ml/classical/index.ts +8 -2
- package/src/ml/classical/kmeans.ts +22 -4
- package/src/ml/classical/knn.ts +31 -8
- package/src/ml/classical/logistic.ts +9 -9
- package/src/ml/classical/math.ts +93 -93
- package/src/ml/classical/naive_bayes.ts +10 -3
- package/src/ml/classical/robust_z.ts +21 -2
- package/src/ml/eval_loss.ts +27 -0
- package/src/ml/federate.ts +22 -52
- package/src/ml/head_trainer.ts +66 -48
- package/src/ml/registry.ts +44 -44
- package/src/ml/run.ts +57 -13
- package/src/ml/tasks/experience.ts +222 -23
- package/src/ml/tasks/run_anomaly.ts +62 -37
- package/src/ml/train.ts +34 -31
- package/src/ml/types.ts +135 -132
- package/src/optim/adamw.ts +21 -5
- package/src/training/cpu_ops.ts +141 -141
|
@@ -10,6 +10,7 @@ import { type LinearOptions } from "./linear.js";
|
|
|
10
10
|
import { type KMeansOptions } from "./kmeans.js";
|
|
11
11
|
import { type RobustZOptions } from "./robust_z.js";
|
|
12
12
|
import { type EwmaOptions } from "./ewma.js";
|
|
13
|
+
import { type AnomalyCompositeOptions } from "./anomaly_composite.js";
|
|
13
14
|
import { type IsolationForestOptions } from "./isolation_forest.js";
|
|
14
15
|
import { type GbmOptions } from "./gbm.js";
|
|
15
16
|
export { KnnModel, fitKnn } from "./knn.js";
|
|
@@ -22,10 +23,12 @@ export { LinearModel, fitLinear, solveLinearSystem } from "./linear.js";
|
|
|
22
23
|
export type { LinearOptions } from "./linear.js";
|
|
23
24
|
export { KMeansModel, fitKMeans } from "./kmeans.js";
|
|
24
25
|
export type { KMeansOptions } from "./kmeans.js";
|
|
25
|
-
export { RobustZModel, fitRobustZ, anomalyConfidence } from "./robust_z.js";
|
|
26
|
-
export type { RobustZOptions } from "./robust_z.js";
|
|
26
|
+
export { RobustZModel, fitRobustZ, anomalyConfidence, minScaleAt } from "./robust_z.js";
|
|
27
|
+
export type { RobustZOptions, MinScale } from "./robust_z.js";
|
|
27
28
|
export { EwmaModel, fitEwma } from "./ewma.js";
|
|
28
29
|
export type { EwmaOptions } from "./ewma.js";
|
|
30
|
+
export { AnomalyCompositeModel, fitAnomalyComposite } from "./anomaly_composite.js";
|
|
31
|
+
export type { AnomalyCompositeOptions } from "./anomaly_composite.js";
|
|
29
32
|
export { IsolationForestModel, fitIsolationForest } from "./isolation_forest.js";
|
|
30
33
|
export type { IsolationForestOptions } from "./isolation_forest.js";
|
|
31
34
|
export { GbmModel, fitGbm } from "./gbm.js";
|
|
@@ -40,6 +43,7 @@ export interface ClassicalOptions {
|
|
|
40
43
|
kmeans?: KMeansOptions;
|
|
41
44
|
"robust-z"?: RobustZOptions;
|
|
42
45
|
ewma?: EwmaOptions;
|
|
46
|
+
"anomaly-composite"?: AnomalyCompositeOptions;
|
|
43
47
|
"isolation-forest"?: IsolationForestOptions;
|
|
44
48
|
"gbm-small"?: GbmOptions;
|
|
45
49
|
}
|
|
@@ -1 +1 @@
|
|
|
1
|
-
{"version":3,"file":"index.d.ts","sourceRoot":"","sources":["../../../src/ml/classical/index.ts"],"names":[],"mappings":"AAAA;;;GAGG;AACH,OAAO,KAAK,EAAE,kBAAkB,EAAE,WAAW,EAAE,QAAQ,EAAE,MAAM,aAAa,CAAC;AAC7E,OAAO,EAAU,KAAK,UAAU,EAAE,MAAM,UAAU,CAAC;AACnD,OAAO,EAAiB,KAAK,iBAAiB,EAAE,MAAM,kBAAkB,CAAC;AACzE,OAAO,EAAe,KAAK,eAAe,EAAE,MAAM,eAAe,CAAC;AAClE,OAAO,EAAa,KAAK,aAAa,EAAE,MAAM,aAAa,CAAC;AAC5D,OAAO,EAAa,KAAK,aAAa,EAAE,MAAM,aAAa,CAAC;AAC5D,OAAO,EAAc,KAAK,cAAc,EAAE,MAAM,eAAe,CAAC;AAChE,OAAO,EAAW,KAAK,WAAW,EAAE,MAAM,WAAW,CAAC;AACtD,OAAO,EAAsB,KAAK,sBAAsB,EAAE,MAAM,uBAAuB,CAAC;AACxF,OAAO,EAAU,KAAK,UAAU,EAAE,MAAM,UAAU,CAAC;AAEnD,OAAO,EAAE,QAAQ,EAAE,MAAM,EAAE,MAAM,UAAU,CAAC;AAC5C,YAAY,EAAE,UAAU,EAAE,SAAS,EAAE,SAAS,EAAE,MAAM,UAAU,CAAC;AACjE,OAAO,EAAE,eAAe,EAAE,aAAa,EAAE,MAAM,kBAAkB,CAAC;AAClE,YAAY,EAAE,iBAAiB,EAAE,MAAM,kBAAkB,CAAC;AAC1D,OAAO,EAAE,aAAa,EAAE,WAAW,EAAE,MAAM,eAAe,CAAC;AAC3D,YAAY,EAAE,eAAe,EAAE,MAAM,eAAe,CAAC;AACrD,OAAO,EAAE,WAAW,EAAE,SAAS,EAAE,iBAAiB,EAAE,MAAM,aAAa,CAAC;AACxE,YAAY,EAAE,aAAa,EAAE,MAAM,aAAa,CAAC;AACjD,OAAO,EAAE,WAAW,EAAE,SAAS,EAAE,MAAM,aAAa,CAAC;AACrD,YAAY,EAAE,aAAa,EAAE,MAAM,aAAa,CAAC;AACjD,OAAO,EAAE,YAAY,EAAE,UAAU,EAAE,iBAAiB,EAAE,MAAM,eAAe,CAAC;
|
|
1
|
+
{"version":3,"file":"index.d.ts","sourceRoot":"","sources":["../../../src/ml/classical/index.ts"],"names":[],"mappings":"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"}
|
|
@@ -5,6 +5,7 @@ import { fitLinear } from "./linear.js";
|
|
|
5
5
|
import { fitKMeans } from "./kmeans.js";
|
|
6
6
|
import { fitRobustZ } from "./robust_z.js";
|
|
7
7
|
import { fitEwma } from "./ewma.js";
|
|
8
|
+
import { fitAnomalyComposite } from "./anomaly_composite.js";
|
|
8
9
|
import { fitIsolationForest } from "./isolation_forest.js";
|
|
9
10
|
import { fitGbm } from "./gbm.js";
|
|
10
11
|
export { KnnModel, fitKnn } from "./knn.js";
|
|
@@ -12,8 +13,9 @@ export { NaiveBayesModel, fitNaiveBayes } from "./naive_bayes.js";
|
|
|
12
13
|
export { LogisticModel, fitLogistic } from "./logistic.js";
|
|
13
14
|
export { LinearModel, fitLinear, solveLinearSystem } from "./linear.js";
|
|
14
15
|
export { KMeansModel, fitKMeans } from "./kmeans.js";
|
|
15
|
-
export { RobustZModel, fitRobustZ, anomalyConfidence } from "./robust_z.js";
|
|
16
|
+
export { RobustZModel, fitRobustZ, anomalyConfidence, minScaleAt } from "./robust_z.js";
|
|
16
17
|
export { EwmaModel, fitEwma } from "./ewma.js";
|
|
18
|
+
export { AnomalyCompositeModel, fitAnomalyComposite } from "./anomaly_composite.js";
|
|
17
19
|
export { IsolationForestModel, fitIsolationForest } from "./isolation_forest.js";
|
|
18
20
|
export { GbmModel, fitGbm } from "./gbm.js";
|
|
19
21
|
export { cosine, dot } from "./math.js";
|
|
@@ -36,6 +38,8 @@ export function fitClassical(algorithm, samples, opts = {}) {
|
|
|
36
38
|
return fitRobustZ(samples, opts["robust-z"]);
|
|
37
39
|
case "ewma":
|
|
38
40
|
return fitEwma(samples, opts.ewma);
|
|
41
|
+
case "anomaly-composite":
|
|
42
|
+
return fitAnomalyComposite(samples, opts["anomaly-composite"]);
|
|
39
43
|
case "isolation-forest":
|
|
40
44
|
return fitIsolationForest(samples, opts["isolation-forest"]);
|
|
41
45
|
case "gbm-small":
|
|
@@ -1 +1 @@
|
|
|
1
|
-
{"version":3,"file":"index.js","sourceRoot":"","sources":["../../../src/ml/classical/index.ts"],"names":[],"mappings":"AAKA,OAAO,EAAE,MAAM,EAAmB,MAAM,UAAU,CAAC;AACnD,OAAO,EAAE,aAAa,EAA0B,MAAM,kBAAkB,CAAC;AACzE,OAAO,EAAE,WAAW,EAAwB,MAAM,eAAe,CAAC;AAClE,OAAO,EAAE,SAAS,EAAsB,MAAM,aAAa,CAAC;AAC5D,OAAO,EAAE,SAAS,EAAsB,MAAM,aAAa,CAAC;AAC5D,OAAO,EAAE,UAAU,EAAuB,MAAM,eAAe,CAAC;AAChE,OAAO,EAAE,OAAO,EAAoB,MAAM,WAAW,CAAC;AACtD,OAAO,EAAE,kBAAkB,EAA+B,MAAM,uBAAuB,CAAC;AACxF,OAAO,EAAE,MAAM,EAAmB,MAAM,UAAU,CAAC;AAEnD,OAAO,EAAE,QAAQ,EAAE,MAAM,EAAE,MAAM,UAAU,CAAC;AAE5C,OAAO,EAAE,eAAe,EAAE,aAAa,EAAE,MAAM,kBAAkB,CAAC;AAElE,OAAO,EAAE,aAAa,EAAE,WAAW,EAAE,MAAM,eAAe,CAAC;AAE3D,OAAO,EAAE,WAAW,EAAE,SAAS,EAAE,iBAAiB,EAAE,MAAM,aAAa,CAAC;AAExE,OAAO,EAAE,WAAW,EAAE,SAAS,EAAE,MAAM,aAAa,CAAC;AAErD,OAAO,EAAE,YAAY,EAAE,UAAU,EAAE,iBAAiB,EAAE,MAAM,eAAe,CAAC;
|
|
1
|
+
{"version":3,"file":"index.js","sourceRoot":"","sources":["../../../src/ml/classical/index.ts"],"names":[],"mappings":"AAKA,OAAO,EAAE,MAAM,EAAmB,MAAM,UAAU,CAAC;AACnD,OAAO,EAAE,aAAa,EAA0B,MAAM,kBAAkB,CAAC;AACzE,OAAO,EAAE,WAAW,EAAwB,MAAM,eAAe,CAAC;AAClE,OAAO,EAAE,SAAS,EAAsB,MAAM,aAAa,CAAC;AAC5D,OAAO,EAAE,SAAS,EAAsB,MAAM,aAAa,CAAC;AAC5D,OAAO,EAAE,UAAU,EAAuB,MAAM,eAAe,CAAC;AAChE,OAAO,EAAE,OAAO,EAAoB,MAAM,WAAW,CAAC;AACtD,OAAO,EAAE,mBAAmB,EAAgC,MAAM,wBAAwB,CAAC;AAC3F,OAAO,EAAE,kBAAkB,EAA+B,MAAM,uBAAuB,CAAC;AACxF,OAAO,EAAE,MAAM,EAAmB,MAAM,UAAU,CAAC;AAEnD,OAAO,EAAE,QAAQ,EAAE,MAAM,EAAE,MAAM,UAAU,CAAC;AAE5C,OAAO,EAAE,eAAe,EAAE,aAAa,EAAE,MAAM,kBAAkB,CAAC;AAElE,OAAO,EAAE,aAAa,EAAE,WAAW,EAAE,MAAM,eAAe,CAAC;AAE3D,OAAO,EAAE,WAAW,EAAE,SAAS,EAAE,iBAAiB,EAAE,MAAM,aAAa,CAAC;AAExE,OAAO,EAAE,WAAW,EAAE,SAAS,EAAE,MAAM,aAAa,CAAC;AAErD,OAAO,EAAE,YAAY,EAAE,UAAU,EAAE,iBAAiB,EAAE,UAAU,EAAE,MAAM,eAAe,CAAC;AAExF,OAAO,EAAE,SAAS,EAAE,OAAO,EAAE,MAAM,WAAW,CAAC;AAE/C,OAAO,EAAE,qBAAqB,EAAE,mBAAmB,EAAE,MAAM,wBAAwB,CAAC;AAEpF,OAAO,EAAE,oBAAoB,EAAE,kBAAkB,EAAE,MAAM,uBAAuB,CAAC;AAEjF,OAAO,EAAE,QAAQ,EAAE,MAAM,EAAE,MAAM,UAAU,CAAC;AAE5C,OAAO,EAAE,MAAM,EAAE,GAAG,EAAE,MAAM,WAAW,CAAC;AAgBxC,wEAAwE;AACxE,MAAM,UAAU,YAAY,CAC1B,SAA6B,EAC7B,OAA4B,EAC5B,OAAyB,EAAE;IAE3B,IAAI,OAAO,CAAC,MAAM,KAAK,CAAC;QAAE,MAAM,IAAI,KAAK,CAAC,gBAAgB,SAAS,eAAe,CAAC,CAAC;IACpF,QAAQ,SAAS,EAAE,CAAC;QAClB,KAAK,KAAK;YACR,OAAO,MAAM,CAAC,OAAO,EAAE,IAAI,CAAC,GAAG,CAAC,CAAC;QACnC,KAAK,aAAa;YAChB,OAAO,aAAa,CAAC,OAAO,EAAE,IAAI,CAAC,aAAa,CAAC,CAAC,CAAC;QACrD,KAAK,UAAU;YACb,OAAO,WAAW,CAAC,OAAO,EAAE,IAAI,CAAC,QAAQ,CAAC,CAAC;QAC7C,KAAK,QAAQ;YACX,OAAO,SAAS,CAAC,OAAO,EAAE,IAAI,CAAC,MAAM,CAAC,CAAC;QACzC,KAAK,QAAQ;YACX,OAAO,SAAS,CAAC,OAAO,EAAE,IAAI,CAAC,MAAM,CAAC,CAAC;QACzC,KAAK,UAAU;YACb,OAAO,UAAU,CAAC,OAAO,EAAE,IAAI,CAAC,UAAU,CAAC,CAAC,CAAC;QAC/C,KAAK,MAAM;YACT,OAAO,OAAO,CAAC,OAAO,EAAE,IAAI,CAAC,IAAI,CAAC,CAAC;QACrC,KAAK,mBAAmB;YACtB,OAAO,mBAAmB,CAAC,OAAO,EAAE,IAAI,CAAC,mBAAmB,CAAC,CAAC,CAAC;QACjE,KAAK,kBAAkB;YACrB,OAAO,kBAAkB,CAAC,OAAO,EAAE,IAAI,CAAC,kBAAkB,CAAC,CAAC,CAAC;QAC/D,KAAK,WAAW;YACd,OAAO,MAAM,CAAC,OAAO,EAAE,IAAI,CAAC,WAAW,CAAC,CAAC,CAAC;IAC9C,CAAC;AACH,CAAC"}
|
|
@@ -1 +1 @@
|
|
|
1
|
-
{"version":3,"file":"kmeans.d.ts","sourceRoot":"","sources":["../../../src/ml/classical/kmeans.ts"],"names":[],"mappings":"AAAA;;;;;GAKG;AACH,OAAO,KAAK,EAAE,YAAY,EAAE,WAAW,EAAE,QAAQ,EAAE,MAAM,aAAa,CAAC;AACvE,OAAO,EAA8C,KAAK,GAAG,EAAE,MAAM,WAAW,CAAC;AAEjF,MAAM,WAAW,aAAa;IAC5B,mDAAmD;IACnD,CAAC,CAAC,EAAE,MAAM,CAAC;IACX,aAAa,CAAC,EAAE,MAAM,CAAC;IACvB,IAAI,CAAC,EAAE,MAAM,CAAC;CACf;AAED,qBAAa,WAAY,YAAW,WAAW;IAE3C,QAAQ,CAAC,SAAS,EAAE,YAAY,EAAE;IAClC,uEAAuE;IACvE,QAAQ,CAAC,OAAO,EAAE,MAAM;gBAFf,SAAS,EAAE,YAAY,EAAE;IAClC,uEAAuE;IAC9D,OAAO,EAAE,MAAM;IAG1B,qEAAqE;IACrE,MAAM,CAAC,CAAC,EAAE,GAAG,GAAG;QAAE,OAAO,EAAE,MAAM,CAAC;QAAC,EAAE,EAAE,MAAM,CAAC;QAAC,EAAE,EAAE,MAAM,CAAA;KAAE;IAe3D,OAAO,CAAC,CAAC,EAAE,YAAY,GAAG,YAAY;CAKvC;AAED,wBAAgB,SAAS,CAAC,OAAO,EAAE,SAAS,QAAQ,EAAE,EAAE,IAAI,GAAE,aAAkB,GAAG,WAAW,
|
|
1
|
+
{"version":3,"file":"kmeans.d.ts","sourceRoot":"","sources":["../../../src/ml/classical/kmeans.ts"],"names":[],"mappings":"AAAA;;;;;GAKG;AACH,OAAO,KAAK,EAAE,YAAY,EAAE,WAAW,EAAE,QAAQ,EAAE,MAAM,aAAa,CAAC;AACvE,OAAO,EAA8C,KAAK,GAAG,EAAE,MAAM,WAAW,CAAC;AAEjF,MAAM,WAAW,aAAa;IAC5B,mDAAmD;IACnD,CAAC,CAAC,EAAE,MAAM,CAAC;IACX,aAAa,CAAC,EAAE,MAAM,CAAC;IACvB,IAAI,CAAC,EAAE,MAAM,CAAC;CACf;AAED,qBAAa,WAAY,YAAW,WAAW;IAE3C,QAAQ,CAAC,SAAS,EAAE,YAAY,EAAE;IAClC,uEAAuE;IACvE,QAAQ,CAAC,OAAO,EAAE,MAAM;gBAFf,SAAS,EAAE,YAAY,EAAE;IAClC,uEAAuE;IAC9D,OAAO,EAAE,MAAM;IAG1B,qEAAqE;IACrE,MAAM,CAAC,CAAC,EAAE,GAAG,GAAG;QAAE,OAAO,EAAE,MAAM,CAAC;QAAC,EAAE,EAAE,MAAM,CAAC;QAAC,EAAE,EAAE,MAAM,CAAA;KAAE;IAe3D,OAAO,CAAC,CAAC,EAAE,YAAY,GAAG,YAAY;CAKvC;AAED,wBAAgB,SAAS,CAAC,OAAO,EAAE,SAAS,QAAQ,EAAE,EAAE,IAAI,GAAE,aAAkB,GAAG,WAAW,CAyE7F"}
|
|
@@ -43,12 +43,20 @@ export function fitKMeans(samples, opts = {}) {
|
|
|
43
43
|
const total = nearest.reduce((a, b) => a + b, 0);
|
|
44
44
|
let pick = 0;
|
|
45
45
|
if (total > 0) {
|
|
46
|
+
// Walk only points with weight: a zero-distance point (already a centroid) can
|
|
47
|
+
// never be picked, even when rnd() returns 0 and r starts at 0.
|
|
46
48
|
let r = rnd() * total;
|
|
47
|
-
|
|
49
|
+
let last = -1;
|
|
50
|
+
for (pick = 0; pick < X.length; pick++) {
|
|
51
|
+
if (!(nearest[pick] > 0))
|
|
52
|
+
continue;
|
|
53
|
+
last = pick;
|
|
48
54
|
r -= nearest[pick];
|
|
49
55
|
if (r <= 0)
|
|
50
56
|
break;
|
|
51
57
|
}
|
|
58
|
+
if (pick >= X.length)
|
|
59
|
+
pick = last; // float round-off left r > 0: take the last weighted point
|
|
52
60
|
}
|
|
53
61
|
else {
|
|
54
62
|
pick = centroids.length; // every point coincides with a centroid; take the next index
|
|
@@ -58,8 +66,8 @@ export function fitKMeans(samples, opts = {}) {
|
|
|
58
66
|
X.forEach((x, i) => (nearest[i] = Math.min(nearest[i], squaredDistance(x, c))));
|
|
59
67
|
}
|
|
60
68
|
const assign = new Int32Array(X.length).fill(-1);
|
|
61
|
-
|
|
62
|
-
|
|
69
|
+
/** Assign every point to its nearest current centroid; true when any assignment moved. */
|
|
70
|
+
const reassign = () => {
|
|
63
71
|
let changed = false;
|
|
64
72
|
const model = new KMeansModel(centroids, 0);
|
|
65
73
|
X.forEach((x, i) => {
|
|
@@ -69,8 +77,15 @@ export function fitKMeans(samples, opts = {}) {
|
|
|
69
77
|
changed = true;
|
|
70
78
|
}
|
|
71
79
|
});
|
|
72
|
-
|
|
80
|
+
return changed;
|
|
81
|
+
};
|
|
82
|
+
const maxIt = opts.maxIterations ?? 100;
|
|
83
|
+
let converged = false;
|
|
84
|
+
for (let it = 0; it < maxIt; it++) {
|
|
85
|
+
if (!reassign()) {
|
|
86
|
+
converged = true;
|
|
73
87
|
break;
|
|
88
|
+
}
|
|
74
89
|
const sums = centroids.map(() => new Float64Array(d));
|
|
75
90
|
const counts = new Array(k).fill(0);
|
|
76
91
|
X.forEach((x, i) => {
|
|
@@ -86,6 +101,10 @@ export function fitKMeans(samples, opts = {}) {
|
|
|
86
101
|
c[j] = sums[ci][j] / counts[ci];
|
|
87
102
|
});
|
|
88
103
|
}
|
|
104
|
+
// Stopped on maxIterations: the centroids moved after the last assignment, so
|
|
105
|
+
// assign once more — inertia (and the stored model) must describe the same state.
|
|
106
|
+
if (!converged)
|
|
107
|
+
reassign();
|
|
89
108
|
let inertia = 0;
|
|
90
109
|
X.forEach((x, i) => (inertia += squaredDistance(x, centroids[assign[i]])));
|
|
91
110
|
return new KMeansModel(centroids, inertia);
|
|
@@ -1 +1 @@
|
|
|
1
|
-
{"version":3,"file":"kmeans.js","sourceRoot":"","sources":["../../../src/ml/classical/kmeans.ts"],"names":[],"mappings":"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
|
|
1
|
+
{"version":3,"file":"kmeans.js","sourceRoot":"","sources":["../../../src/ml/classical/kmeans.ts"],"names":[],"mappings":"AAOA,OAAO,EAAE,UAAU,EAAE,aAAa,EAAE,eAAe,EAAY,MAAM,WAAW,CAAC;AASjF,MAAM,OAAO,WAAW;IAEX;IAEA;IAHX,YACW,SAAyB;IAClC,uEAAuE;IAC9D,OAAe;QAFf,cAAS,GAAT,SAAS,CAAgB;QAEzB,YAAO,GAAP,OAAO,CAAQ;IACvB,CAAC;IAEJ,qEAAqE;IACrE,MAAM,CAAC,CAAM;QACX,IAAI,OAAO,GAAG,CAAC,CAAC;QAChB,IAAI,EAAE,GAAG,QAAQ,CAAC;QAClB,IAAI,EAAE,GAAG,QAAQ,CAAC;QAClB,IAAI,CAAC,SAAS,CAAC,OAAO,CAAC,CAAC,CAAC,EAAE,CAAC,EAAE,EAAE;YAC9B,MAAM,CAAC,GAAG,eAAe,CAAC,CAAC,EAAE,CAAC,CAAC,CAAC;YAChC,IAAI,CAAC,GAAG,EAAE,EAAE,CAAC;gBACX,EAAE,GAAG,EAAE,CAAC;gBACR,EAAE,GAAG,CAAC,CAAC;gBACP,OAAO,GAAG,CAAC,CAAC;YACd,CAAC;iBAAM,IAAI,CAAC,GAAG,EAAE;gBAAE,EAAE,GAAG,CAAC,CAAC;QAC5B,CAAC,CAAC,CAAC;QACH,OAAO,EAAE,OAAO,EAAE,EAAE,EAAE,EAAE,EAAE,CAAC;IAC7B,CAAC;IAED,OAAO,CAAC,CAAe;QACrB,MAAM,EAAE,OAAO,EAAE,EAAE,EAAE,EAAE,EAAE,GAAG,IAAI,CAAC,MAAM,CAAC,CAAC,CAAC,CAAC;QAC3C,MAAM,UAAU,GAAG,MAAM,CAAC,QAAQ,CAAC,EAAE,CAAC,IAAI,EAAE,GAAG,CAAC,CAAC,CAAC,CAAC,CAAC,GAAG,IAAI,CAAC,IAAI,CAAC,EAAE,CAAC,GAAG,IAAI,CAAC,IAAI,CAAC,EAAE,CAAC,CAAC,CAAC,CAAC,CAAC,CAAC;QACzF,OAAO,EAAE,MAAM,EAAE,CAAC,OAAO,CAAC,EAAE,UAAU,EAAE,IAAI,CAAC,GAAG,CAAC,CAAC,EAAE,IAAI,CAAC,GAAG,CAAC,CAAC,EAAE,UAAU,CAAC,CAAC,EAAE,CAAC;IACjF,CAAC;CACF;AAED,MAAM,UAAU,SAAS,CAAC,OAA4B,EAAE,OAAsB,EAAE;IAC9E,MAAM,CAAC,GAAG,OAAO,CAAC,GAAG,CAAC,CAAC,CAAC,EAAE,EAAE,CAAC,CAAC,CAAC,CAAC,CAAC,CAAC;IAClC,MAAM,CAAC,GAAG,UAAU,CAAC,CAAC,CAAC,CAAC;IACxB,MAAM,CAAC,GAAG,IAAI,CAAC,GAAG,CAAC,CAAC,CAAC,MAAM,EAAE,IAAI,CAAC,GAAG,CAAC,CAAC,EAAE,IAAI,CAAC,CAAC,IAAI,IAAI,CAAC,KAAK,CAAC,IAAI,CAAC,IAAI,CAAC,CAAC,CAAC,MAAM,GAAG,CAAC,CAAC,CAAC,CAAC,CAAC,CAAC;IACzF,MAAM,GAAG,GAAG,aAAa,CAAC,IAAI,CAAC,IAAI,IAAI,MAAM,CAAC,CAAC;IAE/C,8FAA8F;IAC9F,MAAM,SAAS,GAAmB,CAAC,YAAY,CAAC,IAAI,CAAC,CAAC,CAAC,IAAI,CAAC,KAAK,CAAC,GAAG,EAAE,GAAG,CAAC,CAAC,MAAM,CAAC,CAAE,CAAC,CAAC,CAAC;IACxF,MAAM,OAAO,GAAG,CAAC,CAAC,GAAG,CAAC,CAAC,CAAC,EAAE,EAAE,CAAC,eAAe,CAAC,CAAC,EAAE,SAAS,CAAC,CAAC,CAAE,CAAC,CAAC,CAAC;IAChE,OAAO,SAAS,CAAC,MAAM,GAAG,CAAC,EAAE,CAAC;QAC5B,MAAM,KAAK,GAAG,OAAO,CAAC,MAAM,CAAC,CAAC,CAAC,EAAE,CAAC,EAAE,EAAE,CAAC,CAAC,GAAG,CAAC,EAAE,CAAC,CAAC,CAAC;QACjD,IAAI,IAAI,GAAG,CAAC,CAAC;QACb,IAAI,KAAK,GAAG,CAAC,EAAE,CAAC;YACd,+EAA+E;YAC/E,gEAAgE;YAChE,IAAI,CAAC,GAAG,GAAG,EAAE,GAAG,KAAK,CAAC;YACtB,IAAI,IAAI,GAAG,CAAC,CAAC,CAAC;YACd,KAAK,IAAI,GAAG,CAAC,EAAE,IAAI,GAAG,CAAC,CAAC,MAAM,EAAE,IAAI,EAAE,EAAE,CAAC;gBACvC,IAAI,CAAC,CAAC,OAAO,CAAC,IAAI,CAAE,GAAG,CAAC,CAAC;oBAAE,SAAS;gBACpC,IAAI,GAAG,IAAI,CAAC;gBACZ,CAAC,IAAI,OAAO,CAAC,IAAI,CAAE,CAAC;gBACpB,IAAI,CAAC,IAAI,CAAC;oBAAE,MAAM;YACpB,CAAC;YACD,IAAI,IAAI,IAAI,CAAC,CAAC,MAAM;gBAAE,IAAI,GAAG,IAAI,CAAC,CAAC,2DAA2D;QAChG,CAAC;aAAM,CAAC;YACN,IAAI,GAAG,SAAS,CAAC,MAAM,CAAC,CAAC,6DAA6D;QACxF,CAAC;QACD,MAAM,CAAC,GAAG,YAAY,CAAC,IAAI,CAAC,CAAC,CAAC,IAAI,CAAE,CAAC,CAAC;QACtC,SAAS,CAAC,IAAI,CAAC,CAAC,CAAC,CAAC;QAClB,CAAC,CAAC,OAAO,CAAC,CAAC,CAAC,EAAE,CAAC,EAAE,EAAE,CAAC,CAAC,OAAO,CAAC,CAAC,CAAC,GAAG,IAAI,CAAC,GAAG,CAAC,OAAO,CAAC,CAAC,CAAE,EAAE,eAAe,CAAC,CAAC,EAAE,CAAC,CAAC,CAAC,CAAC,CAAC,CAAC;IACnF,CAAC;IAED,MAAM,MAAM,GAAG,IAAI,UAAU,CAAC,CAAC,CAAC,MAAM,CAAC,CAAC,IAAI,CAAC,CAAC,CAAC,CAAC,CAAC;IACjD,0FAA0F;IAC1F,MAAM,QAAQ,GAAG,GAAY,EAAE;QAC7B,IAAI,OAAO,GAAG,KAAK,CAAC;QACpB,MAAM,KAAK,GAAG,IAAI,WAAW,CAAC,SAAS,EAAE,CAAC,CAAC,CAAC;QAC5C,CAAC,CAAC,OAAO,CAAC,CAAC,CAAC,EAAE,CAAC,EAAE,EAAE;YACjB,MAAM,CAAC,GAAG,KAAK,CAAC,MAAM,CAAC,CAAC,CAAC,CAAC,OAAO,CAAC;YAClC,IAAI,MAAM,CAAC,CAAC,CAAC,KAAK,CAAC,EAAE,CAAC;gBACpB,MAAM,CAAC,CAAC,CAAC,GAAG,CAAC,CAAC;gBACd,OAAO,GAAG,IAAI,CAAC;YACjB,CAAC;QACH,CAAC,CAAC,CAAC;QACH,OAAO,OAAO,CAAC;IACjB,CAAC,CAAC;IACF,MAAM,KAAK,GAAG,IAAI,CAAC,aAAa,IAAI,GAAG,CAAC;IACxC,IAAI,SAAS,GAAG,KAAK,CAAC;IACtB,KAAK,IAAI,EAAE,GAAG,CAAC,EAAE,EAAE,GAAG,KAAK,EAAE,EAAE,EAAE,EAAE,CAAC;QAClC,IAAI,CAAC,QAAQ,EAAE,EAAE,CAAC;YAChB,SAAS,GAAG,IAAI,CAAC;YACjB,MAAM;QACR,CAAC;QACD,MAAM,IAAI,GAAG,SAAS,CAAC,GAAG,CAAC,GAAG,EAAE,CAAC,IAAI,YAAY,CAAC,CAAC,CAAC,CAAC,CAAC;QACtD,MAAM,MAAM,GAAG,IAAI,KAAK,CAAS,CAAC,CAAC,CAAC,IAAI,CAAC,CAAC,CAAC,CAAC;QAC5C,CAAC,CAAC,OAAO,CAAC,CAAC,CAAC,EAAE,CAAC,EAAE,EAAE;YACjB,MAAM,CAAC,GAAG,MAAM,CAAC,CAAC,CAAE,CAAC;YACrB,MAAM,CAAC,CAAC,CAAC,GAAG,MAAM,CAAC,CAAC,CAAE,GAAG,CAAC,CAAC;YAC3B,KAAK,IAAI,CAAC,GAAG,CAAC,EAAE,CAAC,GAAG,CAAC,EAAE,CAAC,EAAE;gBAAE,IAAI,CAAC,CAAC,CAAE,CAAC,CAAC,CAAC,GAAG,IAAI,CAAC,CAAC,CAAE,CAAC,CAAC,CAAE,GAAG,CAAC,CAAC,CAAC,CAAE,CAAC;QACjE,CAAC,CAAC,CAAC;QACH,kDAAkD;QAClD,SAAS,CAAC,OAAO,CAAC,CAAC,CAAC,EAAE,EAAE,EAAE,EAAE;YAC1B,IAAI,MAAM,CAAC,EAAE,CAAE,GAAG,CAAC;gBAAE,KAAK,IAAI,CAAC,GAAG,CAAC,EAAE,CAAC,GAAG,CAAC,EAAE,CAAC,EAAE;oBAAE,CAAC,CAAC,CAAC,CAAC,GAAG,IAAI,CAAC,EAAE,CAAE,CAAC,CAAC,CAAE,GAAG,MAAM,CAAC,EAAE,CAAE,CAAC;QACtF,CAAC,CAAC,CAAC;IACL,CAAC;IAED,8EAA8E;IAC9E,kFAAkF;IAClF,IAAI,CAAC,SAAS;QAAE,QAAQ,EAAE,CAAC;IAE3B,IAAI,OAAO,GAAG,CAAC,CAAC;IAChB,CAAC,CAAC,OAAO,CAAC,CAAC,CAAC,EAAE,CAAC,EAAE,EAAE,CAAC,CAAC,OAAO,IAAI,eAAe,CAAC,CAAC,EAAE,SAAS,CAAC,MAAM,CAAC,CAAC,CAAE,CAAE,CAAC,CAAC,CAAC,CAAC;IAC7E,OAAO,IAAI,WAAW,CAAC,SAAS,EAAE,OAAO,CAAC,CAAC;AAC7C,CAAC"}
|
|
@@ -9,7 +9,10 @@ import type { MlPrediction, MlPredictor, MlSample } from "../types.js";
|
|
|
9
9
|
import { type Vec } from "./math.js";
|
|
10
10
|
export type KnnMetric = "cosine" | "euclidean";
|
|
11
11
|
export interface KnnOptions {
|
|
12
|
-
/**
|
|
12
|
+
/**
|
|
13
|
+
* Neighbours that vote. Default min(5, ⌊√n⌋), at least 1: with a small set a fixed
|
|
14
|
+
* 5 makes EVERY point vote, and the answer collapses to the class prior.
|
|
15
|
+
*/
|
|
13
16
|
k?: number;
|
|
14
17
|
metric?: KnnMetric;
|
|
15
18
|
/** Number of classes (default: inferred from the labels, at least 2). */
|
|
@@ -33,15 +36,22 @@ export declare class KnnModel implements MlPredictor {
|
|
|
33
36
|
/** Add one labelled point (online — the index never needs a refit). */
|
|
34
37
|
add(x: Vec, y?: number, weight?: number): void;
|
|
35
38
|
similarity(a: Vec, b: Vec): number;
|
|
36
|
-
/** The `k` closest points, closest first. */
|
|
37
|
-
neighbours(x: Vec, k?: number): Neighbour[];
|
|
39
|
+
/** The `k` closest points, closest first — never the point at `exclude` (leave-one-out). */
|
|
40
|
+
neighbours(x: Vec, k?: number, exclude?: number): Neighbour[];
|
|
38
41
|
/** The single closest point, or null when the index is empty. */
|
|
39
42
|
nearest(x: Vec): Neighbour | null;
|
|
40
43
|
/** The label of an indexed point. */
|
|
41
44
|
labelOf(index: number): number;
|
|
42
|
-
/**
|
|
43
|
-
|
|
45
|
+
/**
|
|
46
|
+
* Class probabilities from similarity-weighted votes (uniform when empty). With
|
|
47
|
+
* `exclude`, the point at that index does not vote — the leave-one-out score of a
|
|
48
|
+
* point that is itself in the index, which would otherwise vote for itself at
|
|
49
|
+
* similarity 1.
|
|
50
|
+
*/
|
|
51
|
+
proba(x: Vec, exclude?: number): number[];
|
|
44
52
|
predict(x: Float32Array): MlPrediction;
|
|
53
|
+
/** This index as a predictor that leaves the point at `index` out of every vote. */
|
|
54
|
+
excluding(index: number): MlPredictor;
|
|
45
55
|
}
|
|
46
56
|
/** Index `samples` for kNN classification. */
|
|
47
57
|
export declare function fitKnn(samples: readonly MlSample[], opts?: KnnOptions): KnnModel;
|
|
@@ -1 +1 @@
|
|
|
1
|
-
{"version":3,"file":"knn.d.ts","sourceRoot":"","sources":["../../../src/ml/classical/knn.ts"],"names":[],"mappings":"AAAA;;;;;;GAMG;AACH,OAAO,KAAK,EAAE,YAAY,EAAE,WAAW,EAAE,QAAQ,EAAE,MAAM,aAAa,CAAC;AACvE,OAAO,EAAmE,KAAK,GAAG,EAAE,MAAM,WAAW,CAAC;AAEtG,MAAM,MAAM,SAAS,GAAG,QAAQ,GAAG,WAAW,CAAC;AAE/C,MAAM,WAAW,UAAU;IACzB
|
|
1
|
+
{"version":3,"file":"knn.d.ts","sourceRoot":"","sources":["../../../src/ml/classical/knn.ts"],"names":[],"mappings":"AAAA;;;;;;GAMG;AACH,OAAO,KAAK,EAAE,YAAY,EAAE,WAAW,EAAE,QAAQ,EAAE,MAAM,aAAa,CAAC;AACvE,OAAO,EAAmE,KAAK,GAAG,EAAE,MAAM,WAAW,CAAC;AAEtG,MAAM,MAAM,SAAS,GAAG,QAAQ,GAAG,WAAW,CAAC;AAE/C,MAAM,WAAW,UAAU;IACzB;;;OAGG;IACH,CAAC,CAAC,EAAE,MAAM,CAAC;IACX,MAAM,CAAC,EAAE,SAAS,CAAC;IACnB,yEAAyE;IACzE,OAAO,CAAC,EAAE,MAAM,CAAC;CAClB;AAED,MAAM,WAAW,SAAS;IACxB,KAAK,EAAE,MAAM,CAAC;IACd,2EAA2E;IAC3E,UAAU,EAAE,MAAM,CAAC;CACpB;AAED,qBAAa,QAAS,YAAW,WAAW;IAMxC,QAAQ,CAAC,CAAC,EAAE,MAAM;IAClB,QAAQ,CAAC,MAAM,EAAE,SAAS;IAC1B,QAAQ,CAAC,OAAO,EAAE,MAAM;IAP1B,OAAO,CAAC,QAAQ,CAAC,EAAE,CAAsB;IACzC,OAAO,CAAC,QAAQ,CAAC,EAAE,CAAgB;IACnC,OAAO,CAAC,QAAQ,CAAC,EAAE,CAAgB;gBAGxB,CAAC,EAAE,MAAM,EACT,MAAM,EAAE,SAAS,EACjB,OAAO,EAAE,MAAM;IAK1B,uCAAuC;IACvC,IAAI,IAAI,IAAI,MAAM,CAEjB;IAED,uEAAuE;IACvE,GAAG,CAAC,CAAC,EAAE,GAAG,EAAE,CAAC,SAAI,EAAE,MAAM,SAAI,GAAG,IAAI;IAMpC,UAAU,CAAC,CAAC,EAAE,GAAG,EAAE,CAAC,EAAE,GAAG,GAAG,MAAM;IAIlC,4FAA4F;IAC5F,UAAU,CAAC,CAAC,EAAE,GAAG,EAAE,CAAC,GAAE,MAAe,EAAE,OAAO,CAAC,EAAE,MAAM,GAAG,SAAS,EAAE;IASrE,iEAAiE;IACjE,OAAO,CAAC,CAAC,EAAE,GAAG,GAAG,SAAS,GAAG,IAAI;IAIjC,qCAAqC;IACrC,OAAO,CAAC,KAAK,EAAE,MAAM,GAAG,MAAM;IAI9B;;;;;OAKG;IACH,KAAK,CAAC,CAAC,EAAE,GAAG,EAAE,OAAO,CAAC,EAAE,MAAM,GAAG,MAAM,EAAE;IAWzC,OAAO,CAAC,CAAC,EAAE,YAAY,GAAG,YAAY;IAKtC,oFAAoF;IACpF,SAAS,CAAC,KAAK,EAAE,MAAM,GAAG,WAAW;CAStC;AAED,8CAA8C;AAC9C,wBAAgB,MAAM,CAAC,OAAO,EAAE,SAAS,QAAQ,EAAE,EAAE,IAAI,GAAE,UAAe,GAAG,QAAQ,CAOpF"}
|
package/dist/ml/classical/knn.js
CHANGED
|
@@ -26,9 +26,13 @@ export class KnnModel {
|
|
|
26
26
|
similarity(a, b) {
|
|
27
27
|
return this.metric === "cosine" ? cosine(a, b) : 1 / (1 + Math.sqrt(squaredDistance(a, b)));
|
|
28
28
|
}
|
|
29
|
-
/** The `k` closest points, closest first. */
|
|
30
|
-
neighbours(x, k = this.k) {
|
|
31
|
-
const all =
|
|
29
|
+
/** The `k` closest points, closest first — never the point at `exclude` (leave-one-out). */
|
|
30
|
+
neighbours(x, k = this.k, exclude) {
|
|
31
|
+
const all = [];
|
|
32
|
+
for (let index = 0; index < this._x.length; index++) {
|
|
33
|
+
if (index !== exclude)
|
|
34
|
+
all.push({ index, similarity: this.similarity(x, this._x[index]) });
|
|
35
|
+
}
|
|
32
36
|
all.sort((a, b) => b.similarity - a.similarity || a.index - b.index);
|
|
33
37
|
return all.slice(0, Math.min(k, all.length));
|
|
34
38
|
}
|
|
@@ -40,10 +44,15 @@ export class KnnModel {
|
|
|
40
44
|
labelOf(index) {
|
|
41
45
|
return this._y[index];
|
|
42
46
|
}
|
|
43
|
-
/**
|
|
44
|
-
|
|
47
|
+
/**
|
|
48
|
+
* Class probabilities from similarity-weighted votes (uniform when empty). With
|
|
49
|
+
* `exclude`, the point at that index does not vote — the leave-one-out score of a
|
|
50
|
+
* point that is itself in the index, which would otherwise vote for itself at
|
|
51
|
+
* similarity 1.
|
|
52
|
+
*/
|
|
53
|
+
proba(x, exclude) {
|
|
45
54
|
const votes = new Array(this.classes).fill(0);
|
|
46
|
-
for (const n of this.neighbours(x)) {
|
|
55
|
+
for (const n of this.neighbours(x, this.k, exclude)) {
|
|
47
56
|
// Shift cosine into (0, 2] so an orthogonal neighbour still casts a small vote.
|
|
48
57
|
const w = (this.metric === "cosine" ? n.similarity + 1 : n.similarity) * this._w[n.index] + 1e-9;
|
|
49
58
|
votes[this._y[n.index]] += w;
|
|
@@ -55,12 +64,24 @@ export class KnnModel {
|
|
|
55
64
|
const scores = this.proba(x);
|
|
56
65
|
return { scores, confidence: topProbability(scores) };
|
|
57
66
|
}
|
|
67
|
+
/** This index as a predictor that leaves the point at `index` out of every vote. */
|
|
68
|
+
excluding(index) {
|
|
69
|
+
if (!(index >= 0 && index < this._x.length))
|
|
70
|
+
throw new Error(`KnnModel.excluding: no point ${index} (size ${this._x.length})`);
|
|
71
|
+
return {
|
|
72
|
+
predict: (x) => {
|
|
73
|
+
const scores = this.proba(x, index);
|
|
74
|
+
return { scores, confidence: topProbability(scores) };
|
|
75
|
+
},
|
|
76
|
+
};
|
|
77
|
+
}
|
|
58
78
|
}
|
|
59
79
|
/** Index `samples` for kNN classification. */
|
|
60
80
|
export function fitKnn(samples, opts = {}) {
|
|
61
81
|
featureDim(samples.map((s) => s.x));
|
|
62
82
|
const classes = opts.classes ?? classCount(samples.map((s) => s.y));
|
|
63
|
-
const
|
|
83
|
+
const k = opts.k ?? Math.min(5, Math.max(1, Math.floor(Math.sqrt(samples.length))));
|
|
84
|
+
const model = new KnnModel(Math.min(k, samples.length), opts.metric ?? "cosine", classes);
|
|
64
85
|
for (const s of samples)
|
|
65
86
|
model.add(s.x, s.y, s.weight ?? 1);
|
|
66
87
|
return model;
|
|
@@ -1 +1 @@
|
|
|
1
|
-
{"version":3,"file":"knn.js","sourceRoot":"","sources":["../../../src/ml/classical/knn.ts"],"names":[],"mappings":"AAQA,OAAO,EAAE,UAAU,EAAE,MAAM,EAAE,UAAU,EAAE,eAAe,EAAE,cAAc,EAAY,MAAM,WAAW,CAAC;
|
|
1
|
+
{"version":3,"file":"knn.js","sourceRoot":"","sources":["../../../src/ml/classical/knn.ts"],"names":[],"mappings":"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"}
|
|
@@ -1,11 +1,3 @@
|
|
|
1
|
-
/**
|
|
2
|
-
* ml/classical/logistic.ts — (multinomial) logistic regression.
|
|
3
|
-
*
|
|
4
|
-
* Softmax regression with L2, fitted by full-batch gradient descent; two classes
|
|
5
|
-
* is ordinary logistic regression. No internal feature scaling: a task supplies
|
|
6
|
-
* features on a stable scale, so a weight means the same thing on every machine —
|
|
7
|
-
* which is what lets trained weights FEDERATE (`exportParams` / `importParams`).
|
|
8
|
-
*/
|
|
9
1
|
import type { MlPrediction, MlPredictor, MlSample } from "../types.js";
|
|
10
2
|
export interface LogisticOptions {
|
|
11
3
|
classes?: number;
|
|
@@ -24,7 +16,7 @@ export declare class LogisticModel implements MlPredictor {
|
|
|
24
16
|
logits(x: ArrayLike<number>): number[];
|
|
25
17
|
proba(x: ArrayLike<number>): number[];
|
|
26
18
|
predict(x: Float32Array): MlPrediction;
|
|
27
|
-
/** Weighted mean cross-entropy over `samples`
|
|
19
|
+
/** Weighted mean cross-entropy over `samples` — exactly the eval-gate loss ({@link mlEvalLoss}); 0 for an empty set. */
|
|
28
20
|
loss(samples: readonly MlSample[]): number;
|
|
29
21
|
/** One full-batch gradient step; returns the pre-step mean loss. */
|
|
30
22
|
step(samples: readonly MlSample[], learningRate: number, l2: number): number;
|
|
@@ -1 +1 @@
|
|
|
1
|
-
{"version":3,"file":"logistic.d.ts","sourceRoot":"","sources":["../../../src/ml/classical/logistic.ts"],"names":[],"mappings":"
|
|
1
|
+
{"version":3,"file":"logistic.d.ts","sourceRoot":"","sources":["../../../src/ml/classical/logistic.ts"],"names":[],"mappings":"AASA,OAAO,KAAK,EAAE,YAAY,EAAE,WAAW,EAAE,QAAQ,EAAE,MAAM,aAAa,CAAC;AAGvE,MAAM,WAAW,eAAe;IAC9B,OAAO,CAAC,EAAE,MAAM,CAAC;IACjB,YAAY,CAAC,EAAE,MAAM,CAAC;IACtB,MAAM,CAAC,EAAE,MAAM,CAAC;IAChB,wDAAwD;IACxD,EAAE,CAAC,EAAE,MAAM,CAAC;CACb;AAED,qBAAa,aAAc,YAAW,WAAW;IAM7C,QAAQ,CAAC,GAAG,EAAE,MAAM;IACpB,QAAQ,CAAC,OAAO,EAAE,MAAM;IAN1B,yCAAyC;IACzC,QAAQ,CAAC,OAAO,EAAE,YAAY,CAAC;IAC/B,QAAQ,CAAC,IAAI,EAAE,YAAY,CAAC;gBAGjB,GAAG,EAAE,MAAM,EACX,OAAO,EAAE,MAAM;IAM1B,MAAM,CAAC,CAAC,EAAE,SAAS,CAAC,MAAM,CAAC,GAAG,MAAM,EAAE;IAWtC,KAAK,CAAC,CAAC,EAAE,SAAS,CAAC,MAAM,CAAC,GAAG,MAAM,EAAE;IAIrC,OAAO,CAAC,CAAC,EAAE,YAAY,GAAG,YAAY;IAKtC,wHAAwH;IACxH,IAAI,CAAC,OAAO,EAAE,SAAS,QAAQ,EAAE,GAAG,MAAM;IAI1C,oEAAoE;IACpE,IAAI,CAAC,OAAO,EAAE,SAAS,QAAQ,EAAE,EAAE,YAAY,EAAE,MAAM,EAAE,EAAE,EAAE,MAAM,GAAG,MAAM;IAyB5E,YAAY,IAAI,YAAY;IAO5B,YAAY,CAAC,MAAM,EAAE,SAAS,CAAC,MAAM,CAAC,GAAG,IAAI;CAO9C;AAED;;;GAGG;AACH,wBAAgB,WAAW,CACzB,OAAO,EAAE,SAAS,QAAQ,EAAE,EAC5B,IAAI,GAAE,eAAoB,EAC1B,IAAI,CAAC,EAAE,aAAa,GACnB,aAAa,CAgBf"}
|
|
@@ -1,3 +1,12 @@
|
|
|
1
|
+
/**
|
|
2
|
+
* ml/classical/logistic.ts — (multinomial) logistic regression.
|
|
3
|
+
*
|
|
4
|
+
* Softmax regression with L2, fitted by full-batch gradient descent; two classes
|
|
5
|
+
* is ordinary logistic regression. No internal feature scaling: a task supplies
|
|
6
|
+
* features on a stable scale, so a weight means the same thing on every machine —
|
|
7
|
+
* which is what lets trained weights FEDERATE (`exportParams` / `importParams`).
|
|
8
|
+
*/
|
|
9
|
+
import { mlEvalLoss } from "../eval_loss.js";
|
|
1
10
|
import { classCount, featureDim, softmax, topProbability } from "./math.js";
|
|
2
11
|
export class LogisticModel {
|
|
3
12
|
dim;
|
|
@@ -29,16 +38,9 @@ export class LogisticModel {
|
|
|
29
38
|
const scores = this.proba(x);
|
|
30
39
|
return { scores, confidence: topProbability(scores) };
|
|
31
40
|
}
|
|
32
|
-
/** Weighted mean cross-entropy over `samples`
|
|
41
|
+
/** Weighted mean cross-entropy over `samples` — exactly the eval-gate loss ({@link mlEvalLoss}); 0 for an empty set. */
|
|
33
42
|
loss(samples) {
|
|
34
|
-
|
|
35
|
-
let wSum = 0;
|
|
36
|
-
for (const s of samples) {
|
|
37
|
-
const w = s.weight ?? 1;
|
|
38
|
-
sum += -w * Math.log(Math.max(this.proba(s.x)[s.y] ?? 0, 1e-12));
|
|
39
|
-
wSum += w;
|
|
40
|
-
}
|
|
41
|
-
return wSum > 0 ? sum / wSum : 0;
|
|
43
|
+
return mlEvalLoss("classify", this, samples) ?? 0;
|
|
42
44
|
}
|
|
43
45
|
/** One full-batch gradient step; returns the pre-step mean loss. */
|
|
44
46
|
step(samples, learningRate, l2) {
|
|
@@ -90,6 +92,12 @@ export class LogisticModel {
|
|
|
90
92
|
export function fitLogistic(samples, opts = {}, init) {
|
|
91
93
|
const d = featureDim(samples.map((s) => s.x));
|
|
92
94
|
const k = opts.classes ?? init?.classes ?? classCount(samples.map((s) => s.y));
|
|
95
|
+
// A label at or above `classes` has no row of weights: its probability would be
|
|
96
|
+
// read as undefined and every loss and gradient would turn NaN, silently.
|
|
97
|
+
const top = classCount(samples.map((s) => s.y));
|
|
98
|
+
if (top > k && samples.some((s) => s.y >= k)) {
|
|
99
|
+
throw new Error(`fitLogistic: labels go up to ${top - 1} but the model has ${k} classes`);
|
|
100
|
+
}
|
|
93
101
|
const model = init ?? new LogisticModel(d, k);
|
|
94
102
|
if (model.dim !== d || model.classes !== k)
|
|
95
103
|
throw new Error(`fitLogistic: init is ${model.dim}×${model.classes}, data is ${d}×${k}`);
|
|
@@ -1 +1 @@
|
|
|
1
|
-
{"version":3,"file":"logistic.js","sourceRoot":"","sources":["../../../src/ml/classical/logistic.ts"],"names":[],"mappings":"
|
|
1
|
+
{"version":3,"file":"logistic.js","sourceRoot":"","sources":["../../../src/ml/classical/logistic.ts"],"names":[],"mappings":"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"}
|
|
@@ -4,6 +4,10 @@
|
|
|
4
4
|
* Per class: a weighted prior, and an independent Gaussian per feature. Variance
|
|
5
5
|
* is smoothed by a fraction of the largest feature variance (as scikit-learn's
|
|
6
6
|
* `var_smoothing`), so a constant feature never divides by zero.
|
|
7
|
+
*
|
|
8
|
+
* A class with no training weight has prior −∞ and probability exactly 0: its
|
|
9
|
+
* Gaussian is a placeholder (mean 0, variance ≈ the smoothing floor), which would
|
|
10
|
+
* otherwise out-score every real class on an input near zero.
|
|
7
11
|
*/
|
|
8
12
|
import type { MlPrediction, MlPredictor, MlSample } from "../types.js";
|
|
9
13
|
export interface NaiveBayesOptions {
|
|
@@ -16,7 +20,7 @@ export declare class NaiveBayesModel implements MlPredictor {
|
|
|
16
20
|
readonly mean: Float64Array[];
|
|
17
21
|
readonly variance: Float64Array[];
|
|
18
22
|
constructor(logPrior: Float64Array, mean: Float64Array[], variance: Float64Array[]);
|
|
19
|
-
/** Per-class joint log-likelihood log P(c) + Σ log N(x_i | μ, σ²). */
|
|
23
|
+
/** Per-class joint log-likelihood log P(c) + Σ log N(x_i | μ, σ²); −∞ for an unseen class. */
|
|
20
24
|
jointLogLikelihood(x: ArrayLike<number>): number[];
|
|
21
25
|
predict(x: Float32Array): MlPrediction;
|
|
22
26
|
}
|
|
@@ -1 +1 @@
|
|
|
1
|
-
{"version":3,"file":"naive_bayes.d.ts","sourceRoot":"","sources":["../../../src/ml/classical/naive_bayes.ts"],"names":[],"mappings":"AAAA
|
|
1
|
+
{"version":3,"file":"naive_bayes.d.ts","sourceRoot":"","sources":["../../../src/ml/classical/naive_bayes.ts"],"names":[],"mappings":"AAAA;;;;;;;;;;GAUG;AACH,OAAO,KAAK,EAAE,YAAY,EAAE,WAAW,EAAE,QAAQ,EAAE,MAAM,aAAa,CAAC;AAGvE,MAAM,WAAW,iBAAiB;IAChC,OAAO,CAAC,EAAE,MAAM,CAAC;IACjB,sFAAsF;IACtF,YAAY,CAAC,EAAE,MAAM,CAAC;CACvB;AAED,qBAAa,eAAgB,YAAW,WAAW;IAE/C,QAAQ,CAAC,QAAQ,EAAE,YAAY;IAC/B,QAAQ,CAAC,IAAI,EAAE,YAAY,EAAE;IAC7B,QAAQ,CAAC,QAAQ,EAAE,YAAY,EAAE;gBAFxB,QAAQ,EAAE,YAAY,EACtB,IAAI,EAAE,YAAY,EAAE,EACpB,QAAQ,EAAE,YAAY,EAAE;IAGnC,8FAA8F;IAC9F,kBAAkB,CAAC,CAAC,EAAE,SAAS,CAAC,MAAM,CAAC,GAAG,MAAM,EAAE;IAalD,OAAO,CAAC,CAAC,EAAE,YAAY,GAAG,YAAY;CAIvC;AAED,wBAAgB,aAAa,CAAC,OAAO,EAAE,SAAS,QAAQ,EAAE,EAAE,IAAI,GAAE,iBAAsB,GAAG,eAAe,CAoCzG"}
|
|
@@ -8,11 +8,13 @@ export class NaiveBayesModel {
|
|
|
8
8
|
this.mean = mean;
|
|
9
9
|
this.variance = variance;
|
|
10
10
|
}
|
|
11
|
-
/** Per-class joint log-likelihood log P(c) + Σ log N(x_i | μ, σ²). */
|
|
11
|
+
/** Per-class joint log-likelihood log P(c) + Σ log N(x_i | μ, σ²); −∞ for an unseen class. */
|
|
12
12
|
jointLogLikelihood(x) {
|
|
13
13
|
return this.mean.map((mu, c) => {
|
|
14
14
|
const v = this.variance[c];
|
|
15
15
|
let ll = this.logPrior[c];
|
|
16
|
+
if (ll === -Infinity)
|
|
17
|
+
return ll;
|
|
16
18
|
for (let i = 0; i < mu.length; i++) {
|
|
17
19
|
const d = (x[i] ?? 0) - mu[i];
|
|
18
20
|
ll += -0.5 * Math.log(2 * Math.PI * v[i]) - (d * d) / (2 * v[i]);
|
|
@@ -60,8 +62,11 @@ export function fitNaiveBayes(samples, opts = {}) {
|
|
|
60
62
|
for (let i = 0; i < d; i++)
|
|
61
63
|
variance[c][i] = variance[c][i] + eps;
|
|
62
64
|
const total = wSum.reduce((a, b) => a + b, 0);
|
|
63
|
-
|
|
64
|
-
|
|
65
|
+
if (!(total > 0))
|
|
66
|
+
throw new Error("fitNaiveBayes: the samples carry no weight");
|
|
67
|
+
// An unseen class is masked out (−∞, so softmax gives it exactly 0). At least one
|
|
68
|
+
// class has weight, so softmax always has a finite maximum.
|
|
69
|
+
const logPrior = Float64Array.from(wSum, (w) => (w > 0 ? Math.log(w / total) : -Infinity));
|
|
65
70
|
return new NaiveBayesModel(logPrior, mean, variance);
|
|
66
71
|
}
|
|
67
72
|
//# sourceMappingURL=naive_bayes.js.map
|
|
@@ -1 +1 @@
|
|
|
1
|
-
{"version":3,"file":"naive_bayes.js","sourceRoot":"","sources":["../../../src/ml/classical/naive_bayes.ts"],"names":[],"mappings":"
|
|
1
|
+
{"version":3,"file":"naive_bayes.js","sourceRoot":"","sources":["../../../src/ml/classical/naive_bayes.ts"],"names":[],"mappings":"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"}
|
|
@@ -4,7 +4,10 @@
|
|
|
4
4
|
* Per feature: z = |x − median| / (1.4826 · MAD). Median and MAD are not dragged
|
|
5
5
|
* by the very outliers being looked for, unlike mean and standard deviation. When
|
|
6
6
|
* MAD is 0 (more than half the history identical) the mean absolute deviation
|
|
7
|
-
* stands in, then
|
|
7
|
+
* stands in, then two floors: a fraction of |median| (relative) and `minScale`
|
|
8
|
+
* (absolute, in the feature's own units). Without the absolute one a history that
|
|
9
|
+
* is all zeros — no tool failures, ever — gets a scale of ~1e-9, and the first
|
|
10
|
+
* small non-zero value scores astronomically.
|
|
8
11
|
*
|
|
9
12
|
* Prediction: `scores[0] = max_i z_i / threshold` — ≥ 1 is anomalous.
|
|
10
13
|
*/
|
|
@@ -14,7 +17,18 @@ export interface RobustZOptions {
|
|
|
14
17
|
threshold?: number;
|
|
15
18
|
/** Smallest scale per feature, as a fraction of |median| (plus 1e-9). Default 0.01. */
|
|
16
19
|
minScaleFraction?: number;
|
|
20
|
+
/**
|
|
21
|
+
* Smallest scale per feature in absolute feature units: one value for every
|
|
22
|
+
* feature, or one per feature (a missing entry is 0). Default 0 — the algorithm
|
|
23
|
+
* cannot know the units; a task on a fixed scale sets it (`run.anomaly` does,
|
|
24
|
+
* per feature, because each of its metrics is normalised by a different reference).
|
|
25
|
+
*/
|
|
26
|
+
minScale?: MinScale;
|
|
17
27
|
}
|
|
28
|
+
/** An absolute scale floor: one for every feature, or one per feature. */
|
|
29
|
+
export type MinScale = number | readonly number[];
|
|
30
|
+
/** The floor for feature `i` (a per-feature array's missing entry is 0). */
|
|
31
|
+
export declare function minScaleAt(minScale: MinScale, i: number): number;
|
|
18
32
|
export declare class RobustZModel implements MlPredictor {
|
|
19
33
|
readonly center: Float64Array;
|
|
20
34
|
readonly scale: Float64Array;
|
|
@@ -1 +1 @@
|
|
|
1
|
-
{"version":3,"file":"robust_z.d.ts","sourceRoot":"","sources":["../../../src/ml/classical/robust_z.ts"],"names":[],"mappings":"AAAA
|
|
1
|
+
{"version":3,"file":"robust_z.d.ts","sourceRoot":"","sources":["../../../src/ml/classical/robust_z.ts"],"names":[],"mappings":"AAAA;;;;;;;;;;;;GAYG;AACH,OAAO,KAAK,EAAE,YAAY,EAAE,WAAW,EAAE,QAAQ,EAAE,MAAM,aAAa,CAAC;AAQvE,MAAM,WAAW,cAAc;IAC7B,kFAAkF;IAClF,SAAS,CAAC,EAAE,MAAM,CAAC;IACnB,uFAAuF;IACvF,gBAAgB,CAAC,EAAE,MAAM,CAAC;IAC1B;;;;;OAKG;IACH,QAAQ,CAAC,EAAE,QAAQ,CAAC;CACrB;AAED,0EAA0E;AAC1E,MAAM,MAAM,QAAQ,GAAG,MAAM,GAAG,SAAS,MAAM,EAAE,CAAC;AAElD,4EAA4E;AAC5E,wBAAgB,UAAU,CAAC,QAAQ,EAAE,QAAQ,EAAE,CAAC,EAAE,MAAM,GAAG,MAAM,CAEhE;AAED,qBAAa,YAAa,YAAW,WAAW;IAE5C,QAAQ,CAAC,MAAM,EAAE,YAAY;IAC7B,QAAQ,CAAC,KAAK,EAAE,YAAY;IAC5B,QAAQ,CAAC,SAAS,EAAE,MAAM;gBAFjB,MAAM,EAAE,YAAY,EACpB,KAAK,EAAE,YAAY,EACnB,SAAS,EAAE,MAAM;IAG5B,8CAA8C;IAC9C,OAAO,CAAC,CAAC,EAAE,SAAS,CAAC,MAAM,CAAC,GAAG,MAAM,EAAE;IAIvC,OAAO,CAAC,CAAC,EAAE,YAAY,GAAG,YAAY;CAIvC;AAED,iGAAiG;AACjG,wBAAgB,iBAAiB,CAAC,KAAK,EAAE,MAAM,GAAG,MAAM,CAEvD;AAED,wBAAgB,UAAU,CAAC,OAAO,EAAE,SAAS,QAAQ,EAAE,EAAE,IAAI,GAAE,cAAmB,GAAG,YAAY,CAiBhG"}
|
|
@@ -3,6 +3,10 @@ import { featureDim, median } from "./math.js";
|
|
|
3
3
|
const MAD_TO_SD = 1.4826;
|
|
4
4
|
/** Mean absolute deviation → standard deviation for normally-distributed data. */
|
|
5
5
|
const MEANAD_TO_SD = 1.2533;
|
|
6
|
+
/** The floor for feature `i` (a per-feature array's missing entry is 0). */
|
|
7
|
+
export function minScaleAt(minScale, i) {
|
|
8
|
+
return typeof minScale === "number" ? minScale : (minScale[i] ?? 0);
|
|
9
|
+
}
|
|
6
10
|
export class RobustZModel {
|
|
7
11
|
center;
|
|
8
12
|
scale;
|
|
@@ -29,6 +33,7 @@ export function fitRobustZ(samples, opts = {}) {
|
|
|
29
33
|
const X = samples.map((s) => s.x);
|
|
30
34
|
const d = featureDim(X);
|
|
31
35
|
const minFrac = opts.minScaleFraction ?? 0.01;
|
|
36
|
+
const minAbs = opts.minScale ?? 0;
|
|
32
37
|
const center = new Float64Array(d);
|
|
33
38
|
const scale = new Float64Array(d);
|
|
34
39
|
for (let i = 0; i < d; i++) {
|
|
@@ -39,7 +44,7 @@ export function fitRobustZ(samples, opts = {}) {
|
|
|
39
44
|
if (!(s > 0))
|
|
40
45
|
s = MEANAD_TO_SD * (dev.reduce((a, b) => a + b, 0) / dev.length);
|
|
41
46
|
center[i] = med;
|
|
42
|
-
scale[i] = Math.max(s, minFrac * Math.abs(med) + 1e-9);
|
|
47
|
+
scale[i] = Math.max(s, minFrac * Math.abs(med) + 1e-9, minScaleAt(minAbs, i));
|
|
43
48
|
}
|
|
44
49
|
return new RobustZModel(center, scale, opts.threshold ?? 3.5);
|
|
45
50
|
}
|
|
@@ -1 +1 @@
|
|
|
1
|
-
{"version":3,"file":"robust_z.js","sourceRoot":"","sources":["../../../src/ml/classical/robust_z.ts"],"names":[],"mappings":"
|
|
1
|
+
{"version":3,"file":"robust_z.js","sourceRoot":"","sources":["../../../src/ml/classical/robust_z.ts"],"names":[],"mappings":"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"}
|
|
@@ -0,0 +1,15 @@
|
|
|
1
|
+
/**
|
|
2
|
+
* ml/eval_loss.ts — the ONE held-out loss for catalog models.
|
|
3
|
+
*
|
|
4
|
+
* What the trainer reports as `holdoutLoss`, what a federated merge is gated on, and
|
|
5
|
+
* what `LogisticModel.loss` returns. A leaf (types only), so a classical algorithm can
|
|
6
|
+
* use it without importing the trainer that imports the algorithms.
|
|
7
|
+
*/
|
|
8
|
+
import type { MlPredictor, MlSample, MlTaskKind } from "./types.js";
|
|
9
|
+
/**
|
|
10
|
+
* Mean loss of `predictor` on `samples` for a task of `kind` — classify: weighted
|
|
11
|
+
* cross-entropy of the true class; regress: weighted ½·squared error. Null for
|
|
12
|
+
* kinds without a supervised loss, or an empty (or zero-weight) set.
|
|
13
|
+
*/
|
|
14
|
+
export declare function mlEvalLoss(kind: MlTaskKind, predictor: MlPredictor, samples: readonly MlSample[]): number | null;
|
|
15
|
+
//# sourceMappingURL=eval_loss.d.ts.map
|
|
@@ -0,0 +1 @@
|
|
|
1
|
+
{"version":3,"file":"eval_loss.d.ts","sourceRoot":"","sources":["../../src/ml/eval_loss.ts"],"names":[],"mappings":"AAAA;;;;;;GAMG;AACH,OAAO,KAAK,EAAE,WAAW,EAAE,QAAQ,EAAE,UAAU,EAAE,MAAM,YAAY,CAAC;AAEpE;;;;GAIG;AACH,wBAAgB,UAAU,CAAC,IAAI,EAAE,UAAU,EAAE,SAAS,EAAE,WAAW,EAAE,OAAO,EAAE,SAAS,QAAQ,EAAE,GAAG,MAAM,GAAG,IAAI,CAYhH"}
|