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,118 +1,111 @@
|
|
|
1
|
-
|
|
2
|
-
|
|
3
|
-
|
|
4
|
-
|
|
1
|
+
"use strict";
|
|
2
|
+
Object.defineProperty(exports, "__esModule", { value: true });
|
|
3
|
+
exports.KnnModel = void 0;
|
|
4
|
+
const Model_1 = require("../Model");
|
|
5
|
+
const InstanceList_1 = require("../../InstanceList/InstanceList");
|
|
6
|
+
const CompositeInstance_1 = require("../../Instance/CompositeInstance");
|
|
7
|
+
const KnnInstance_1 = require("./KnnInstance");
|
|
8
|
+
const EuclidianDistance_1 = require("../../DistanceMetric/EuclidianDistance");
|
|
9
|
+
const FileContents_1 = require("nlptoolkit-util/dist/FileContents");
|
|
10
|
+
class KnnModel extends Model_1.Model {
|
|
11
|
+
data;
|
|
12
|
+
k;
|
|
13
|
+
distanceMetric;
|
|
14
|
+
/**
|
|
15
|
+
* Constructor that sets the data {@link InstanceList}, k value and the {@link DistanceMetric}.
|
|
16
|
+
*
|
|
17
|
+
* @param data {@link InstanceList} input.
|
|
18
|
+
* @param k K value.
|
|
19
|
+
* @param distanceMetric {@link DistanceMetric} input.
|
|
20
|
+
*/
|
|
21
|
+
constructor1(data, k, distanceMetric) {
|
|
22
|
+
this.data = data;
|
|
23
|
+
this.k = k;
|
|
24
|
+
this.distanceMetric = distanceMetric;
|
|
5
25
|
}
|
|
6
|
-
|
|
7
|
-
|
|
26
|
+
/**
|
|
27
|
+
* Loads a K-nearest neighbor model from an input model file.
|
|
28
|
+
* @param fileName Model file name.
|
|
29
|
+
*/
|
|
30
|
+
constructor2(fileName) {
|
|
31
|
+
this.distanceMetric = new EuclidianDistance_1.EuclidianDistance();
|
|
32
|
+
let input = new FileContents_1.FileContents(fileName);
|
|
33
|
+
this.k = parseInt(input.readLine());
|
|
34
|
+
this.data = this.loadInstanceList(input);
|
|
8
35
|
}
|
|
9
|
-
|
|
10
|
-
|
|
11
|
-
|
|
12
|
-
|
|
13
|
-
|
|
14
|
-
|
|
15
|
-
|
|
16
|
-
|
|
17
|
-
|
|
18
|
-
|
|
19
|
-
|
|
20
|
-
|
|
21
|
-
* Constructor that sets the data {@link InstanceList}, k value and the {@link DistanceMetric}.
|
|
22
|
-
*
|
|
23
|
-
* @param data {@link InstanceList} input.
|
|
24
|
-
* @param k K value.
|
|
25
|
-
* @param distanceMetric {@link DistanceMetric} input.
|
|
26
|
-
*/
|
|
27
|
-
constructor1(data, k, distanceMetric) {
|
|
28
|
-
this.data = data;
|
|
29
|
-
this.k = k;
|
|
30
|
-
this.distanceMetric = distanceMetric;
|
|
36
|
+
/**
|
|
37
|
+
* The predict method takes an {@link Instance} as an input and finds the nearest neighbors of given instance. Then
|
|
38
|
+
* it returns the first possible class label as the predicted class.
|
|
39
|
+
*
|
|
40
|
+
* @param instance {@link Instance} to make prediction.
|
|
41
|
+
* @return The first possible class label as the predicted class.
|
|
42
|
+
*/
|
|
43
|
+
predict(instance) {
|
|
44
|
+
let nearestNeighbors = this.nearestNeighbors(instance);
|
|
45
|
+
let predictedClass;
|
|
46
|
+
if (instance instanceof CompositeInstance_1.CompositeInstance && nearestNeighbors.size() == 0) {
|
|
47
|
+
predictedClass = instance.getPossibleClassLabels()[0];
|
|
31
48
|
}
|
|
32
|
-
|
|
33
|
-
|
|
34
|
-
* @param fileName Model file name.
|
|
35
|
-
*/
|
|
36
|
-
constructor2(fileName) {
|
|
37
|
-
this.distanceMetric = new EuclidianDistance_1.EuclidianDistance();
|
|
38
|
-
let input = new FileContents_1.FileContents(fileName);
|
|
39
|
-
this.k = parseInt(input.readLine());
|
|
40
|
-
this.data = this.loadInstanceList(input);
|
|
49
|
+
else {
|
|
50
|
+
predictedClass = Model_1.Model.getMaximum(nearestNeighbors.getClassLabels());
|
|
41
51
|
}
|
|
42
|
-
|
|
43
|
-
|
|
44
|
-
|
|
45
|
-
|
|
46
|
-
|
|
47
|
-
|
|
48
|
-
|
|
49
|
-
|
|
50
|
-
|
|
51
|
-
|
|
52
|
-
|
|
53
|
-
|
|
54
|
-
|
|
55
|
-
|
|
56
|
-
|
|
57
|
-
|
|
58
|
-
|
|
59
|
-
|
|
60
|
-
|
|
61
|
-
|
|
62
|
-
|
|
63
|
-
|
|
64
|
-
|
|
65
|
-
|
|
66
|
-
|
|
67
|
-
|
|
52
|
+
return predictedClass;
|
|
53
|
+
}
|
|
54
|
+
/**
|
|
55
|
+
* Calculates the posterior probability distribution for the given instance according to K-means model.
|
|
56
|
+
* @param instance Instance for which posterior probability distribution is calculated.
|
|
57
|
+
* @return Posterior probability distribution for the given instance.
|
|
58
|
+
*/
|
|
59
|
+
predictProbability(instance) {
|
|
60
|
+
let nearestNeighbors = this.nearestNeighbors(instance);
|
|
61
|
+
return nearestNeighbors.classDistribution().getProbabilityDistribution();
|
|
62
|
+
}
|
|
63
|
+
/**
|
|
64
|
+
* The nearestNeighbors method takes an {@link Instance} as an input. First it gets the possible class labels, then loops
|
|
65
|
+
* through the data {@link InstanceList} and creates new {@link Array} of {@link KnnInstance}s and adds the corresponding data with
|
|
66
|
+
* the distance between data and given instance. After sorting this newly created ArrayList, it loops k times and
|
|
67
|
+
* returns the first k instances as an {@link InstanceList}.
|
|
68
|
+
*
|
|
69
|
+
* @param instance {@link Instance} to find nearest neighbors/
|
|
70
|
+
* @return The first k instances which are nearest to the given instance as an {@link InstanceList}.
|
|
71
|
+
*/
|
|
72
|
+
nearestNeighbors(instance) {
|
|
73
|
+
let result = new InstanceList_1.InstanceList();
|
|
74
|
+
let instances = new Array();
|
|
75
|
+
let possibleClassLabels = undefined;
|
|
76
|
+
if (instance instanceof CompositeInstance_1.CompositeInstance) {
|
|
77
|
+
possibleClassLabels = instance.getPossibleClassLabels();
|
|
68
78
|
}
|
|
69
|
-
|
|
70
|
-
|
|
71
|
-
|
|
72
|
-
* the distance between data and given instance. After sorting this newly created ArrayList, it loops k times and
|
|
73
|
-
* returns the first k instances as an {@link InstanceList}.
|
|
74
|
-
*
|
|
75
|
-
* @param instance {@link Instance} to find nearest neighbors/
|
|
76
|
-
* @return The first k instances which are nearest to the given instance as an {@link InstanceList}.
|
|
77
|
-
*/
|
|
78
|
-
nearestNeighbors(instance) {
|
|
79
|
-
let result = new InstanceList_1.InstanceList();
|
|
80
|
-
let instances = new Array();
|
|
81
|
-
let possibleClassLabels = undefined;
|
|
82
|
-
if (instance instanceof CompositeInstance_1.CompositeInstance) {
|
|
83
|
-
possibleClassLabels = instance.getPossibleClassLabels();
|
|
84
|
-
}
|
|
85
|
-
for (let i = 0; i < this.data.size(); i++) {
|
|
86
|
-
if (!(instance instanceof CompositeInstance_1.CompositeInstance) || possibleClassLabels.includes(this.data.get(i).getClassLabel())) {
|
|
87
|
-
instances.push(new KnnInstance_1.KnnInstance(this.data.get(i), this.distanceMetric.distance(this.data.get(i), instance)));
|
|
88
|
-
}
|
|
79
|
+
for (let i = 0; i < this.data.size(); i++) {
|
|
80
|
+
if (!(instance instanceof CompositeInstance_1.CompositeInstance) || possibleClassLabels.includes(this.data.get(i).getClassLabel())) {
|
|
81
|
+
instances.push(new KnnInstance_1.KnnInstance(this.data.get(i), this.distanceMetric.distance(this.data.get(i), instance)));
|
|
89
82
|
}
|
|
90
|
-
instances.sort((a, b) => a.getDistance() < b.getDistance() ? -1 : a.getDistance() > b.getDistance() ? 1 : 0);
|
|
91
|
-
for (let i = 0; i < Math.min(this.k, instances.length); i++) {
|
|
92
|
-
result.add(instances[i].getInstance());
|
|
93
|
-
}
|
|
94
|
-
return result;
|
|
95
|
-
}
|
|
96
|
-
saveTxt(fileName) {
|
|
97
|
-
}
|
|
98
|
-
/**
|
|
99
|
-
* Training algorithm for K-nearest neighbor classifier.
|
|
100
|
-
*
|
|
101
|
-
* @param trainSet Training data given to the algorithm.
|
|
102
|
-
* @param parameters K: k parameter of the K-nearest neighbor algorithm
|
|
103
|
-
* distanceMetric: distance metric used to calculate the distance between two instances.
|
|
104
|
-
*/
|
|
105
|
-
train(trainSet, parameters) {
|
|
106
|
-
this.constructor1(trainSet, parameters.getK(), parameters.getDistanceMetric());
|
|
107
83
|
}
|
|
108
|
-
|
|
109
|
-
|
|
110
|
-
|
|
111
|
-
*/
|
|
112
|
-
loadModel(fileName) {
|
|
113
|
-
this.constructor2(fileName);
|
|
84
|
+
instances.sort((a, b) => a.getDistance() < b.getDistance() ? -1 : a.getDistance() > b.getDistance() ? 1 : 0);
|
|
85
|
+
for (let i = 0; i < Math.min(this.k, instances.length); i++) {
|
|
86
|
+
result.add(instances[i].getInstance());
|
|
114
87
|
}
|
|
88
|
+
return result;
|
|
89
|
+
}
|
|
90
|
+
saveTxt(fileName) {
|
|
91
|
+
}
|
|
92
|
+
/**
|
|
93
|
+
* Training algorithm for K-nearest neighbor classifier.
|
|
94
|
+
*
|
|
95
|
+
* @param trainSet Training data given to the algorithm.
|
|
96
|
+
* @param parameters K: k parameter of the K-nearest neighbor algorithm
|
|
97
|
+
* distanceMetric: distance metric used to calculate the distance between two instances.
|
|
98
|
+
*/
|
|
99
|
+
train(trainSet, parameters) {
|
|
100
|
+
this.constructor1(trainSet, parameters.getK(), parameters.getDistanceMetric());
|
|
101
|
+
}
|
|
102
|
+
/**
|
|
103
|
+
* Loads the K-nearest neighbor model from an input file.
|
|
104
|
+
* @param fileName File name of the K-nearest neighbor model.
|
|
105
|
+
*/
|
|
106
|
+
loadModel(fileName) {
|
|
107
|
+
this.constructor2(fileName);
|
|
115
108
|
}
|
|
116
|
-
|
|
117
|
-
|
|
109
|
+
}
|
|
110
|
+
exports.KnnModel = KnnModel;
|
|
118
111
|
//# sourceMappingURL=KnnModel.js.map
|
|
@@ -1 +1 @@
|
|
|
1
|
-
{"version":3,"file":"KnnModel.js","sourceRoot":"","sources":["../../../source/Model/NonParametric/KnnModel.ts"],"names":[],"mappings":"
|
|
1
|
+
{"version":3,"file":"KnnModel.js","sourceRoot":"","sources":["../../../source/Model/NonParametric/KnnModel.ts"],"names":[],"mappings":"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"}
|
|
@@ -1,104 +1,95 @@
|
|
|
1
|
-
|
|
2
|
-
|
|
3
|
-
|
|
4
|
-
|
|
5
|
-
|
|
6
|
-
|
|
7
|
-
|
|
8
|
-
|
|
9
|
-
|
|
10
|
-
|
|
11
|
-
|
|
12
|
-
|
|
13
|
-
|
|
14
|
-
|
|
15
|
-
|
|
16
|
-
|
|
17
|
-
|
|
18
|
-
|
|
19
|
-
|
|
20
|
-
|
|
21
|
-
|
|
22
|
-
|
|
23
|
-
|
|
24
|
-
|
|
25
|
-
|
|
26
|
-
|
|
27
|
-
|
|
28
|
-
|
|
1
|
+
"use strict";
|
|
2
|
+
Object.defineProperty(exports, "__esModule", { value: true });
|
|
3
|
+
exports.GaussianModel = void 0;
|
|
4
|
+
const DiscreteDistribution_1 = require("nlptoolkit-math/dist/DiscreteDistribution");
|
|
5
|
+
const ValidatedModel_1 = require("../ValidatedModel");
|
|
6
|
+
const CompositeInstance_1 = require("../../Instance/CompositeInstance");
|
|
7
|
+
const Vector_1 = require("nlptoolkit-math/dist/Vector");
|
|
8
|
+
class GaussianModel extends ValidatedModel_1.ValidatedModel {
|
|
9
|
+
priorDistribution;
|
|
10
|
+
/**
|
|
11
|
+
* The predict method takes an Instance as an input. First it gets the size of prior distribution and loops this size times.
|
|
12
|
+
* Then it gets the possible class labels and and calculates metric value. At the end, it returns the class which has the
|
|
13
|
+
* maximum value of metric.
|
|
14
|
+
*
|
|
15
|
+
* @param instance {@link Instance} to predict.
|
|
16
|
+
* @return The class which has the maximum value of metric.
|
|
17
|
+
*/
|
|
18
|
+
predict(instance) {
|
|
19
|
+
let maxMetric = Number.NEGATIVE_INFINITY;
|
|
20
|
+
let predictedClass, size;
|
|
21
|
+
if (instance instanceof CompositeInstance_1.CompositeInstance) {
|
|
22
|
+
predictedClass = instance.getPossibleClassLabels()[0];
|
|
23
|
+
size = instance.getPossibleClassLabels().length;
|
|
24
|
+
}
|
|
25
|
+
else {
|
|
26
|
+
predictedClass = this.priorDistribution.getMaxItem();
|
|
27
|
+
size = this.priorDistribution.size;
|
|
28
|
+
}
|
|
29
|
+
for (let i = 0; i < size; i++) {
|
|
30
|
+
let Ci;
|
|
29
31
|
if (instance instanceof CompositeInstance_1.CompositeInstance) {
|
|
30
|
-
|
|
31
|
-
size = instance.getPossibleClassLabels().length;
|
|
32
|
+
Ci = instance.getPossibleClassLabels()[i];
|
|
32
33
|
}
|
|
33
34
|
else {
|
|
34
|
-
|
|
35
|
-
size = this.priorDistribution.size;
|
|
35
|
+
Ci = this.priorDistribution.getItem(i);
|
|
36
36
|
}
|
|
37
|
-
|
|
38
|
-
let Ci;
|
|
39
|
-
if (
|
|
40
|
-
|
|
41
|
-
|
|
42
|
-
else {
|
|
43
|
-
Ci = this.priorDistribution.getItem(i);
|
|
44
|
-
}
|
|
45
|
-
if (this.priorDistribution.containsItem(Ci)) {
|
|
46
|
-
let metric = this.calculateMetric(instance, Ci);
|
|
47
|
-
if (metric > maxMetric) {
|
|
48
|
-
maxMetric = metric;
|
|
49
|
-
predictedClass = Ci;
|
|
50
|
-
}
|
|
37
|
+
if (this.priorDistribution.containsItem(Ci)) {
|
|
38
|
+
let metric = this.calculateMetric(instance, Ci);
|
|
39
|
+
if (metric > maxMetric) {
|
|
40
|
+
maxMetric = metric;
|
|
41
|
+
predictedClass = Ci;
|
|
51
42
|
}
|
|
52
43
|
}
|
|
53
|
-
return predictedClass;
|
|
54
44
|
}
|
|
55
|
-
|
|
56
|
-
|
|
57
|
-
|
|
58
|
-
|
|
59
|
-
|
|
60
|
-
|
|
61
|
-
|
|
62
|
-
|
|
63
|
-
|
|
64
|
-
|
|
65
|
-
|
|
66
|
-
|
|
67
|
-
|
|
68
|
-
|
|
69
|
-
|
|
45
|
+
return predictedClass;
|
|
46
|
+
}
|
|
47
|
+
/**
|
|
48
|
+
* Loads the prior probability distribution from an input model file.
|
|
49
|
+
* @param input Input model file.
|
|
50
|
+
* @return Prior probability distribution.
|
|
51
|
+
* @throws IOException If the input file can not be read, the method throws IOException.
|
|
52
|
+
*/
|
|
53
|
+
loadPriorDistribution(input) {
|
|
54
|
+
let size = parseInt(input.readLine());
|
|
55
|
+
this.priorDistribution = new DiscreteDistribution_1.DiscreteDistribution();
|
|
56
|
+
for (let i = 0; i < size; i++) {
|
|
57
|
+
let line = input.readLine();
|
|
58
|
+
let items = line.split(" ");
|
|
59
|
+
for (let j = 0; j < parseInt(items[1]); j++) {
|
|
60
|
+
this.priorDistribution.addItem(items[0]);
|
|
70
61
|
}
|
|
71
|
-
return size;
|
|
72
62
|
}
|
|
73
|
-
|
|
74
|
-
|
|
75
|
-
|
|
76
|
-
|
|
77
|
-
|
|
78
|
-
|
|
79
|
-
|
|
80
|
-
|
|
81
|
-
|
|
82
|
-
|
|
83
|
-
|
|
84
|
-
|
|
85
|
-
|
|
86
|
-
|
|
87
|
-
|
|
88
|
-
|
|
89
|
-
|
|
63
|
+
return size;
|
|
64
|
+
}
|
|
65
|
+
/**
|
|
66
|
+
* Loads hash map of vectors from input model file.
|
|
67
|
+
* @param input Input model file.
|
|
68
|
+
* @param size Number of vectors to be read from input model file.
|
|
69
|
+
* @return Hash map of vectors.
|
|
70
|
+
* @throws IOException If the input file can not be read, the method throws IOException.
|
|
71
|
+
*/
|
|
72
|
+
loadVectors(input, size) {
|
|
73
|
+
let map = new Map();
|
|
74
|
+
for (let i = 0; i < size; i++) {
|
|
75
|
+
let line = input.readLine();
|
|
76
|
+
let items = line.split(" ");
|
|
77
|
+
let vector = new Vector_1.Vector(parseInt(items[1]), 0);
|
|
78
|
+
for (let j = 2; j < items.length; j++) {
|
|
79
|
+
vector.setValue(j - 2, parseFloat(items[j]));
|
|
90
80
|
}
|
|
91
|
-
|
|
92
|
-
}
|
|
93
|
-
/**
|
|
94
|
-
* Calculates the posterior probability distribution for the given instance according to Gaussian model.
|
|
95
|
-
* @param instance Instance for which posterior probability distribution is calculated.
|
|
96
|
-
* @return Posterior probability distribution for the given instance.
|
|
97
|
-
*/
|
|
98
|
-
predictProbability(instance) {
|
|
99
|
-
return undefined;
|
|
81
|
+
map.set(items[0], vector);
|
|
100
82
|
}
|
|
83
|
+
return map;
|
|
84
|
+
}
|
|
85
|
+
/**
|
|
86
|
+
* Calculates the posterior probability distribution for the given instance according to Gaussian model.
|
|
87
|
+
* @param instance Instance for which posterior probability distribution is calculated.
|
|
88
|
+
* @return Posterior probability distribution for the given instance.
|
|
89
|
+
*/
|
|
90
|
+
predictProbability(instance) {
|
|
91
|
+
return undefined;
|
|
101
92
|
}
|
|
102
|
-
|
|
103
|
-
|
|
93
|
+
}
|
|
94
|
+
exports.GaussianModel = GaussianModel;
|
|
104
95
|
//# sourceMappingURL=GaussianModel.js.map
|
|
@@ -1 +1 @@
|
|
|
1
|
-
{"version":3,"file":"GaussianModel.js","sourceRoot":"","sources":["../../../source/Model/Parametric/GaussianModel.ts"],"names":[],"mappings":"
|
|
1
|
+
{"version":3,"file":"GaussianModel.js","sourceRoot":"","sources":["../../../source/Model/Parametric/GaussianModel.ts"],"names":[],"mappings":"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"}
|
|
@@ -1,73 +1,65 @@
|
|
|
1
|
-
|
|
2
|
-
|
|
3
|
-
|
|
4
|
-
|
|
1
|
+
"use strict";
|
|
2
|
+
Object.defineProperty(exports, "__esModule", { value: true });
|
|
3
|
+
exports.KMeansModel = void 0;
|
|
4
|
+
const GaussianModel_1 = require("./GaussianModel");
|
|
5
|
+
const InstanceList_1 = require("../../InstanceList/InstanceList");
|
|
6
|
+
const FileContents_1 = require("nlptoolkit-util/dist/FileContents");
|
|
7
|
+
const EuclidianDistance_1 = require("../../DistanceMetric/EuclidianDistance");
|
|
8
|
+
const Partition_1 = require("../../InstanceList/Partition");
|
|
9
|
+
class KMeansModel extends GaussianModel_1.GaussianModel {
|
|
10
|
+
classMeans;
|
|
11
|
+
distanceMetric;
|
|
12
|
+
/**
|
|
13
|
+
* Loads a K-means model from an input model file.
|
|
14
|
+
* @param fileName Model file name.
|
|
15
|
+
*/
|
|
16
|
+
constructor2(fileName) {
|
|
17
|
+
this.distanceMetric = new EuclidianDistance_1.EuclidianDistance();
|
|
18
|
+
let input = new FileContents_1.FileContents(fileName);
|
|
19
|
+
this.loadPriorDistribution(input);
|
|
20
|
+
this.classMeans = this.loadInstanceList(input);
|
|
5
21
|
}
|
|
6
|
-
|
|
7
|
-
|
|
8
|
-
|
|
9
|
-
|
|
10
|
-
|
|
11
|
-
|
|
12
|
-
|
|
13
|
-
|
|
14
|
-
|
|
15
|
-
|
|
16
|
-
|
|
17
|
-
|
|
18
|
-
|
|
19
|
-
/**
|
|
20
|
-
* Loads a K-means model from an input model file.
|
|
21
|
-
* @param fileName Model file name.
|
|
22
|
-
*/
|
|
23
|
-
constructor2(fileName) {
|
|
24
|
-
this.distanceMetric = new EuclidianDistance_1.EuclidianDistance();
|
|
25
|
-
let input = new FileContents_1.FileContents(fileName);
|
|
26
|
-
this.loadPriorDistribution(input);
|
|
27
|
-
this.classMeans = this.loadInstanceList(input);
|
|
28
|
-
}
|
|
29
|
-
/**
|
|
30
|
-
* The calculateMetric method takes an {@link Instance} and a String as inputs. It loops through the class means, if
|
|
31
|
-
* the corresponding class label is same as the given String it returns the negated distance between given instance and the
|
|
32
|
-
* current item of class means. Otherwise it returns the smallest negative number.
|
|
33
|
-
*
|
|
34
|
-
* @param instance {@link Instance} input.
|
|
35
|
-
* @param Ci String input.
|
|
36
|
-
* @return The negated distance between given instance and the current item of class means.
|
|
37
|
-
*/
|
|
38
|
-
calculateMetric(instance, Ci) {
|
|
39
|
-
for (let i = 0; i < this.classMeans.size(); i++) {
|
|
40
|
-
if (this.classMeans.get(i).getClassLabel() == Ci) {
|
|
41
|
-
return -this.distanceMetric.distance(instance, this.classMeans.get(i));
|
|
42
|
-
}
|
|
43
|
-
}
|
|
44
|
-
return Number.NEGATIVE_INFINITY;
|
|
45
|
-
}
|
|
46
|
-
saveTxt(fileName) {
|
|
47
|
-
}
|
|
48
|
-
/**
|
|
49
|
-
* Training algorithm for K-Means classifier. K-Means finds the mean of each class for training.
|
|
50
|
-
*
|
|
51
|
-
* @param trainSet Training data given to the algorithm.
|
|
52
|
-
* @param parameters distanceMetric: distance metric used to calculate the distance between two instances.
|
|
53
|
-
*/
|
|
54
|
-
train(trainSet, parameters) {
|
|
55
|
-
this.priorDistribution = trainSet.classDistribution();
|
|
56
|
-
this.classMeans = new InstanceList_1.InstanceList();
|
|
57
|
-
let classLists = new Partition_1.Partition(trainSet);
|
|
58
|
-
for (let i = 0; i < classLists.size(); i++) {
|
|
59
|
-
this.classMeans.add(classLists.get(i).average());
|
|
22
|
+
/**
|
|
23
|
+
* The calculateMetric method takes an {@link Instance} and a String as inputs. It loops through the class means, if
|
|
24
|
+
* the corresponding class label is same as the given String it returns the negated distance between given instance and the
|
|
25
|
+
* current item of class means. Otherwise it returns the smallest negative number.
|
|
26
|
+
*
|
|
27
|
+
* @param instance {@link Instance} input.
|
|
28
|
+
* @param Ci String input.
|
|
29
|
+
* @return The negated distance between given instance and the current item of class means.
|
|
30
|
+
*/
|
|
31
|
+
calculateMetric(instance, Ci) {
|
|
32
|
+
for (let i = 0; i < this.classMeans.size(); i++) {
|
|
33
|
+
if (this.classMeans.get(i).getClassLabel() == Ci) {
|
|
34
|
+
return -this.distanceMetric.distance(instance, this.classMeans.get(i));
|
|
60
35
|
}
|
|
61
|
-
this.distanceMetric = parameters.getDistanceMetric();
|
|
62
36
|
}
|
|
63
|
-
|
|
64
|
-
|
|
65
|
-
|
|
66
|
-
|
|
67
|
-
|
|
68
|
-
|
|
37
|
+
return Number.NEGATIVE_INFINITY;
|
|
38
|
+
}
|
|
39
|
+
saveTxt(fileName) {
|
|
40
|
+
}
|
|
41
|
+
/**
|
|
42
|
+
* Training algorithm for K-Means classifier. K-Means finds the mean of each class for training.
|
|
43
|
+
*
|
|
44
|
+
* @param trainSet Training data given to the algorithm.
|
|
45
|
+
* @param parameters distanceMetric: distance metric used to calculate the distance between two instances.
|
|
46
|
+
*/
|
|
47
|
+
train(trainSet, parameters) {
|
|
48
|
+
this.priorDistribution = trainSet.classDistribution();
|
|
49
|
+
this.classMeans = new InstanceList_1.InstanceList();
|
|
50
|
+
let classLists = new Partition_1.Partition(trainSet);
|
|
51
|
+
for (let i = 0; i < classLists.size(); i++) {
|
|
52
|
+
this.classMeans.add(classLists.get(i).average());
|
|
69
53
|
}
|
|
54
|
+
this.distanceMetric = parameters.getDistanceMetric();
|
|
55
|
+
}
|
|
56
|
+
/**
|
|
57
|
+
* Loads the K-means model from an input file.
|
|
58
|
+
* @param fileName File name of the K-means model.
|
|
59
|
+
*/
|
|
60
|
+
loadModel(fileName) {
|
|
61
|
+
this.constructor2(fileName);
|
|
70
62
|
}
|
|
71
|
-
|
|
72
|
-
|
|
63
|
+
}
|
|
64
|
+
exports.KMeansModel = KMeansModel;
|
|
73
65
|
//# sourceMappingURL=KMeansModel.js.map
|
|
@@ -1 +1 @@
|
|
|
1
|
-
{"version":3,"file":"KMeansModel.js","sourceRoot":"","sources":["../../../source/Model/Parametric/KMeansModel.ts"],"names":[],"mappings":"
|
|
1
|
+
{"version":3,"file":"KMeansModel.js","sourceRoot":"","sources":["../../../source/Model/Parametric/KMeansModel.ts"],"names":[],"mappings":";;;AAAA,mDAA8C;AAC9C,kEAA6D;AAG7D,oEAA+D;AAC/D,8EAAyE;AAEzE,4DAAuD;AAGvD,MAAa,WAAY,SAAQ,6BAAa;IAElC,UAAU,CAAc;IACxB,cAAc,CAAgB;IAEtC;;;OAGG;IACH,YAAY,CAAC,QAAgB;QACzB,IAAI,CAAC,cAAc,GAAG,IAAI,qCAAiB,EAAE,CAAA;QAC7C,IAAI,KAAK,GAAG,IAAI,2BAAY,CAAC,QAAQ,CAAC,CAAA;QACtC,IAAI,CAAC,qBAAqB,CAAC,KAAK,CAAC,CAAA;QACjC,IAAI,CAAC,UAAU,GAAG,IAAI,CAAC,gBAAgB,CAAC,KAAK,CAAC,CAAA;IAClD,CAAC;IAED;;;;;;;;OAQG;IACH,eAAe,CAAC,QAAkB,EAAE,EAAU;QAC1C,KAAK,IAAI,CAAC,GAAG,CAAC,EAAE,CAAC,GAAG,IAAI,CAAC,UAAU,CAAC,IAAI,EAAE,EAAE,CAAC,EAAE,EAAE,CAAC;YAC9C,IAAI,IAAI,CAAC,UAAU,CAAC,GAAG,CAAC,CAAC,CAAC,CAAC,aAAa,EAAE,IAAI,EAAE,EAAE,CAAC;gBAC/C,OAAO,CAAC,IAAI,CAAC,cAAc,CAAC,QAAQ,CAAC,QAAQ,EAAE,IAAI,CAAC,UAAU,CAAC,GAAG,CAAC,CAAC,CAAC,CAAC,CAAC;YAC3E,CAAC;QACL,CAAC;QACD,OAAO,MAAM,CAAC,iBAAiB,CAAC;IACpC,CAAC;IAED,OAAO,CAAC,QAAgB;IACxB,CAAC;IAED;;;;;OAKG;IACH,KAAK,CAAC,QAAsB,EAAE,UAAqB;QAC/C,IAAI,CAAC,iBAAiB,GAAG,QAAQ,CAAC,iBAAiB,EAAE,CAAC;QACtD,IAAI,CAAC,UAAU,GAAG,IAAI,2BAAY,EAAE,CAAC;QACrC,IAAI,UAAU,GAAG,IAAI,qBAAS,CAAC,QAAQ,CAAC,CAAC;QACzC,KAAK,IAAI,CAAC,GAAG,CAAC,EAAE,CAAC,GAAG,UAAU,CAAC,IAAI,EAAE,EAAE,CAAC,EAAE,EAAE,CAAC;YACzC,IAAI,CAAC,UAAU,CAAC,GAAG,CAAC,UAAU,CAAC,GAAG,CAAC,CAAC,CAAC,CAAC,OAAO,EAAE,CAAC,CAAC;QACrD,CAAC;QACD,IAAI,CAAC,cAAc,GAAsB,UAAW,CAAC,iBAAiB,EAAE,CAAA;IAC5E,CAAC;IAED;;;OAGG;IACH,SAAS,CAAC,QAAgB;QACtB,IAAI,CAAC,YAAY,CAAC,QAAQ,CAAC,CAAA;IAC/B,CAAC;CAEJ;AA7DD,kCA6DC"}
|