nlptoolkit-classification 1.0.0

This diff represents the content of publicly available package versions that have been released to one of the supported registries. The information contained in this diff is provided for informational purposes only and reflects changes between package versions as they appear in their respective public registries.
Files changed (412) hide show
  1. package/README.md +161 -0
  2. package/datasets/bupa.data +345 -0
  3. package/datasets/car.data +1728 -0
  4. package/datasets/chess.data +28056 -0
  5. package/datasets/dermatology.data +366 -0
  6. package/datasets/iris.data +150 -0
  7. package/datasets/nursery.data +12960 -0
  8. package/datasets/tictactoe.data +958 -0
  9. package/dist/Attribute/Attribute.d.ts +4 -0
  10. package/dist/Attribute/Attribute.js +17 -0
  11. package/dist/Attribute/Attribute.js.map +1 -0
  12. package/dist/Attribute/AttributeType.d.ts +18 -0
  13. package/dist/Attribute/AttributeType.js +33 -0
  14. package/dist/Attribute/AttributeType.js.map +1 -0
  15. package/dist/Attribute/BinaryAttribute.d.ts +9 -0
  16. package/dist/Attribute/BinaryAttribute.js +26 -0
  17. package/dist/Attribute/BinaryAttribute.js.map +1 -0
  18. package/dist/Attribute/ContinuousAttribute.d.ts +30 -0
  19. package/dist/Attribute/ContinuousAttribute.js +59 -0
  20. package/dist/Attribute/ContinuousAttribute.js.map +1 -0
  21. package/dist/Attribute/DiscreteAttribute.d.ts +24 -0
  22. package/dist/Attribute/DiscreteAttribute.js +53 -0
  23. package/dist/Attribute/DiscreteAttribute.js.map +1 -0
  24. package/dist/Attribute/DiscreteIndexedAttribute.d.ts +27 -0
  25. package/dist/Attribute/DiscreteIndexedAttribute.js +61 -0
  26. package/dist/Attribute/DiscreteIndexedAttribute.js.map +1 -0
  27. package/dist/Classifier/Bagging.d.ts +16 -0
  28. package/dist/Classifier/Bagging.js +42 -0
  29. package/dist/Classifier/Bagging.js.map +1 -0
  30. package/dist/Classifier/C45.d.ts +13 -0
  31. package/dist/Classifier/C45.js +40 -0
  32. package/dist/Classifier/C45.js.map +1 -0
  33. package/dist/Classifier/C45Stump.d.ts +12 -0
  34. package/dist/Classifier/C45Stump.js +29 -0
  35. package/dist/Classifier/C45Stump.js.map +1 -0
  36. package/dist/Classifier/Classifier.d.ts +39 -0
  37. package/dist/Classifier/Classifier.js +72 -0
  38. package/dist/Classifier/Classifier.js.map +1 -0
  39. package/dist/Classifier/DeepNetwork.d.ts +13 -0
  40. package/dist/Classifier/DeepNetwork.js +31 -0
  41. package/dist/Classifier/DeepNetwork.js.map +1 -0
  42. package/dist/Classifier/Dummy.d.ts +13 -0
  43. package/dist/Classifier/Dummy.js +29 -0
  44. package/dist/Classifier/Dummy.js.map +1 -0
  45. package/dist/Classifier/KMeans.d.ts +12 -0
  46. package/dist/Classifier/KMeans.js +36 -0
  47. package/dist/Classifier/KMeans.js.map +1 -0
  48. package/dist/Classifier/Knn.d.ts +13 -0
  49. package/dist/Classifier/Knn.js +29 -0
  50. package/dist/Classifier/Knn.js.map +1 -0
  51. package/dist/Classifier/Lda.d.ts +12 -0
  52. package/dist/Classifier/Lda.js +52 -0
  53. package/dist/Classifier/Lda.js.map +1 -0
  54. package/dist/Classifier/LinearPerceptron.d.ts +14 -0
  55. package/dist/Classifier/LinearPerceptron.js +32 -0
  56. package/dist/Classifier/LinearPerceptron.js.map +1 -0
  57. package/dist/Classifier/MultiLayerPerceptron.d.ts +14 -0
  58. package/dist/Classifier/MultiLayerPerceptron.js +32 -0
  59. package/dist/Classifier/MultiLayerPerceptron.js.map +1 -0
  60. package/dist/Classifier/NaiveBayes.d.ts +25 -0
  61. package/dist/Classifier/NaiveBayes.js +67 -0
  62. package/dist/Classifier/NaiveBayes.js.map +1 -0
  63. package/dist/Classifier/Qda.d.ts +12 -0
  64. package/dist/Classifier/Qda.js +50 -0
  65. package/dist/Classifier/Qda.js.map +1 -0
  66. package/dist/Classifier/RandomClassifier.d.ts +12 -0
  67. package/dist/Classifier/RandomClassifier.js +32 -0
  68. package/dist/Classifier/RandomClassifier.js.map +1 -0
  69. package/dist/Classifier/RandomForest.d.ts +13 -0
  70. package/dist/Classifier/RandomForest.js +39 -0
  71. package/dist/Classifier/RandomForest.js.map +1 -0
  72. package/dist/DataSet/DataDefinition.d.ts +59 -0
  73. package/dist/DataSet/DataDefinition.js +108 -0
  74. package/dist/DataSet/DataDefinition.js.map +1 -0
  75. package/dist/DataSet/DataSet.d.ts +111 -0
  76. package/dist/DataSet/DataSet.js +286 -0
  77. package/dist/DataSet/DataSet.js.map +1 -0
  78. package/dist/DistanceMetric/DistanceMetric.d.ts +4 -0
  79. package/dist/DistanceMetric/DistanceMetric.js +13 -0
  80. package/dist/DistanceMetric/DistanceMetric.js.map +1 -0
  81. package/dist/DistanceMetric/EuclidianDistance.d.ts +13 -0
  82. package/dist/DistanceMetric/EuclidianDistance.js +43 -0
  83. package/dist/DistanceMetric/EuclidianDistance.js.map +1 -0
  84. package/dist/DistanceMetric/MahalanobisDistance.d.ts +20 -0
  85. package/dist/DistanceMetric/MahalanobisDistance.js +39 -0
  86. package/dist/DistanceMetric/MahalanobisDistance.js.map +1 -0
  87. package/dist/Experiment/BootstrapRun.d.ts +19 -0
  88. package/dist/Experiment/BootstrapRun.js +44 -0
  89. package/dist/Experiment/BootstrapRun.js.map +1 -0
  90. package/dist/Experiment/Experiment.d.ts +37 -0
  91. package/dist/Experiment/Experiment.js +57 -0
  92. package/dist/Experiment/Experiment.js.map +1 -0
  93. package/dist/Experiment/KFoldRun.d.ts +19 -0
  94. package/dist/Experiment/KFoldRun.js +43 -0
  95. package/dist/Experiment/KFoldRun.js.map +1 -0
  96. package/dist/Experiment/KFoldRunSeparateTest.d.ts +24 -0
  97. package/dist/Experiment/KFoldRunSeparateTest.js +51 -0
  98. package/dist/Experiment/KFoldRunSeparateTest.js.map +1 -0
  99. package/dist/Experiment/MultipleRun.d.ts +5 -0
  100. package/dist/Experiment/MultipleRun.js +13 -0
  101. package/dist/Experiment/MultipleRun.js.map +1 -0
  102. package/dist/Experiment/MxKFoldRun.d.ts +20 -0
  103. package/dist/Experiment/MxKFoldRun.js +44 -0
  104. package/dist/Experiment/MxKFoldRun.js.map +1 -0
  105. package/dist/Experiment/MxKFoldRunSeparateTest.d.ts +21 -0
  106. package/dist/Experiment/MxKFoldRunSeparateTest.js +48 -0
  107. package/dist/Experiment/MxKFoldRunSeparateTest.js.map +1 -0
  108. package/dist/Experiment/SingleRun.d.ts +5 -0
  109. package/dist/Experiment/SingleRun.js +13 -0
  110. package/dist/Experiment/SingleRun.js.map +1 -0
  111. package/dist/Experiment/SingleRunWithK.d.ts +19 -0
  112. package/dist/Experiment/SingleRunWithK.js +37 -0
  113. package/dist/Experiment/SingleRunWithK.js.map +1 -0
  114. package/dist/Experiment/StratifiedKFoldRun.d.ts +17 -0
  115. package/dist/Experiment/StratifiedKFoldRun.js +39 -0
  116. package/dist/Experiment/StratifiedKFoldRun.js.map +1 -0
  117. package/dist/Experiment/StratifiedKFoldRunSeparateTest.d.ts +18 -0
  118. package/dist/Experiment/StratifiedKFoldRunSeparateTest.js +43 -0
  119. package/dist/Experiment/StratifiedKFoldRunSeparateTest.js.map +1 -0
  120. package/dist/Experiment/StratifiedMxKFoldRun.d.ts +19 -0
  121. package/dist/Experiment/StratifiedMxKFoldRun.js +43 -0
  122. package/dist/Experiment/StratifiedMxKFoldRun.js.map +1 -0
  123. package/dist/Experiment/StratifiedMxKFoldRunSeparateTest.d.ts +20 -0
  124. package/dist/Experiment/StratifiedMxKFoldRunSeparateTest.js +47 -0
  125. package/dist/Experiment/StratifiedMxKFoldRunSeparateTest.js.map +1 -0
  126. package/dist/Experiment/StratifiedSingleRunWithK.d.ts +18 -0
  127. package/dist/Experiment/StratifiedSingleRunWithK.js +39 -0
  128. package/dist/Experiment/StratifiedSingleRunWithK.js.map +1 -0
  129. package/dist/FeatureSelection/BackwardSelection.d.ts +18 -0
  130. package/dist/FeatureSelection/BackwardSelection.js +39 -0
  131. package/dist/FeatureSelection/BackwardSelection.js.map +1 -0
  132. package/dist/FeatureSelection/FeatureSubSet.d.ts +47 -0
  133. package/dist/FeatureSelection/FeatureSubSet.js +89 -0
  134. package/dist/FeatureSelection/FeatureSubSet.js.map +1 -0
  135. package/dist/FeatureSelection/FloatingSelection.d.ts +16 -0
  136. package/dist/FeatureSelection/FloatingSelection.js +38 -0
  137. package/dist/FeatureSelection/FloatingSelection.js.map +1 -0
  138. package/dist/FeatureSelection/ForwardSelection.d.ts +17 -0
  139. package/dist/FeatureSelection/ForwardSelection.js +38 -0
  140. package/dist/FeatureSelection/ForwardSelection.js.map +1 -0
  141. package/dist/FeatureSelection/SubSetSelection.d.ts +37 -0
  142. package/dist/FeatureSelection/SubSetSelection.js +90 -0
  143. package/dist/FeatureSelection/SubSetSelection.js.map +1 -0
  144. package/dist/Filter/DiscreteToContinuous.d.ts +25 -0
  145. package/dist/Filter/DiscreteToContinuous.js +69 -0
  146. package/dist/Filter/DiscreteToContinuous.js.map +1 -0
  147. package/dist/Filter/DiscreteToIndexed.d.ts +21 -0
  148. package/dist/Filter/DiscreteToIndexed.js +56 -0
  149. package/dist/Filter/DiscreteToIndexed.js.map +1 -0
  150. package/dist/Filter/FeatureFilter.d.ts +18 -0
  151. package/dist/Filter/FeatureFilter.js +36 -0
  152. package/dist/Filter/FeatureFilter.js.map +1 -0
  153. package/dist/Filter/LaryFilter.d.ts +27 -0
  154. package/dist/Filter/LaryFilter.js +62 -0
  155. package/dist/Filter/LaryFilter.js.map +1 -0
  156. package/dist/Filter/LaryToBinary.d.ts +23 -0
  157. package/dist/Filter/LaryToBinary.js +67 -0
  158. package/dist/Filter/LaryToBinary.js.map +1 -0
  159. package/dist/Filter/Normalize.d.ts +21 -0
  160. package/dist/Filter/Normalize.js +47 -0
  161. package/dist/Filter/Normalize.js.map +1 -0
  162. package/dist/Filter/Pca.d.ts +44 -0
  163. package/dist/Filter/Pca.js +109 -0
  164. package/dist/Filter/Pca.js.map +1 -0
  165. package/dist/Filter/TrainedFeatureFilter.d.ts +11 -0
  166. package/dist/Filter/TrainedFeatureFilter.js +26 -0
  167. package/dist/Filter/TrainedFeatureFilter.js.map +1 -0
  168. package/dist/Instance/CompositeInstance.d.ts +32 -0
  169. package/dist/Instance/CompositeInstance.js +61 -0
  170. package/dist/Instance/CompositeInstance.js.map +1 -0
  171. package/dist/Instance/Instance.d.ts +89 -0
  172. package/dist/Instance/Instance.js +170 -0
  173. package/dist/Instance/Instance.js.map +1 -0
  174. package/dist/InstanceList/InstanceList.d.ts +188 -0
  175. package/dist/InstanceList/InstanceList.js +517 -0
  176. package/dist/InstanceList/InstanceList.js.map +1 -0
  177. package/dist/InstanceList/InstanceListOfSameClass.d.ts +16 -0
  178. package/dist/InstanceList/InstanceListOfSameClass.js +35 -0
  179. package/dist/InstanceList/InstanceListOfSameClass.js.map +1 -0
  180. package/dist/InstanceList/Partition.d.ts +31 -0
  181. package/dist/InstanceList/Partition.js +143 -0
  182. package/dist/InstanceList/Partition.js.map +1 -0
  183. package/dist/Model/DecisionTree/DecisionCondition.d.ts +34 -0
  184. package/dist/Model/DecisionTree/DecisionCondition.js +84 -0
  185. package/dist/Model/DecisionTree/DecisionCondition.js.map +1 -0
  186. package/dist/Model/DecisionTree/DecisionNode.d.ts +82 -0
  187. package/dist/Model/DecisionTree/DecisionNode.js +271 -0
  188. package/dist/Model/DecisionTree/DecisionNode.js.map +1 -0
  189. package/dist/Model/DecisionTree/DecisionTree.d.ts +37 -0
  190. package/dist/Model/DecisionTree/DecisionTree.js +75 -0
  191. package/dist/Model/DecisionTree/DecisionTree.js.map +1 -0
  192. package/dist/Model/DeepNetworkModel.d.ts +42 -0
  193. package/dist/Model/DeepNetworkModel.js +163 -0
  194. package/dist/Model/DeepNetworkModel.js.map +1 -0
  195. package/dist/Model/DummyModel.d.ts +20 -0
  196. package/dist/Model/DummyModel.js +46 -0
  197. package/dist/Model/DummyModel.js.map +1 -0
  198. package/dist/Model/GaussianModel.d.ts +24 -0
  199. package/dist/Model/GaussianModel.js +59 -0
  200. package/dist/Model/GaussianModel.js.map +1 -0
  201. package/dist/Model/KMeansModel.d.ts +27 -0
  202. package/dist/Model/KMeansModel.js +48 -0
  203. package/dist/Model/KMeansModel.js.map +1 -0
  204. package/dist/Model/KnnInstance.d.ts +14 -0
  205. package/dist/Model/KnnInstance.js +33 -0
  206. package/dist/Model/KnnInstance.js.map +1 -0
  207. package/dist/Model/KnnModel.d.ts +36 -0
  208. package/dist/Model/KnnModel.js +83 -0
  209. package/dist/Model/KnnModel.js.map +1 -0
  210. package/dist/Model/LdaModel.d.ts +25 -0
  211. package/dist/Model/LdaModel.js +45 -0
  212. package/dist/Model/LdaModel.js.map +1 -0
  213. package/dist/Model/LinearPerceptronModel.d.ts +21 -0
  214. package/dist/Model/LinearPerceptronModel.js +62 -0
  215. package/dist/Model/LinearPerceptronModel.js.map +1 -0
  216. package/dist/Model/Model.d.ts +12 -0
  217. package/dist/Model/Model.js +31 -0
  218. package/dist/Model/Model.js.map +1 -0
  219. package/dist/Model/MultiLayerPerceptronModel.d.ts +29 -0
  220. package/dist/Model/MultiLayerPerceptronModel.js +101 -0
  221. package/dist/Model/MultiLayerPerceptronModel.js.map +1 -0
  222. package/dist/Model/NaiveBayesModel.d.ts +47 -0
  223. package/dist/Model/NaiveBayesModel.js +95 -0
  224. package/dist/Model/NaiveBayesModel.js.map +1 -0
  225. package/dist/Model/NeuralNetworkModel.d.ts +99 -0
  226. package/dist/Model/NeuralNetworkModel.js +180 -0
  227. package/dist/Model/NeuralNetworkModel.js.map +1 -0
  228. package/dist/Model/QdaModel.d.ts +26 -0
  229. package/dist/Model/QdaModel.js +45 -0
  230. package/dist/Model/QdaModel.js.map +1 -0
  231. package/dist/Model/RandomModel.d.ts +16 -0
  232. package/dist/Model/RandomModel.js +51 -0
  233. package/dist/Model/RandomModel.js.map +1 -0
  234. package/dist/Model/TreeEnsembleModel.d.ts +21 -0
  235. package/dist/Model/TreeEnsembleModel.js +49 -0
  236. package/dist/Model/TreeEnsembleModel.js.map +1 -0
  237. package/dist/Model/ValidatedModel.d.ts +12 -0
  238. package/dist/Model/ValidatedModel.js +35 -0
  239. package/dist/Model/ValidatedModel.js.map +1 -0
  240. package/dist/Parameter/ActivationFunction.d.ts +5 -0
  241. package/dist/Parameter/ActivationFunction.js +20 -0
  242. package/dist/Parameter/ActivationFunction.js.map +1 -0
  243. package/dist/Parameter/BaggingParameter.d.ts +17 -0
  244. package/dist/Parameter/BaggingParameter.js +36 -0
  245. package/dist/Parameter/BaggingParameter.js.map +1 -0
  246. package/dist/Parameter/C45Parameter.d.ts +25 -0
  247. package/dist/Parameter/C45Parameter.js +46 -0
  248. package/dist/Parameter/C45Parameter.js.map +1 -0
  249. package/dist/Parameter/DeepNetworkParameter.d.ts +38 -0
  250. package/dist/Parameter/DeepNetworkParameter.js +60 -0
  251. package/dist/Parameter/DeepNetworkParameter.js.map +1 -0
  252. package/dist/Parameter/KMeansParameter.d.ts +18 -0
  253. package/dist/Parameter/KMeansParameter.js +42 -0
  254. package/dist/Parameter/KMeansParameter.js.map +1 -0
  255. package/dist/Parameter/KnnParameter.d.ts +19 -0
  256. package/dist/Parameter/KnnParameter.js +37 -0
  257. package/dist/Parameter/KnnParameter.js.map +1 -0
  258. package/dist/Parameter/LinearPerceptronParameter.d.ts +41 -0
  259. package/dist/Parameter/LinearPerceptronParameter.js +66 -0
  260. package/dist/Parameter/LinearPerceptronParameter.js.map +1 -0
  261. package/dist/Parameter/MultiLayerPerceptronParameter.d.ts +30 -0
  262. package/dist/Parameter/MultiLayerPerceptronParameter.js +50 -0
  263. package/dist/Parameter/MultiLayerPerceptronParameter.js.map +1 -0
  264. package/dist/Parameter/Parameter.d.ts +15 -0
  265. package/dist/Parameter/Parameter.js +33 -0
  266. package/dist/Parameter/Parameter.js.map +1 -0
  267. package/dist/Parameter/RandomForestParameter.d.ts +18 -0
  268. package/dist/Parameter/RandomForestParameter.js +37 -0
  269. package/dist/Parameter/RandomForestParameter.js.map +1 -0
  270. package/dist/Performance/ClassificationPerformance.d.ts +17 -0
  271. package/dist/Performance/ClassificationPerformance.js +36 -0
  272. package/dist/Performance/ClassificationPerformance.js.map +1 -0
  273. package/dist/Performance/ConfusionMatrix.d.ts +81 -0
  274. package/dist/Performance/ConfusionMatrix.js +178 -0
  275. package/dist/Performance/ConfusionMatrix.js.map +1 -0
  276. package/dist/Performance/DetailedClassificationPerformance.d.ts +17 -0
  277. package/dist/Performance/DetailedClassificationPerformance.js +35 -0
  278. package/dist/Performance/DetailedClassificationPerformance.js.map +1 -0
  279. package/dist/Performance/ExperimentPerformance.d.ts +88 -0
  280. package/dist/Performance/ExperimentPerformance.js +176 -0
  281. package/dist/Performance/ExperimentPerformance.js.map +1 -0
  282. package/dist/Performance/Performance.d.ts +15 -0
  283. package/dist/Performance/Performance.js +33 -0
  284. package/dist/Performance/Performance.js.map +1 -0
  285. package/dist/StatisticalTest/Combined5x2F.d.ts +7 -0
  286. package/dist/StatisticalTest/Combined5x2F.js +43 -0
  287. package/dist/StatisticalTest/Combined5x2F.js.map +1 -0
  288. package/dist/StatisticalTest/Combined5x2t.d.ts +7 -0
  289. package/dist/StatisticalTest/Combined5x2t.js +43 -0
  290. package/dist/StatisticalTest/Combined5x2t.js.map +1 -0
  291. package/dist/StatisticalTest/Paired5x2t.d.ts +7 -0
  292. package/dist/StatisticalTest/Paired5x2t.js +42 -0
  293. package/dist/StatisticalTest/Paired5x2t.js.map +1 -0
  294. package/dist/StatisticalTest/PairedTest.d.ts +6 -0
  295. package/dist/StatisticalTest/PairedTest.js +35 -0
  296. package/dist/StatisticalTest/PairedTest.js.map +1 -0
  297. package/dist/StatisticalTest/Pairedt.d.ts +7 -0
  298. package/dist/StatisticalTest/Pairedt.js +40 -0
  299. package/dist/StatisticalTest/Pairedt.js.map +1 -0
  300. package/dist/StatisticalTest/Sign.d.ts +8 -0
  301. package/dist/StatisticalTest/Sign.js +52 -0
  302. package/dist/StatisticalTest/Sign.js.map +1 -0
  303. package/dist/StatisticalTest/StatisticalTestResult.d.ts +9 -0
  304. package/dist/StatisticalTest/StatisticalTestResult.js +53 -0
  305. package/dist/StatisticalTest/StatisticalTestResult.js.map +1 -0
  306. package/dist/StatisticalTest/StatisticalTestResultType.d.ts +7 -0
  307. package/dist/StatisticalTest/StatisticalTestResultType.js +22 -0
  308. package/dist/StatisticalTest/StatisticalTestResultType.js.map +1 -0
  309. package/index.js +100 -0
  310. package/package.json +30 -0
  311. package/source/Attribute/Attribute.ts +6 -0
  312. package/source/Attribute/AttributeType.ts +18 -0
  313. package/source/Attribute/BinaryAttribute.ts +14 -0
  314. package/source/Attribute/ContinuousAttribute.ts +53 -0
  315. package/source/Attribute/DiscreteAttribute.ts +46 -0
  316. package/source/Attribute/DiscreteIndexedAttribute.ts +54 -0
  317. package/source/Classifier/Bagging.ts +32 -0
  318. package/source/Classifier/C45.ts +30 -0
  319. package/source/Classifier/C45Stump.ts +19 -0
  320. package/source/Classifier/Classifier.ts +71 -0
  321. package/source/Classifier/DeepNetwork.ts +22 -0
  322. package/source/Classifier/Dummy.ts +19 -0
  323. package/source/Classifier/KMeans.ts +26 -0
  324. package/source/Classifier/Knn.ts +21 -0
  325. package/source/Classifier/Lda.ts +43 -0
  326. package/source/Classifier/LinearPerceptron.ts +23 -0
  327. package/source/Classifier/MultiLayerPerceptron.ts +23 -0
  328. package/source/Classifier/NaiveBayes.ts +62 -0
  329. package/source/Classifier/Qda.ts +42 -0
  330. package/source/Classifier/RandomClassifier.ts +22 -0
  331. package/source/Classifier/RandomForest.ts +29 -0
  332. package/source/DataSet/DataDefinition.ts +106 -0
  333. package/source/DataSet/DataSet.ts +279 -0
  334. package/source/DistanceMetric/DistanceMetric.ts +6 -0
  335. package/source/DistanceMetric/EuclidianDistance.ts +32 -0
  336. package/source/DistanceMetric/MahalanobisDistance.ts +33 -0
  337. package/source/Experiment/BootstrapRun.ts +37 -0
  338. package/source/Experiment/Experiment.ts +57 -0
  339. package/source/Experiment/KFoldRun.ts +44 -0
  340. package/source/Experiment/KFoldRunSeparateTest.ts +50 -0
  341. package/source/Experiment/MultipleRun.ts +7 -0
  342. package/source/Experiment/MxKFoldRun.ts +37 -0
  343. package/source/Experiment/MxKFoldRunSeparateTest.ts +40 -0
  344. package/source/Experiment/SingleRun.ts +7 -0
  345. package/source/Experiment/SingleRunWithK.ts +39 -0
  346. package/source/Experiment/StratifiedKFoldRun.ts +30 -0
  347. package/source/Experiment/StratifiedKFoldRunSeparateTest.ts +33 -0
  348. package/source/Experiment/StratifiedMxKFoldRun.ts +34 -0
  349. package/source/Experiment/StratifiedMxKFoldRunSeparateTest.ts +40 -0
  350. package/source/Experiment/StratifiedSingleRunWithK.ts +33 -0
  351. package/source/FeatureSelection/BackwardSelection.ts +28 -0
  352. package/source/FeatureSelection/FeatureSubSet.ts +82 -0
  353. package/source/FeatureSelection/FloatingSelection.ts +27 -0
  354. package/source/FeatureSelection/ForwardSelection.ts +27 -0
  355. package/source/FeatureSelection/SubSetSelection.ts +88 -0
  356. package/source/Filter/DiscreteToContinuous.ts +59 -0
  357. package/source/Filter/DiscreteToIndexed.ts +48 -0
  358. package/source/Filter/FeatureFilter.ts +31 -0
  359. package/source/Filter/LaryFilter.ts +54 -0
  360. package/source/Filter/LaryToBinary.ts +57 -0
  361. package/source/Filter/Normalize.ts +42 -0
  362. package/source/Filter/Pca.ts +104 -0
  363. package/source/Filter/TrainedFeatureFilter.ts +17 -0
  364. package/source/Instance/CompositeInstance.ts +53 -0
  365. package/source/Instance/Instance.ts +170 -0
  366. package/source/InstanceList/InstanceList.ts +519 -0
  367. package/source/InstanceList/InstanceListOfSameClass.ts +25 -0
  368. package/source/InstanceList/Partition.ts +131 -0
  369. package/source/Model/DecisionTree/DecisionCondition.ts +74 -0
  370. package/source/Model/DecisionTree/DecisionNode.ts +257 -0
  371. package/source/Model/DecisionTree/DecisionTree.ts +71 -0
  372. package/source/Model/DeepNetworkModel.ts +156 -0
  373. package/source/Model/DummyModel.ts +40 -0
  374. package/source/Model/GaussianModel.ts +58 -0
  375. package/source/Model/KMeansModel.ts +44 -0
  376. package/source/Model/KnnInstance.ts +27 -0
  377. package/source/Model/KnnModel.ts +78 -0
  378. package/source/Model/LdaModel.ts +39 -0
  379. package/source/Model/LinearPerceptronModel.ts +55 -0
  380. package/source/Model/Model.ts +22 -0
  381. package/source/Model/MultiLayerPerceptronModel.ts +95 -0
  382. package/source/Model/NaiveBayesModel.ts +89 -0
  383. package/source/Model/NeuralNetworkModel.ts +187 -0
  384. package/source/Model/QdaModel.ts +39 -0
  385. package/source/Model/RandomModel.ts +44 -0
  386. package/source/Model/TreeEnsembleModel.ts +43 -0
  387. package/source/Model/ValidatedModel.ts +23 -0
  388. package/source/Parameter/ActivationFunction.ts +3 -0
  389. package/source/Parameter/BaggingParameter.ts +26 -0
  390. package/source/Parameter/C45Parameter.ts +38 -0
  391. package/source/Parameter/DeepNetworkParameter.ts +59 -0
  392. package/source/Parameter/KMeansParameter.ts +33 -0
  393. package/source/Parameter/KnnParameter.ts +28 -0
  394. package/source/Parameter/LinearPerceptronParameter.ts +66 -0
  395. package/source/Parameter/MultiLayerPerceptronParameter.ts +49 -0
  396. package/source/Parameter/Parameter.ts +22 -0
  397. package/source/Parameter/RandomForestParameter.ts +27 -0
  398. package/source/Performance/ClassificationPerformance.ts +26 -0
  399. package/source/Performance/ConfusionMatrix.ts +175 -0
  400. package/source/Performance/DetailedClassificationPerformance.ts +26 -0
  401. package/source/Performance/ExperimentPerformance.ts +175 -0
  402. package/source/Performance/Performance.ts +22 -0
  403. package/source/StatisticalTest/Combined5x2F.ts +33 -0
  404. package/source/StatisticalTest/Combined5x2t.ts +33 -0
  405. package/source/StatisticalTest/Paired5x2t.ts +32 -0
  406. package/source/StatisticalTest/PairedTest.ts +24 -0
  407. package/source/StatisticalTest/Pairedt.ts +30 -0
  408. package/source/StatisticalTest/Sign.ts +41 -0
  409. package/source/StatisticalTest/StatisticalTestResult.ts +42 -0
  410. package/source/StatisticalTest/StatisticalTestResultType.ts +6 -0
  411. package/source/tsconfig.json +13 -0
  412. package/tsconfig.json +15 -0
