nlptoolkit-classification 1.0.8 → 1.0.9
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/Attribute/Attribute.js +6 -16
- package/dist/Attribute/Attribute.js.map +1 -1
- package/dist/Attribute/AttributeType.js +22 -32
- package/dist/Attribute/AttributeType.js.map +1 -1
- package/dist/Attribute/BinaryAttribute.js +14 -24
- package/dist/Attribute/BinaryAttribute.js.map +1 -1
- package/dist/Attribute/ContinuousAttribute.js +46 -55
- package/dist/Attribute/ContinuousAttribute.js.map +1 -1
- package/dist/Attribute/DiscreteAttribute.js +38 -48
- package/dist/Attribute/DiscreteAttribute.js.map +1 -1
- package/dist/Attribute/DiscreteIndexedAttribute.js +47 -55
- package/dist/Attribute/DiscreteIndexedAttribute.js.map +1 -1
- package/dist/DataSet/DataDefinition.js +115 -123
- package/dist/DataSet/DataDefinition.js.map +1 -1
- package/dist/DataSet/DataSet.js +268 -245
- package/dist/DataSet/DataSet.js.map +1 -1
- package/dist/DistanceMetric/DistanceMetric.js +2 -12
- package/dist/DistanceMetric/EuclidianDistance.js +27 -37
- package/dist/DistanceMetric/EuclidianDistance.js.map +1 -1
- package/dist/DistanceMetric/MahalanobisDistance.js +27 -36
- package/dist/DistanceMetric/MahalanobisDistance.js.map +1 -1
- package/dist/Experiment/BootstrapRun.js +31 -40
- package/dist/Experiment/BootstrapRun.js.map +1 -1
- package/dist/Experiment/Experiment.js +46 -53
- package/dist/Experiment/Experiment.js.map +1 -1
- package/dist/Experiment/KFoldRun.js +45 -54
- package/dist/Experiment/KFoldRun.js.map +1 -1
- package/dist/Experiment/KFoldRunSeparateTest.js +48 -58
- package/dist/Experiment/KFoldRunSeparateTest.js.map +1 -1
- package/dist/Experiment/MultipleRun.js +2 -12
- package/dist/Experiment/MxKFoldRun.js +31 -40
- package/dist/Experiment/MxKFoldRun.js.map +1 -1
- package/dist/Experiment/MxKFoldRunSeparateTest.js +35 -44
- package/dist/Experiment/MxKFoldRunSeparateTest.js.map +1 -1
- package/dist/Experiment/SingleRun.js +2 -12
- package/dist/Experiment/SingleRunWithK.js +39 -48
- package/dist/Experiment/SingleRunWithK.js.map +1 -1
- package/dist/Experiment/StratifiedKFoldRun.js +26 -36
- package/dist/Experiment/StratifiedKFoldRun.js.map +1 -1
- package/dist/Experiment/StratifiedKFoldRunSeparateTest.js +30 -40
- package/dist/Experiment/StratifiedKFoldRunSeparateTest.js.map +1 -1
- package/dist/Experiment/StratifiedMxKFoldRun.js +29 -39
- package/dist/Experiment/StratifiedMxKFoldRun.js.map +1 -1
- package/dist/Experiment/StratifiedMxKFoldRunSeparateTest.js +34 -43
- package/dist/Experiment/StratifiedMxKFoldRunSeparateTest.js.map +1 -1
- package/dist/Experiment/StratifiedSingleRunWithK.js +27 -36
- package/dist/Experiment/StratifiedSingleRunWithK.js.map +1 -1
- package/dist/FeatureSelection/BackwardSelection.js +26 -36
- package/dist/FeatureSelection/BackwardSelection.js.map +1 -1
- package/dist/FeatureSelection/FeatureSubSet.js +72 -82
- package/dist/FeatureSelection/FeatureSubSet.js.map +1 -1
- package/dist/FeatureSelection/FloatingSelection.js +25 -35
- package/dist/FeatureSelection/FloatingSelection.js.map +1 -1
- package/dist/FeatureSelection/ForwardSelection.js +25 -35
- package/dist/FeatureSelection/ForwardSelection.js.map +1 -1
- package/dist/FeatureSelection/SubSetSelection.js +69 -78
- package/dist/FeatureSelection/SubSetSelection.js.map +1 -1
- package/dist/Filter/DiscreteToContinuous.js +50 -60
- package/dist/Filter/DiscreteToContinuous.js.map +1 -1
- package/dist/Filter/DiscreteToIndexed.js +40 -50
- package/dist/Filter/DiscreteToIndexed.js.map +1 -1
- package/dist/Filter/FeatureFilter.js +23 -32
- package/dist/Filter/FeatureFilter.js.map +1 -1
- package/dist/Filter/LaryFilter.js +46 -55
- package/dist/Filter/LaryFilter.js.map +1 -1
- package/dist/Filter/LaryToBinary.js +48 -58
- package/dist/Filter/LaryToBinary.js.map +1 -1
- package/dist/Filter/Normalize.js +33 -41
- package/dist/Filter/Normalize.js.map +1 -1
- package/dist/Filter/Pca.js +86 -96
- package/dist/Filter/Pca.js.map +1 -1
- package/dist/Filter/TrainedFeatureFilter.js +14 -24
- package/dist/Filter/TrainedFeatureFilter.js.map +1 -1
- package/dist/Instance/CompositeInstance.js +46 -56
- package/dist/Instance/CompositeInstance.js.map +1 -1
- package/dist/Instance/Instance.js +145 -154
- package/dist/Instance/Instance.js.map +1 -1
- package/dist/InstanceList/InstanceList.js +466 -443
- package/dist/InstanceList/InstanceList.js.map +1 -1
- package/dist/InstanceList/InstanceListOfSameClass.js +23 -32
- package/dist/InstanceList/InstanceListOfSameClass.js.map +1 -1
- package/dist/InstanceList/Partition.js +167 -177
- package/dist/InstanceList/Partition.js.map +1 -1
- package/dist/Model/DecisionTree/DecisionCondition.js +71 -80
- package/dist/Model/DecisionTree/DecisionCondition.js.map +1 -1
- package/dist/Model/DecisionTree/DecisionNode.js +302 -311
- package/dist/Model/DecisionTree/DecisionNode.js.map +1 -1
- package/dist/Model/DecisionTree/DecisionStump.js +22 -32
- package/dist/Model/DecisionTree/DecisionStump.js.map +1 -1
- package/dist/Model/DecisionTree/DecisionTree.js +89 -98
- package/dist/Model/DecisionTree/DecisionTree.js.map +1 -1
- package/dist/Model/DummyModel.js +64 -73
- package/dist/Model/DummyModel.js.map +1 -1
- package/dist/Model/Ensemble/BaggingModel.js +34 -44
- package/dist/Model/Ensemble/BaggingModel.js.map +1 -1
- package/dist/Model/Ensemble/RandomForestModel.js +31 -41
- package/dist/Model/Ensemble/RandomForestModel.js.map +1 -1
- package/dist/Model/Ensemble/TreeEnsembleModel.js +55 -64
- package/dist/Model/Ensemble/TreeEnsembleModel.js.map +1 -1
- package/dist/Model/Model.js +130 -140
- package/dist/Model/Model.js.map +1 -1
- package/dist/Model/NeuralNetwork/DeepNetworkModel.js +162 -169
- package/dist/Model/NeuralNetwork/DeepNetworkModel.js.map +1 -1
- package/dist/Model/NeuralNetwork/LinearPerceptronModel.js +69 -78
- package/dist/Model/NeuralNetwork/LinearPerceptronModel.js.map +1 -1
- package/dist/Model/NeuralNetwork/MultiLayerPerceptronModel.js +112 -120
- package/dist/Model/NeuralNetwork/MultiLayerPerceptronModel.js.map +1 -1
- package/dist/Model/NeuralNetwork/NeuralNetworkModel.js +197 -201
- package/dist/Model/NeuralNetwork/NeuralNetworkModel.js.map +1 -1
- package/dist/Model/NonParametric/KnnInstance.js +21 -29
- package/dist/Model/NonParametric/KnnInstance.js.map +1 -1
- package/dist/Model/NonParametric/KnnModel.js +101 -108
- package/dist/Model/NonParametric/KnnModel.js.map +1 -1
- package/dist/Model/Parametric/GaussianModel.js +82 -91
- package/dist/Model/Parametric/GaussianModel.js.map +1 -1
- package/dist/Model/Parametric/KMeansModel.js +59 -67
- package/dist/Model/Parametric/KMeansModel.js.map +1 -1
- package/dist/Model/Parametric/LdaModel.js +83 -91
- package/dist/Model/Parametric/LdaModel.js.map +1 -1
- package/dist/Model/Parametric/NaiveBayesModel.js +119 -132
- package/dist/Model/Parametric/NaiveBayesModel.js.map +1 -1
- package/dist/Model/Parametric/QdaModel.js +70 -79
- package/dist/Model/Parametric/QdaModel.js.map +1 -1
- package/dist/Model/RandomModel.js +85 -92
- package/dist/Model/RandomModel.js.map +1 -1
- package/dist/Model/ValidatedModel.js +21 -31
- package/dist/Model/ValidatedModel.js.map +1 -1
- package/dist/Parameter/ActivationFunction.js +9 -19
- package/dist/Parameter/ActivationFunction.js.map +1 -1
- package/dist/Parameter/BaggingParameter.js +24 -33
- package/dist/Parameter/BaggingParameter.js.map +1 -1
- package/dist/Parameter/C45Parameter.js +34 -42
- package/dist/Parameter/C45Parameter.js.map +1 -1
- package/dist/Parameter/DeepNetworkParameter.js +48 -56
- package/dist/Parameter/DeepNetworkParameter.js.map +1 -1
- package/dist/Parameter/KMeansParameter.js +29 -38
- package/dist/Parameter/KMeansParameter.js.map +1 -1
- package/dist/Parameter/KnnParameter.js +25 -34
- package/dist/Parameter/KnnParameter.js.map +1 -1
- package/dist/Parameter/LinearPerceptronParameter.js +56 -62
- package/dist/Parameter/LinearPerceptronParameter.js.map +1 -1
- package/dist/Parameter/MultiLayerPerceptronParameter.js +38 -46
- package/dist/Parameter/MultiLayerPerceptronParameter.js.map +1 -1
- package/dist/Parameter/Parameter.js +21 -30
- package/dist/Parameter/Parameter.js.map +1 -1
- package/dist/Parameter/RandomForestParameter.js +25 -34
- package/dist/Parameter/RandomForestParameter.js.map +1 -1
- package/dist/Performance/ClassificationPerformance.js +24 -33
- package/dist/Performance/ClassificationPerformance.js.map +1 -1
- package/dist/Performance/ConfusionMatrix.js +149 -158
- package/dist/Performance/ConfusionMatrix.js.map +1 -1
- package/dist/Performance/DetailedClassificationPerformance.js +23 -32
- package/dist/Performance/DetailedClassificationPerformance.js.map +1 -1
- package/dist/Performance/ExperimentPerformance.js +184 -161
- package/dist/Performance/ExperimentPerformance.js.map +1 -1
- package/dist/Performance/Performance.js +21 -30
- package/dist/Performance/Performance.js.map +1 -1
- package/dist/StatisticalTest/Combined5x2F.js +41 -51
- package/dist/StatisticalTest/Combined5x2F.js.map +1 -1
- package/dist/StatisticalTest/Combined5x2t.js +42 -52
- package/dist/StatisticalTest/Combined5x2t.js.map +1 -1
- package/dist/StatisticalTest/Paired5x2t.js +40 -50
- package/dist/StatisticalTest/Paired5x2t.js.map +1 -1
- package/dist/StatisticalTest/PairedTest.js +31 -41
- package/dist/StatisticalTest/PairedTest.js.map +1 -1
- package/dist/StatisticalTest/Pairedt.js +38 -48
- package/dist/StatisticalTest/Pairedt.js.map +1 -1
- package/dist/StatisticalTest/Sign.js +50 -60
- package/dist/StatisticalTest/Sign.js.map +1 -1
- package/dist/StatisticalTest/StatisticalTestResult.js +65 -73
- package/dist/StatisticalTest/StatisticalTestResult.js.map +1 -1
- package/dist/StatisticalTest/StatisticalTestResultType.js +11 -21
- package/dist/StatisticalTest/StatisticalTestResultType.js.map +1 -1
- package/dist/index.js +95 -101
- package/dist/index.js.map +1 -1
- package/package.json +7 -6
- package/tsconfig.json +4 -3
- package/source/tsconfig.json +0 -13
|
@@ -1,98 +1,90 @@
|
|
|
1
|
-
|
|
2
|
-
|
|
3
|
-
|
|
4
|
-
|
|
1
|
+
"use strict";
|
|
2
|
+
Object.defineProperty(exports, "__esModule", { value: true });
|
|
3
|
+
exports.LdaModel = void 0;
|
|
4
|
+
const GaussianModel_1 = require("./GaussianModel");
|
|
5
|
+
const Vector_1 = require("nlptoolkit-math/dist/Vector");
|
|
6
|
+
const FileContents_1 = require("nlptoolkit-util/dist/FileContents");
|
|
7
|
+
const Partition_1 = require("../../InstanceList/Partition");
|
|
8
|
+
const Matrix_1 = require("nlptoolkit-math/dist/Matrix");
|
|
9
|
+
class LdaModel extends GaussianModel_1.GaussianModel {
|
|
10
|
+
w0;
|
|
11
|
+
w;
|
|
12
|
+
/**
|
|
13
|
+
* Loads a Linear Discriminant Analysis model from an input model file.
|
|
14
|
+
* @param fileName Model file name.
|
|
15
|
+
*/
|
|
16
|
+
constructor2(fileName) {
|
|
17
|
+
let input = new FileContents_1.FileContents(fileName);
|
|
18
|
+
let size = this.loadPriorDistribution(input);
|
|
19
|
+
this.loadWandW0(input, size);
|
|
5
20
|
}
|
|
6
|
-
|
|
7
|
-
|
|
21
|
+
/**
|
|
22
|
+
* The calculateMetric method takes an {@link Instance} and a String as inputs. It returns the dot product of given Instance
|
|
23
|
+
* and wi plus w0i.
|
|
24
|
+
*
|
|
25
|
+
* @param instance {@link Instance} input.
|
|
26
|
+
* @param Ci String input.
|
|
27
|
+
* @return The dot product of given Instance and wi plus w0i.
|
|
28
|
+
*/
|
|
29
|
+
calculateMetric(instance, Ci) {
|
|
30
|
+
let xi = instance.toVector();
|
|
31
|
+
let wi = this.w.get(Ci);
|
|
32
|
+
let w0i = this.w0.get(Ci);
|
|
33
|
+
return wi.dotProduct(xi) + w0i;
|
|
8
34
|
}
|
|
9
|
-
|
|
10
|
-
|
|
11
|
-
|
|
12
|
-
|
|
13
|
-
|
|
14
|
-
|
|
15
|
-
|
|
16
|
-
|
|
17
|
-
|
|
18
|
-
|
|
19
|
-
|
|
20
|
-
|
|
21
|
-
* @param fileName Model file name.
|
|
22
|
-
*/
|
|
23
|
-
constructor2(fileName) {
|
|
24
|
-
let input = new FileContents_1.FileContents(fileName);
|
|
25
|
-
let size = this.loadPriorDistribution(input);
|
|
26
|
-
this.loadWandW0(input, size);
|
|
35
|
+
/**
|
|
36
|
+
* Loads w0 and w hash maps from an input file. The number of items in the hash map is given by the parameter size.
|
|
37
|
+
* @param input Input file
|
|
38
|
+
* @param size Number of items in the hash map read.
|
|
39
|
+
* @throws IOException If the file can not be read, it throws IOException.
|
|
40
|
+
*/
|
|
41
|
+
loadWandW0(input, size) {
|
|
42
|
+
this.w0 = new Map();
|
|
43
|
+
for (let i = 0; i < size; i++) {
|
|
44
|
+
let line = input.readLine();
|
|
45
|
+
let items = line.split(" ");
|
|
46
|
+
this.w0.set(items[0], parseFloat(items[1]));
|
|
27
47
|
}
|
|
28
|
-
|
|
29
|
-
|
|
30
|
-
|
|
31
|
-
|
|
32
|
-
|
|
33
|
-
|
|
34
|
-
|
|
35
|
-
|
|
36
|
-
|
|
37
|
-
|
|
38
|
-
|
|
39
|
-
|
|
40
|
-
|
|
41
|
-
|
|
42
|
-
|
|
43
|
-
|
|
44
|
-
|
|
45
|
-
|
|
46
|
-
|
|
47
|
-
|
|
48
|
-
|
|
49
|
-
this.w0 = new Map();
|
|
50
|
-
for (let i = 0; i < size; i++) {
|
|
51
|
-
let line = input.readLine();
|
|
52
|
-
let items = line.split(" ");
|
|
53
|
-
this.w0.set(items[0], parseFloat(items[1]));
|
|
54
|
-
}
|
|
55
|
-
this.w = this.loadVectors(input, size);
|
|
56
|
-
}
|
|
57
|
-
saveTxt(fileName) {
|
|
58
|
-
}
|
|
59
|
-
/**
|
|
60
|
-
* Training algorithm for the linear discriminant analysis classifier (Introduction to Machine Learning, Alpaydin, 2015).
|
|
61
|
-
*
|
|
62
|
-
* @param trainSet Training data given to the algorithm.
|
|
63
|
-
* @param parameters -
|
|
64
|
-
*/
|
|
65
|
-
train(trainSet, parameters) {
|
|
66
|
-
this.w0 = new Map();
|
|
67
|
-
this.w = new Map();
|
|
68
|
-
this.priorDistribution = trainSet.classDistribution();
|
|
69
|
-
let classLists = new Partition_1.Partition(trainSet);
|
|
70
|
-
let covariance = new Matrix_1.Matrix(trainSet.get(0).continuousAttributeSize(), trainSet.get(0).continuousAttributeSize());
|
|
71
|
-
for (let i = 0; i < classLists.size(); i++) {
|
|
72
|
-
let averageVector = new Vector_1.Vector(classLists.get(i).continuousAttributeAverage());
|
|
73
|
-
let classCovariance = classLists.get(i).covariance(averageVector);
|
|
74
|
-
classCovariance.multiplyWithConstant(classLists.get(i).size() - 1);
|
|
75
|
-
covariance.add(classCovariance);
|
|
76
|
-
}
|
|
77
|
-
covariance.divideByConstant(trainSet.size() - classLists.size());
|
|
78
|
-
covariance.inverse();
|
|
79
|
-
for (let i = 0; i < classLists.size(); i++) {
|
|
80
|
-
let Ci = classLists.get(i).getClassLabel();
|
|
81
|
-
let averageVector = new Vector_1.Vector(classLists.get(i).continuousAttributeAverage());
|
|
82
|
-
let wi = covariance.multiplyWithVectorFromRight(averageVector);
|
|
83
|
-
this.w.set(Ci, wi);
|
|
84
|
-
let w0i = -0.5 * wi.dotProduct(averageVector) + Math.log(this.priorDistribution.getProbability(Ci));
|
|
85
|
-
this.w0.set(Ci, w0i);
|
|
86
|
-
}
|
|
48
|
+
this.w = this.loadVectors(input, size);
|
|
49
|
+
}
|
|
50
|
+
saveTxt(fileName) {
|
|
51
|
+
}
|
|
52
|
+
/**
|
|
53
|
+
* Training algorithm for the linear discriminant analysis classifier (Introduction to Machine Learning, Alpaydin, 2015).
|
|
54
|
+
*
|
|
55
|
+
* @param trainSet Training data given to the algorithm.
|
|
56
|
+
* @param parameters -
|
|
57
|
+
*/
|
|
58
|
+
train(trainSet, parameters) {
|
|
59
|
+
this.w0 = new Map();
|
|
60
|
+
this.w = new Map();
|
|
61
|
+
this.priorDistribution = trainSet.classDistribution();
|
|
62
|
+
let classLists = new Partition_1.Partition(trainSet);
|
|
63
|
+
let covariance = new Matrix_1.Matrix(trainSet.get(0).continuousAttributeSize(), trainSet.get(0).continuousAttributeSize());
|
|
64
|
+
for (let i = 0; i < classLists.size(); i++) {
|
|
65
|
+
let averageVector = new Vector_1.Vector(classLists.get(i).continuousAttributeAverage());
|
|
66
|
+
let classCovariance = classLists.get(i).covariance(averageVector);
|
|
67
|
+
classCovariance.multiplyWithConstant(classLists.get(i).size() - 1);
|
|
68
|
+
covariance.add(classCovariance);
|
|
87
69
|
}
|
|
88
|
-
|
|
89
|
-
|
|
90
|
-
|
|
91
|
-
|
|
92
|
-
|
|
93
|
-
|
|
70
|
+
covariance.divideByConstant(trainSet.size() - classLists.size());
|
|
71
|
+
covariance.inverse();
|
|
72
|
+
for (let i = 0; i < classLists.size(); i++) {
|
|
73
|
+
let Ci = classLists.get(i).getClassLabel();
|
|
74
|
+
let averageVector = new Vector_1.Vector(classLists.get(i).continuousAttributeAverage());
|
|
75
|
+
let wi = covariance.multiplyWithVectorFromRight(averageVector);
|
|
76
|
+
this.w.set(Ci, wi);
|
|
77
|
+
let w0i = -0.5 * wi.dotProduct(averageVector) + Math.log(this.priorDistribution.getProbability(Ci));
|
|
78
|
+
this.w0.set(Ci, w0i);
|
|
94
79
|
}
|
|
95
80
|
}
|
|
96
|
-
|
|
97
|
-
|
|
81
|
+
/**
|
|
82
|
+
* Loads the Lda model from an input file.
|
|
83
|
+
* @param fileName File name of the Lda model.
|
|
84
|
+
*/
|
|
85
|
+
loadModel(fileName) {
|
|
86
|
+
this.constructor2(fileName);
|
|
87
|
+
}
|
|
88
|
+
}
|
|
89
|
+
exports.LdaModel = LdaModel;
|
|
98
90
|
//# sourceMappingURL=LdaModel.js.map
|
|
@@ -1 +1 @@
|
|
|
1
|
-
{"version":3,"file":"LdaModel.js","sourceRoot":"","sources":["../../../source/Model/Parametric/LdaModel.ts"],"names":[],"mappings":"
|
|
1
|
+
{"version":3,"file":"LdaModel.js","sourceRoot":"","sources":["../../../source/Model/Parametric/LdaModel.ts"],"names":[],"mappings":"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"}
|
|
@@ -1,144 +1,131 @@
|
|
|
1
|
-
|
|
2
|
-
|
|
3
|
-
|
|
4
|
-
|
|
1
|
+
"use strict";
|
|
2
|
+
Object.defineProperty(exports, "__esModule", { value: true });
|
|
3
|
+
exports.NaiveBayesModel = void 0;
|
|
4
|
+
const GaussianModel_1 = require("./GaussianModel");
|
|
5
|
+
const DiscreteAttribute_1 = require("../../Attribute/DiscreteAttribute");
|
|
6
|
+
const FileContents_1 = require("nlptoolkit-util/dist/FileContents");
|
|
7
|
+
const Partition_1 = require("../../InstanceList/Partition");
|
|
8
|
+
class NaiveBayesModel extends GaussianModel_1.GaussianModel {
|
|
9
|
+
classMeans = undefined;
|
|
10
|
+
classDeviations = undefined;
|
|
11
|
+
classAttributeDistributions = undefined;
|
|
12
|
+
/**
|
|
13
|
+
* Loads a naive Bayes model from an input model file.
|
|
14
|
+
* @param fileName Model file name.
|
|
15
|
+
*/
|
|
16
|
+
constructor3(fileName) {
|
|
17
|
+
let input = new FileContents_1.FileContents(fileName);
|
|
18
|
+
let size = this.loadPriorDistribution(input);
|
|
19
|
+
this.classMeans = this.loadVectors(input, size);
|
|
20
|
+
this.classDeviations = this.loadVectors(input, size);
|
|
5
21
|
}
|
|
6
|
-
|
|
7
|
-
|
|
8
|
-
|
|
9
|
-
|
|
10
|
-
|
|
11
|
-
|
|
12
|
-
|
|
13
|
-
|
|
14
|
-
|
|
15
|
-
|
|
16
|
-
|
|
17
|
-
class NaiveBayesModel extends GaussianModel_1.GaussianModel {
|
|
18
|
-
constructor() {
|
|
19
|
-
super(...arguments);
|
|
20
|
-
this.classMeans = undefined;
|
|
21
|
-
this.classDeviations = undefined;
|
|
22
|
-
this.classAttributeDistributions = undefined;
|
|
22
|
+
/**
|
|
23
|
+
* The calculateMetric method takes an {@link Instance} and a String as inputs, and it returns the log likelihood of
|
|
24
|
+
* these inputs.
|
|
25
|
+
*
|
|
26
|
+
* @param instance {@link Instance} input.
|
|
27
|
+
* @param Ci String input.
|
|
28
|
+
* @return The log likelihood of inputs.
|
|
29
|
+
*/
|
|
30
|
+
calculateMetric(instance, Ci) {
|
|
31
|
+
if (this.classAttributeDistributions == undefined) {
|
|
32
|
+
return this.logLikelihoodContinuous(Ci, instance);
|
|
23
33
|
}
|
|
24
|
-
|
|
25
|
-
|
|
26
|
-
* @param fileName Model file name.
|
|
27
|
-
*/
|
|
28
|
-
constructor3(fileName) {
|
|
29
|
-
let input = new FileContents_1.FileContents(fileName);
|
|
30
|
-
let size = this.loadPriorDistribution(input);
|
|
31
|
-
this.classMeans = this.loadVectors(input, size);
|
|
32
|
-
this.classDeviations = this.loadVectors(input, size);
|
|
34
|
+
else {
|
|
35
|
+
return this.logLikelihoodDiscrete(Ci, instance);
|
|
33
36
|
}
|
|
34
|
-
|
|
35
|
-
|
|
36
|
-
|
|
37
|
-
|
|
38
|
-
|
|
39
|
-
|
|
40
|
-
|
|
41
|
-
|
|
42
|
-
|
|
43
|
-
|
|
44
|
-
|
|
45
|
-
|
|
46
|
-
|
|
47
|
-
|
|
48
|
-
|
|
49
|
-
|
|
50
|
-
|
|
51
|
-
|
|
52
|
-
* of given class label's probability via prior distribution as logLikelihood. Then it loops times of given instance attribute size, and accumulates the
|
|
53
|
-
* logLikelihood by calculating -0.5 * ((xi - mi) / si )** 2).
|
|
54
|
-
*
|
|
55
|
-
* @param classLabel String input class label.
|
|
56
|
-
* @param instance {@link Instance} input.
|
|
57
|
-
* @return The log likelihood of given class label and {@link Instance}.
|
|
58
|
-
*/
|
|
59
|
-
logLikelihoodContinuous(classLabel, instance) {
|
|
60
|
-
let logLikelihood = Math.log(this.priorDistribution.getProbability(classLabel));
|
|
61
|
-
for (let i = 0; i < instance.attributeSize(); i++) {
|
|
62
|
-
let xi = instance.getAttribute(i).getValue();
|
|
63
|
-
let mi = this.classMeans.get(classLabel).getValue(i);
|
|
64
|
-
let si = this.classDeviations.get(classLabel).getValue(i);
|
|
65
|
-
if (si != 0) {
|
|
66
|
-
logLikelihood += -0.5 * Math.pow((xi - mi) / si, 2);
|
|
67
|
-
}
|
|
68
|
-
}
|
|
69
|
-
return logLikelihood;
|
|
70
|
-
}
|
|
71
|
-
/**
|
|
72
|
-
* The logLikelihoodDiscrete method takes an {@link Instance} and a class label as inputs. First it gets the logarithm
|
|
73
|
-
* of given class label's probability via prior distribution as logLikelihood and gets the class attribute distribution of given class label.
|
|
74
|
-
* Then it loops times of given instance attribute size, and accumulates the logLikelihood by calculating the logarithm of
|
|
75
|
-
* corresponding attribute distribution's smoothed probability by using laplace smoothing on xi.
|
|
76
|
-
*
|
|
77
|
-
* @param classLabel String input class label.
|
|
78
|
-
* @param instance {@link Instance} input.
|
|
79
|
-
* @return The log likelihood of given class label and {@link Instance}.
|
|
80
|
-
*/
|
|
81
|
-
logLikelihoodDiscrete(classLabel, instance) {
|
|
82
|
-
let logLikelihood = Math.log(this.priorDistribution.getProbability(classLabel));
|
|
83
|
-
let attributeDistributions = this.classAttributeDistributions.get(classLabel);
|
|
84
|
-
for (let i = 0; i < instance.attributeSize(); i++) {
|
|
85
|
-
let xi = instance.getAttribute(i).getValue();
|
|
86
|
-
logLikelihood += Math.log(attributeDistributions[i].getProbabilityLaplaceSmoothing(xi));
|
|
37
|
+
}
|
|
38
|
+
/**
|
|
39
|
+
* The logLikelihoodContinuous method takes an {@link Instance} and a class label as inputs. First it gets the logarithm
|
|
40
|
+
* of given class label's probability via prior distribution as logLikelihood. Then it loops times of given instance attribute size, and accumulates the
|
|
41
|
+
* logLikelihood by calculating -0.5 * ((xi - mi) / si )** 2).
|
|
42
|
+
*
|
|
43
|
+
* @param classLabel String input class label.
|
|
44
|
+
* @param instance {@link Instance} input.
|
|
45
|
+
* @return The log likelihood of given class label and {@link Instance}.
|
|
46
|
+
*/
|
|
47
|
+
logLikelihoodContinuous(classLabel, instance) {
|
|
48
|
+
let logLikelihood = Math.log(this.priorDistribution.getProbability(classLabel));
|
|
49
|
+
for (let i = 0; i < instance.attributeSize(); i++) {
|
|
50
|
+
let xi = instance.getAttribute(i).getValue();
|
|
51
|
+
let mi = this.classMeans.get(classLabel).getValue(i);
|
|
52
|
+
let si = this.classDeviations.get(classLabel).getValue(i);
|
|
53
|
+
if (si != 0) {
|
|
54
|
+
logLikelihood += -0.5 * Math.pow((xi - mi) / si, 2);
|
|
87
55
|
}
|
|
88
|
-
return logLikelihood;
|
|
89
56
|
}
|
|
90
|
-
|
|
57
|
+
return logLikelihood;
|
|
58
|
+
}
|
|
59
|
+
/**
|
|
60
|
+
* The logLikelihoodDiscrete method takes an {@link Instance} and a class label as inputs. First it gets the logarithm
|
|
61
|
+
* of given class label's probability via prior distribution as logLikelihood and gets the class attribute distribution of given class label.
|
|
62
|
+
* Then it loops times of given instance attribute size, and accumulates the logLikelihood by calculating the logarithm of
|
|
63
|
+
* corresponding attribute distribution's smoothed probability by using laplace smoothing on xi.
|
|
64
|
+
*
|
|
65
|
+
* @param classLabel String input class label.
|
|
66
|
+
* @param instance {@link Instance} input.
|
|
67
|
+
* @return The log likelihood of given class label and {@link Instance}.
|
|
68
|
+
*/
|
|
69
|
+
logLikelihoodDiscrete(classLabel, instance) {
|
|
70
|
+
let logLikelihood = Math.log(this.priorDistribution.getProbability(classLabel));
|
|
71
|
+
let attributeDistributions = this.classAttributeDistributions.get(classLabel);
|
|
72
|
+
for (let i = 0; i < instance.attributeSize(); i++) {
|
|
73
|
+
let xi = instance.getAttribute(i).getValue();
|
|
74
|
+
logLikelihood += Math.log(attributeDistributions[i].getProbabilityLaplaceSmoothing(xi));
|
|
91
75
|
}
|
|
92
|
-
|
|
93
|
-
|
|
94
|
-
|
|
95
|
-
|
|
96
|
-
|
|
97
|
-
|
|
98
|
-
|
|
99
|
-
|
|
100
|
-
|
|
101
|
-
|
|
102
|
-
|
|
103
|
-
|
|
104
|
-
|
|
105
|
-
|
|
106
|
-
|
|
76
|
+
return logLikelihood;
|
|
77
|
+
}
|
|
78
|
+
saveTxt(fileName) {
|
|
79
|
+
}
|
|
80
|
+
/**
|
|
81
|
+
* Training algorithm for Naive Bayes algorithm with a continuous data set.
|
|
82
|
+
*
|
|
83
|
+
* @param classLists Instances are divided into K lists, where each list contains only instances from a single class
|
|
84
|
+
*/
|
|
85
|
+
trainContinuousVersion(classLists) {
|
|
86
|
+
this.classMeans = new Map();
|
|
87
|
+
this.classDeviations = new Map();
|
|
88
|
+
for (let i = 0; i < classLists.size(); i++) {
|
|
89
|
+
let classLabel = classLists.get(i).getClassLabel();
|
|
90
|
+
let averageVector = classLists.get(i).average().toVector();
|
|
91
|
+
this.classMeans.set(classLabel, averageVector);
|
|
92
|
+
let standardDeviationVector = classLists.get(i).standardDeviation().toVector();
|
|
93
|
+
this.classDeviations.set(classLabel, standardDeviationVector);
|
|
107
94
|
}
|
|
108
|
-
|
|
109
|
-
|
|
110
|
-
|
|
111
|
-
|
|
112
|
-
|
|
113
|
-
|
|
114
|
-
|
|
115
|
-
|
|
116
|
-
|
|
95
|
+
}
|
|
96
|
+
/**
|
|
97
|
+
* Training algorithm for Naive Bayes algorithm with a discrete data set.
|
|
98
|
+
* @param classLists Instances are divided into K lists, where each list contains only instances from a single class
|
|
99
|
+
*/
|
|
100
|
+
trainDiscreteVersion(classLists) {
|
|
101
|
+
this.classAttributeDistributions = new Map();
|
|
102
|
+
for (let i = 0; i < classLists.size(); i++) {
|
|
103
|
+
this.classAttributeDistributions.set(classLists.get(i).getClassLabel(), classLists.get(i).allAttributesDistribution());
|
|
117
104
|
}
|
|
118
|
-
|
|
119
|
-
|
|
120
|
-
|
|
121
|
-
|
|
122
|
-
|
|
123
|
-
|
|
124
|
-
|
|
125
|
-
|
|
126
|
-
|
|
127
|
-
|
|
128
|
-
|
|
129
|
-
|
|
130
|
-
else {
|
|
131
|
-
this.trainContinuousVersion(classLists);
|
|
132
|
-
}
|
|
105
|
+
}
|
|
106
|
+
/**
|
|
107
|
+
* Training algorithm for Naive Bayes algorithm. It basically calls trainContinuousVersion for continuous data sets,
|
|
108
|
+
* trainDiscreteVersion for discrete data sets.
|
|
109
|
+
* @param trainSet Training data given to the algorithm
|
|
110
|
+
* @param parameters -
|
|
111
|
+
*/
|
|
112
|
+
train(trainSet, parameters) {
|
|
113
|
+
this.priorDistribution = trainSet.classDistribution();
|
|
114
|
+
let classLists = new Partition_1.Partition(trainSet);
|
|
115
|
+
if (classLists.get(0).get(0).getAttribute(0) instanceof DiscreteAttribute_1.DiscreteAttribute) {
|
|
116
|
+
this.trainDiscreteVersion(classLists);
|
|
133
117
|
}
|
|
134
|
-
|
|
135
|
-
|
|
136
|
-
* @param fileName File name of the naive Bayes model.
|
|
137
|
-
*/
|
|
138
|
-
loadModel(fileName) {
|
|
139
|
-
this.constructor3(fileName);
|
|
118
|
+
else {
|
|
119
|
+
this.trainContinuousVersion(classLists);
|
|
140
120
|
}
|
|
141
121
|
}
|
|
142
|
-
|
|
143
|
-
|
|
122
|
+
/**
|
|
123
|
+
* Loads the naive Bayes model from an input file.
|
|
124
|
+
* @param fileName File name of the naive Bayes model.
|
|
125
|
+
*/
|
|
126
|
+
loadModel(fileName) {
|
|
127
|
+
this.constructor3(fileName);
|
|
128
|
+
}
|
|
129
|
+
}
|
|
130
|
+
exports.NaiveBayesModel = NaiveBayesModel;
|
|
144
131
|
//# sourceMappingURL=NaiveBayesModel.js.map
|
|
@@ -1 +1 @@
|
|
|
1
|
-
{"version":3,"file":"NaiveBayesModel.js","sourceRoot":"","sources":["../../../source/Model/Parametric/NaiveBayesModel.ts"],"names":[],"mappings":"
|
|
1
|
+
{"version":3,"file":"NaiveBayesModel.js","sourceRoot":"","sources":["../../../source/Model/Parametric/NaiveBayesModel.ts"],"names":[],"mappings":"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"}
|