@@ -0,0 +1,175 @@
1
+ import {CounterHashMap} from "nlptoolkit-datastructure/dist/CounterHashMap";
2
+
3
+ export class ConfusionMatrix {
4
+
5
+ private matrix: Map<string, CounterHashMap<string>> = new Map<string, CounterHashMap<string>>()
6
+ private classLabels: Array<string>
7
+
8
+ /**
9
+ * Constructor that sets the class labels {@link Array} and creates new {@link Map} matrix
10
+ *
11
+ * @param classLabels {@link ArrayList} of String.
12
+ */
13
+ constructor(classLabels: Array<string>) {
14
+ this.classLabels = classLabels
15
+ }
16
+
17
+ /**
18
+ * The classify method takes two Strings; actual class and predicted class as inputs. If the matrix {@link Map} contains
19
+ * given actual class String as a key, it then assigns the corresponding object of that key to a {@link CounterHashMap}, if not
20
+ * it creates a new {@link CounterHashMap}. Then, it puts the given predicted class String to the counterHashMap and
21
+ * also put this counterHashMap to the matrix {@link Map} together with the given actual class String.
22
+ *
23
+ * @param actualClass String input actual class.
24
+ * @param predictedClass String input predicted class.
25
+ */
26
+ classify(actualClass: string, predictedClass: string){
27
+ let counterHashMap: CounterHashMap<string>
28
+ if (this.matrix.has(actualClass)){
29
+ counterHashMap = this.matrix.get(actualClass)
30
+ } else {
31
+ counterHashMap = new CounterHashMap<string>()
32
+ }
33
+ counterHashMap.put(predictedClass)
34
+ this.matrix.set(actualClass, counterHashMap)
35
+ }
36
+
37
+ /**
38
+ * The addConfusionMatrix method takes a {@link ConfusionMatrix} as an input and loops through actual classes of that {@link Map}
39
+ * and initially gets one row at a time. Then it puts the current row to the matrix {@link Map} together with the actual class string.
40
+ *
41
+ * @param confusionMatrix {@link ConfusionMatrix} input.
42
+ */
43
+ addConfusionMatrix(confusionMatrix: ConfusionMatrix){
44
+ for (let actualClass of confusionMatrix.matrix.keys()) {
45
+ let rowToBeAdded = confusionMatrix.matrix.get(actualClass);
46
+ if (this.matrix.has(actualClass)) {
47
+ let currentRow = this.matrix.get(actualClass);
48
+ currentRow.add(rowToBeAdded);
49
+ this.matrix.set(actualClass, currentRow);
50
+ } else {
51
+ this.matrix.set(actualClass, rowToBeAdded);
52
+ }
53
+ }
54
+ }
55
+
56
+ /**
57
+ * The sumOfElements method loops through the keys in matrix {@link Map} and returns the summation of all the values of the keys.
58
+ * I.e: TP+TN+FP+FN.
59
+ *
60
+ * @return The summation of values.
61
+ */
62
+ private sumOfElements(): number{
63
+ let result = 0;
64
+ for (let actualClass of this.matrix.keys()) {
65
+ result += this.matrix.get(actualClass).sumOfCounts();
66
+ }
67
+ return result;
68
+ }
69
+
70
+ /**
71
+ * The trace method loops through the keys in matrix {@link Map} and if the current key contains the actual key,
72
+ * it accumulates the corresponding values. I.e: TP+TN.
73
+ *
74
+ * @return Summation of values.
75
+ */
76
+ private trace(): number{
77
+ let result = 0;
78
+ for (let actualClass of this.matrix.keys()) {
79
+ if (this.matrix.get(actualClass).has(actualClass)) {
80
+ result += this.matrix.get(actualClass).get(actualClass);
81
+ }
82
+ }
83
+ return result;
84
+ }
85
+
86
+ /**
87
+ * The columnSum method takes a String predicted class as input, and loops through the keys in matrix {@link HashMap}.
88
+ * If the current key contains the predicted class String, it accumulates the corresponding values. I.e: TP+FP.
89
+ *
90
+ * @param predictedClass String input predicted class.
91
+ * @return Summation of values.
92
+ */
93
+ private columnSum(predictedClass: string): number{
94
+ let result = 0;
95
+ for (let actualClass of this.matrix.keys()) {
96
+ if (this.matrix.get(actualClass).has(predictedClass)) {
97
+ result += this.matrix.get(actualClass).get(predictedClass);
98
+ }
99
+ }
100
+ return result;
101
+ }
102
+
103
+ /**
104
+ * The getAccuracy method returns the result of TP+TN / TP+TN+FP+FN
105
+ *
106
+ * @return the result of TP+TN / TP+TN+FP+FN
107
+ */
108
+ getAccuracy(): number{
109
+ return this.trace() / this.sumOfElements()
110
+ }
111
+
112
+ /**
113
+ * The precision method loops through the class labels and returns the resulting Array which has the result of TP/FP+TP.
114
+ *
115
+ * @return The result of TP/FP+TP.
116
+ */
117
+ precision(): Array<number>{
118
+ let result = new Array<number>(this.classLabels.length).fill(0)
119
+ for (let i = 0; i < this.classLabels.length; i++) {
120
+ let actualClass = this.classLabels[i];
121
+ if (this.matrix.has(actualClass)) {
122
+ result[i] = this.matrix.get(actualClass).get(actualClass) / this.columnSum(actualClass);
123
+ }
124
+ }
125
+ return result;
126
+ }
127
+
128
+ /**
129
+ * The recall method loops through the class labels and returns the resulting Array which has the result of TP/FN+TP.
130
+ *
131
+ * @return The result of TP/FN+TP.
132
+ */
133
+ recall(): Array<number>{
134
+ let result = new Array<number>(this.classLabels.length).fill(0)
135
+ for (let i = 0; i < this.classLabels.length; i++) {
136
+ let actualClass = this.classLabels[i];
137
+ if (this.matrix.has(actualClass)) {
138
+ result[i] = this.matrix.get(actualClass).get(actualClass) / this.matrix.get(actualClass).sumOfCounts();
139
+ }
140
+ }
141
+ return result;
142
+ }
143
+
144
+ /**
145
+ * The fMeasure method loops through the class labels and returns the resulting Array which has the average of
146
+ * recall and precision.
147
+ *
148
+ * @return The average of recall and precision.
149
+ */
150
+ fMeasure(): Array<number>{
151
+ let precision = this.precision();
152
+ let recall = this.recall();
153
+ let result = new Array<number>(this.classLabels.length).fill(0)
154
+ for (let i = 0; i < this.classLabels.length; i++) {
155
+ result[i] = 2 / (1 / precision[i] + 1 / recall[i]);
156
+ }
157
+ return result;
158
+ }
159
+
160
+ /**
161
+ * The weightedFMeasure method loops through the class labels and returns the resulting Array which has the weighted average of
162
+ * recall and precision.
163
+ *
164
+ * @return The weighted average of recall and precision.
165
+ */
166
+ weightedFMeasure(): number{
167
+ let fMeasure = this.fMeasure();
168
+ let sum = 0;
169
+ for (let i = 0; i < this.classLabels.length; i++) {
170
+ let actualClass = this.classLabels[i];
171
+ sum += fMeasure[i] * this.matrix.get(actualClass).sumOfCounts();
172
+ }
173
+ return sum / this.sumOfElements();
174
+ }
175
+ }
@@ -0,0 +1,26 @@
1
+ import {ClassificationPerformance} from "./ClassificationPerformance";
2
+ import {ConfusionMatrix} from "./ConfusionMatrix";
3
+
4
+ export class DetailedClassificationPerformance extends ClassificationPerformance{
5
+
6
+ private readonly confusionMatrix: ConfusionMatrix
7
+
8
+ /**
9
+ * A constructor that sets the accuracy and errorRate as 1 - accuracy via given {@link ConfusionMatrix} and also sets the confusionMatrix.
10
+ *
11
+ * @param confusionMatrix {@link ConfusionMatrix} input.
12
+ */
13
+ constructor(confusionMatrix: ConfusionMatrix) {
14
+ super(confusionMatrix.getAccuracy());
15
+ this.confusionMatrix = confusionMatrix
16
+ }
17
+
18
+ /**
19
+ * Accessor for the confusionMatrix.
20
+ *
21
+ * @return ConfusionMatrix.
22
+ */
23
+ getConfusionMatrix(): ConfusionMatrix{
24
+ return this.confusionMatrix
25
+ }
26
+ }
@@ -0,0 +1,175 @@
1
+ import {Performance} from "./Performance";
2
+ import * as fs from "fs";
3
+ import {DetailedClassificationPerformance} from "./DetailedClassificationPerformance";
4
+ import {ClassificationPerformance} from "./ClassificationPerformance";
5
+
6
+ export class ExperimentPerformance {
7
+
8
+ private results: Array<Performance> = new Array<Performance>()
9
+ private containsDetails: boolean = true
10
+ private classification: boolean = true
11
+
12
+ /**
13
+ * A constructor that takes a file name as an input and takes the inputs from that file assigns these inputs to the
14
+ * errorRate and adds them to the results {@link Array} as a new {@link Performance}.
15
+ *
16
+ * @param fileName String input.
17
+ */
18
+ constructor(fileName?: string) {
19
+ if (fileName != undefined){
20
+ let data = fs.readFileSync(fileName, 'utf8')
21
+ let lines = data.split("\n")
22
+ for (let line of lines){
23
+ this.results.push(new Performance(Number.parseFloat(line)))
24
+ }
25
+ }
26
+ }
27
+
28
+ /**
29
+ * The add method takes a {@link Performance} as an input and adds it to the results {@link Array}.
30
+ *
31
+ * @param performance {@link Performance} input.
32
+ */
33
+ add(performance: Performance){
34
+ if (!(performance instanceof DetailedClassificationPerformance)){
35
+ this.containsDetails = false
36
+ }
37
+ if (!(performance instanceof ClassificationPerformance)){
38
+ this.classification = false
39
+ }
40
+ this.results.push(performance)
41
+ }
42
+
43
+ /**
44
+ * The numberOfExperiments method returns the size of the results {@link Array}.
45
+ *
46
+ * @return The results {@link Array}.
47
+ */
48
+ numberOfExperiments(): number{
49
+ return this.results.length
50
+ }
51
+
52
+ /**
53
+ * The getErrorRate method takes an index as an input and returns the errorRate at given index of
54
+ * results {@link Array}.
55
+ *
56
+ * @param index Index of results {@link Array} to retrieve.
57
+ * @return The errorRate at given index of results {@link Array}.
58
+ */
59
+ getErrorRate(index: number): number{
60
+ return this.results[index].getErrorRate()
61
+ }
62
+
63
+ /**
64
+ * The getAccuracy method takes an index as an input. It returns the accuracy of a {@link Performance} at given
65
+ * index of results {@link Array}.
66
+ *
67
+ * @param index Index of results {@link Array} to retrieve.
68
+ * @return The accuracy of a {@link Performance} at given index of results {@link Array}.
69
+ */
70
+ getAccuracy(index: number): number{
71
+ if (this.results[index] instanceof ClassificationPerformance){
72
+ return (<ClassificationPerformance> this.results[index]).getAccuracy()
73
+ }
74
+ }
75
+
76
+ /**
77
+ * The meanPerformance method loops through the performances of results {@link Array} and sums up the errorRates
78
+ * of each then returns a new {@link Performance} with the mean of that summation.
79
+ *
80
+ * @return A new {@link Performance} with the mean of the summation of errorRates.
81
+ */
82
+ meanPerformance(): Performance{
83
+ let sumError = 0;
84
+ for (let performance of this.results) {
85
+ sumError += performance.getErrorRate();
86
+ }
87
+ return new Performance(sumError / this.results.length);
88
+ }
89
+
90
+ /**
91
+ * The meanClassificationPerformance method loops through the performances of results {@link Array} and sums up the
92
+ * accuracy of each classification performance, then returns a new classificationPerformance with the mean of that
93
+ * summation.
94
+ *
95
+ * @return A new classificationPerformance with the mean of that summation.
96
+ */
97
+ meanClassificationPerformance(): ClassificationPerformance{
98
+ if (this.results.length == 0 || !this.classification) {
99
+ return undefined;
100
+ }
101
+ let sumAccuracy = 0;
102
+ for (let performance of this.results) {
103
+ let classificationPerformance = <ClassificationPerformance> performance;
104
+ sumAccuracy += classificationPerformance.getAccuracy();
105
+ }
106
+ return new ClassificationPerformance(sumAccuracy / this.results.length);
107
+ }
108
+
109
+ /**
110
+ * The meanDetailedPerformance method gets the first confusion matrix of results {@link Array}.
111
+ * Then, it adds new confusion matrices as the {@link DetailedClassificationPerformance} of
112
+ * other elements of results ArrayList' confusion matrices as a {@link DetailedClassificationPerformance}.
113
+ *
114
+ * @return A new {@link DetailedClassificationPerformance} with the {@link ConfusionMatrix} sum.
115
+ */
116
+ meanDetailedPerformance(): DetailedClassificationPerformance{
117
+ if (this.results.length == 0 || !this.containsDetails) {
118
+ return undefined;
119
+ }
120
+ let sum = (<DetailedClassificationPerformance> this.results[0]).getConfusionMatrix();
121
+ for (let i = 1; i < this.results.length; i++) {
122
+ sum.addConfusionMatrix((<DetailedClassificationPerformance> this.results[i]).getConfusionMatrix());
123
+ }
124
+ return new DetailedClassificationPerformance(sum);
125
+ }
126
+
127
+ /**
128
+ * The standardDeviationPerformance method loops through the {@link Performance}s of results {@link Array} and
129
+ * returns a new Performance with the standard deviation.
130
+ *
131
+ * @return A new Performance with the standard deviation.
132
+ */
133
+ standardDeviationPerformance(): Performance{
134
+ let sumErrorRate = 0;
135
+ let averagePerformance = this.meanPerformance();
136
+ for (let performance of this.results) {
137
+ sumErrorRate += Math.pow(performance.getErrorRate() - averagePerformance.getErrorRate(), 2);
138
+ }
139
+ return new Performance(Math.sqrt(sumErrorRate / (this.results.length - 1)));
140
+ }
141
+
142
+ /**
143
+ * The standardDeviationClassificationPerformance method loops through the {@link Performance}s of results {@link ArrayList} and
144
+ * returns a new {@link ClassificationPerformance} with standard deviation.
145
+ *
146
+ * @return A new {@link ClassificationPerformance} with standard deviation.
147
+ */
148
+ standardDeviationClassificationPerformance(): ClassificationPerformance{
149
+ if (this.results.length == 0 || !this.classification) {
150
+ return undefined;
151
+ }
152
+ let sumAccuracy = 0, sumErrorRate = 0;
153
+ let averageClassificationPerformance = this.meanClassificationPerformance();
154
+ for (let performance of this.results) {
155
+ let classificationPerformance = <ClassificationPerformance> performance;
156
+ sumAccuracy += Math.pow(classificationPerformance.getAccuracy() - averageClassificationPerformance.getAccuracy(), 2);
157
+ sumErrorRate += Math.pow(classificationPerformance.getErrorRate() - averageClassificationPerformance.getErrorRate(), 2);
158
+ }
159
+ return new ClassificationPerformance(Math.sqrt(sumAccuracy / (this.results.length - 1)),
160
+ Math.sqrt(sumErrorRate / (this.results.length - 1)));
161
+ }
162
+
163
+ /**
164
+ * The isBetter method takes an {@link ExperimentPerformance} as an input and returns true if the result of compareTo method is positive
165
+ * and false otherwise.
166
+ *
167
+ * @param experimentPerformance {@link ExperimentPerformance} input.
168
+ * @return True if the result of compareTo method is positive and false otherwise.
169
+ */
170
+ isBetter(experimentPerformance: ExperimentPerformance): boolean{
171
+ let accuracy1 = this.meanClassificationPerformance().getAccuracy();
172
+ let accuracy2 = experimentPerformance.meanClassificationPerformance().getAccuracy();
173
+ return accuracy1 > accuracy2
174
+ }
175
+ }
@@ -0,0 +1,22 @@
1
+ export class Performance {
2
+
3
+ protected errorRate: number
4
+
5
+ /**
6
+ * Constructor that sets the error rate.
7
+ *
8
+ * @param errorRate Double input.
9
+ */
10
+ constructor(errorRate: number) {
11
+ this.errorRate = errorRate
12
+ }
13
+
14
+ /**
15
+ * Accessor for the error rate.
16
+ *
17
+ * @return Double errorRate.
18
+ */
19
+ getErrorRate(): number{
20
+ return this.errorRate
21
+ }
22
+ }
@@ -0,0 +1,33 @@
1
+ import {PairedTest} from "./PairedTest";
2
+ import {ExperimentPerformance} from "../Performance/ExperimentPerformance";
3
+ import {StatisticalTestResult} from "./StatisticalTestResult";
4
+ import {Distribution} from "nlptoolkit-math/dist/Distribution";
5
+
6
+ export class Combined5x2F extends PairedTest{
7
+
8
+ private testStatistic(classifier1: ExperimentPerformance, classifier2: ExperimentPerformance): number{
9
+ let difference = new Array<number>();
10
+ let numerator = 0
11
+ for (let i = 0; i < classifier1.numberOfExperiments(); i++){
12
+ difference.push(classifier1.getErrorRate(i) - classifier2.getErrorRate(i));
13
+ numerator += difference[i] * difference[i];
14
+ }
15
+ let denominator = 0;
16
+ for (let i = 0; i < classifier1.numberOfExperiments() / 2; i++){
17
+ let mean = (difference[2 * i] + difference[2 * i + 1]) / 2;
18
+ let variance = (difference[2 * i] - mean) * (difference[2 * i] - mean) +
19
+ (difference[2 * i + 1] - mean) * (difference[2 * i + 1] - mean);
20
+ denominator += variance;
21
+ }
22
+ denominator *= 2;
23
+ return numerator / denominator;
24
+ }
25
+
26
+ compareClassifiers(classifier1: ExperimentPerformance, classifier2: ExperimentPerformance): StatisticalTestResult {
27
+ let statistic = this.testStatistic(classifier1, classifier2);
28
+ let degreeOfFreedom1 = classifier1.numberOfExperiments();
29
+ let degreeOfFreedom2 = classifier1.numberOfExperiments() / 2;
30
+ return new StatisticalTestResult(Distribution.fDistribution(statistic, degreeOfFreedom1, degreeOfFreedom2), true);
31
+ }
32
+
33
+ }
@@ -0,0 +1,33 @@
1
+ import {PairedTest} from "./PairedTest";
2
+ import {ExperimentPerformance} from "../Performance/ExperimentPerformance";
3
+ import {StatisticalTestResult} from "./StatisticalTestResult";
4
+ import {Distribution} from "nlptoolkit-math/dist/Distribution";
5
+
6
+ export class Combined5x2t extends PairedTest{
7
+
8
+ private testStatistic(classifier1: ExperimentPerformance, classifier2: ExperimentPerformance): number{
9
+ let difference = new Array<number>();
10
+ for (let i = 0; i < classifier1.numberOfExperiments(); i++){
11
+ difference.push(classifier1.getErrorRate(i) - classifier2.getErrorRate(i));
12
+ }
13
+ let denominator = 0;
14
+ let numerator = 0;
15
+ for (let i = 0; i < classifier1.numberOfExperiments() / 2; i++){
16
+ let mean = (difference[2 * i] + difference[2 * i + 1]) / 2;
17
+ numerator += mean;
18
+ let variance = (difference[2 * i] - mean) * (difference[2 * i] - mean) +
19
+ (difference[2 * i + 1] - mean) * (difference[2 * i + 1] - mean);
20
+ denominator += variance;
21
+ }
22
+ numerator = Math.sqrt(10) * numerator / 5;
23
+ denominator = Math.sqrt(denominator / 5);
24
+ return numerator / denominator;
25
+ }
26
+
27
+ compareClassifiers(classifier1: ExperimentPerformance, classifier2: ExperimentPerformance): StatisticalTestResult {
28
+ let statistic = this.testStatistic(classifier1, classifier2);
29
+ let degreeOfFreedom = classifier1.numberOfExperiments() / 2;
30
+ return new StatisticalTestResult(Distribution.tDistribution(statistic, degreeOfFreedom), false);
31
+ }
32
+
33
+ }
@@ -0,0 +1,32 @@
1
+ import {PairedTest} from "./PairedTest";
2
+ import {ExperimentPerformance} from "../Performance/ExperimentPerformance";
3
+ import {StatisticalTestResult} from "./StatisticalTestResult";
4
+ import {Distribution} from "nlptoolkit-math/dist/Distribution";
5
+
6
+ export class Paired5x2t extends PairedTest{
7
+
8
+ private testStatistic(classifier1: ExperimentPerformance, classifier2: ExperimentPerformance): number{
9
+ let difference = new Array<number>();
10
+ let sum = 0.0;
11
+ for (let i = 0; i < classifier1.numberOfExperiments(); i++){
12
+ difference.push(classifier1.getErrorRate(i) - classifier2.getErrorRate(i));
13
+ sum += difference[i];
14
+ }
15
+ let denominator = 0;
16
+ for (let i = 0; i < classifier1.numberOfExperiments() / 2; i++){
17
+ let mean = (difference[2 * i] + difference[2 * i + 1]) / 2;
18
+ let variance = (difference[2 * i] - mean) * (difference[2 * i] - mean) +
19
+ (difference[2 * i + 1] - mean) * (difference[2 * i + 1] - mean);
20
+ denominator += variance;
21
+ }
22
+ denominator = Math.sqrt(denominator / 5);
23
+ return difference[0] / denominator;
24
+ }
25
+
26
+ compareClassifiers(classifier1: ExperimentPerformance, classifier2: ExperimentPerformance): StatisticalTestResult {
27
+ let statistic = this.testStatistic(classifier1, classifier2);
28
+ let degreeOfFreedom = classifier1.numberOfExperiments() / 2;
29
+ return new StatisticalTestResult(Distribution.tDistribution(statistic, degreeOfFreedom), false);
30
+ }
31
+
32
+ }
@@ -0,0 +1,24 @@
1
+ import {ExperimentPerformance} from "../Performance/ExperimentPerformance";
2
+ import {StatisticalTestResult} from "./StatisticalTestResult";
3
+ import {StatisticalTestResultType} from "./StatisticalTestResultType";
4
+
5
+ export abstract class PairedTest {
6
+
7
+ abstract compareClassifiers(classifier1: ExperimentPerformance, classifier2: ExperimentPerformance): StatisticalTestResult
8
+
9
+ compare(classifier1: ExperimentPerformance, classifier2: ExperimentPerformance, alpha: number): number{
10
+ let testResult1 = this.compareClassifiers(classifier1, classifier2);
11
+ let testResult2 = this.compareClassifiers(classifier2, classifier1);
12
+ let testResultType1 = testResult1.oneTailed(alpha);
13
+ let testResultType2 = testResult2.oneTailed(alpha);
14
+ if (testResultType1 == StatisticalTestResultType.REJECT){
15
+ return 1;
16
+ } else {
17
+ if (testResultType2 == StatisticalTestResultType.REJECT){
18
+ return -1;
19
+ } else {
20
+ return 0;
21
+ }
22
+ }
23
+ }
24
+ }
@@ -0,0 +1,30 @@
1
+ import {PairedTest} from "./PairedTest";
2
+ import {ExperimentPerformance} from "../Performance/ExperimentPerformance";
3
+ import {StatisticalTestResult} from "./StatisticalTestResult";
4
+ import {Distribution} from "nlptoolkit-math/dist/Distribution";
5
+
6
+ export class Pairedt extends PairedTest{
7
+
8
+ private testStatistic(classifier1: ExperimentPerformance, classifier2: ExperimentPerformance): number{
9
+ let difference = new Array<number>();
10
+ let sum = 0.0;
11
+ for (let i = 0; i < classifier1.numberOfExperiments(); i++){
12
+ difference.push(classifier1.getErrorRate(i) - classifier2.getErrorRate(i));
13
+ sum += difference[i];
14
+ }
15
+ let mean = sum / classifier1.numberOfExperiments();
16
+ sum = 0.0;
17
+ for (let i = 0; i < classifier1.numberOfExperiments(); i++){
18
+ sum += (difference[i] - mean) * (difference[i] - mean);
19
+ }
20
+ let standardDeviation = Math.sqrt(sum / (classifier1.numberOfExperiments() - 1));
21
+ return Math.sqrt(classifier1.numberOfExperiments()) * mean / standardDeviation;
22
+ }
23
+
24
+ compareClassifiers(classifier1: ExperimentPerformance, classifier2: ExperimentPerformance): StatisticalTestResult {
25
+ let statistic = this.testStatistic(classifier1, classifier2);
26
+ let degreeOfFreedom = classifier1.numberOfExperiments() - 1;
27
+ return new StatisticalTestResult(Distribution.tDistribution(statistic, degreeOfFreedom), false);
28
+ }
29
+
30
+ }
@@ -0,0 +1,41 @@
1
+ import {PairedTest} from "./PairedTest";
2
+ import {ExperimentPerformance} from "../Performance/ExperimentPerformance";
3
+ import {StatisticalTestResult} from "./StatisticalTestResult";
4
+
5
+ export class Sign extends PairedTest{
6
+
7
+ private factorial(n: number): number{
8
+ let result = 1;
9
+ for (let i = 2; i <= n; i++)
10
+ result *= i;
11
+ return result;
12
+ }
13
+
14
+ private binomial(m: number, n: number): number{
15
+ if (n == 0 || m == n){
16
+ return 1;
17
+ } else {
18
+ return this.factorial(m) / (this.factorial(n) * this.factorial(m - n));
19
+ }
20
+ }
21
+
22
+ compareClassifiers(classifier1: ExperimentPerformance, classifier2: ExperimentPerformance): StatisticalTestResult {
23
+ let plus = 0, minus = 0;
24
+ for (let i = 0; i < classifier1.numberOfExperiments(); i++){
25
+ if (classifier1.getErrorRate(i) < classifier2.getErrorRate(i)){
26
+ plus++;
27
+ } else {
28
+ if (classifier1.getErrorRate(i) > classifier2.getErrorRate(i)){
29
+ minus++;
30
+ }
31
+ }
32
+ }
33
+ let total = plus + minus;
34
+ let pValue = 0.0;
35
+ for (let i = 0; i <= plus; i++){
36
+ pValue += this.binomial(total, i) / Math.pow(2, total);
37
+ }
38
+ return new StatisticalTestResult(pValue, false);
39
+ }
40
+
41
+ }
@@ -0,0 +1,42 @@
1
+ import {StatisticalTestResultType} from "./StatisticalTestResultType";
2
+
3
+ export class StatisticalTestResult {
4
+
5
+ private readonly pValue: number
6
+ private readonly onlyTwoTailed: boolean
7
+
8
+ constructor(pValue: number, onlyTwoTailed: boolean) {
9
+ this.pValue = pValue
10
+ this.onlyTwoTailed = onlyTwoTailed
11
+ }
12
+
13
+ oneTailed(alpha: number): StatisticalTestResultType{
14
+ if (!this.onlyTwoTailed){
15
+ if (this.pValue < alpha){
16
+ return StatisticalTestResultType.REJECT;
17
+ } else {
18
+ return StatisticalTestResultType.FAILED_TO_REJECT;
19
+ }
20
+ }
21
+ }
22
+
23
+ twoTailed(alpha: number): StatisticalTestResultType{
24
+ if (this.onlyTwoTailed){
25
+ if (this.pValue < alpha){
26
+ return StatisticalTestResultType.REJECT;
27
+ } else {
28
+ return StatisticalTestResultType.FAILED_TO_REJECT;
29
+ }
30
+ } else {
31
+ if (this.pValue < alpha / 2 || this.pValue > 1 - alpha / 2){
32
+ return StatisticalTestResultType.REJECT;
33
+ } else {
34
+ return StatisticalTestResultType.FAILED_TO_REJECT;
35
+ }
36
+ }
37
+ }
38
+
39
+ getPValue(): number{
40
+ return this.pValue
41
+ }
42
+ }
@@ -0,0 +1,6 @@
1
+ /***
2
+ * Enumerator class for statistical test results.
3
+ */
4
+ export enum StatisticalTestResultType {
5
+ FAILED_TO_REJECT, REJECT
6
+ }
@@ -0,0 +1,13 @@
1
+ {
2
+ "compilerOptions": {
3
+ "outDir": "../dist",
4
+ "module": "umd",
5
+ "target": "es6",
6
+ "sourceMap": true,
7
+ "noImplicitAny": true,
8
+ "strictNullChecks": false,
9
+ "removeComments": false,
10
+ "moduleResolution": "node",
11
+ "declaration": true
12
+ }
13
+ }
package/tsconfig.json ADDED
@@ -0,0 +1,15 @@
1
+ {
2
+ "compilerOptions": {
3
+ "module": "commonjs",
4
+ "target": "es6",
5
+ "sourceMap": true,
6
+ "noImplicitAny": true,
7
+ "removeComments": false,
8
+ "moduleResolution": "node"
9
+ },
10
+ "exclude": [
11
+ "source",
12
+ "node_modules",
13
+ "dist"
14
+ ]
15
+ }