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,29 @@
1
+ import {Classifier} from "./Classifier";
2
+ import {InstanceList} from "../InstanceList/InstanceList";
3
+ import {Parameter} from "../Parameter/Parameter";
4
+ import {RandomForestParameter} from "../Parameter/RandomForestParameter";
5
+ import {DecisionTree} from "../Model/DecisionTree/DecisionTree";
6
+ import {DecisionNode} from "../Model/DecisionTree/DecisionNode";
7
+ import {TreeEnsembleModel} from "../Model/TreeEnsembleModel";
8
+
9
+ export class RandomForest extends Classifier{
10
+
11
+ /**
12
+ * Training algorithm for random forest classifier. Basically the algorithm creates K distinct decision trees from
13
+ * K bootstrap samples of the original training set.
14
+ *
15
+ * @param trainSet Training data given to the algorithm
16
+ * @param parameters Parameters of the bagging trees algorithm. ensembleSize returns the number of trees in the random forest.
17
+ */
18
+ train(trainSet: InstanceList, parameters: Parameter): void {
19
+ let forestSize = (<RandomForestParameter> parameters).getEnsembleSize();
20
+ let forest = new Array<DecisionTree>();
21
+ for (let i = 0; i < forestSize; i++){
22
+ let bootstrap = trainSet.bootstrap(i);
23
+ let tree = new DecisionTree(new DecisionNode(new InstanceList(bootstrap.getSample()), undefined, <RandomForestParameter> parameters, false));
24
+ forest.push(tree);
25
+ }
26
+ this.model = new TreeEnsembleModel(forest);
27
+ }
28
+
29
+ }
@@ -0,0 +1,106 @@
1
+ import {AttributeType} from "../Attribute/AttributeType";
2
+ import {FeatureSubSet} from "../FeatureSelection/FeatureSubSet";
3
+
4
+ export class DataDefinition {
5
+
6
+ private attributeTypes: Array<AttributeType>
7
+
8
+ /**
9
+ * Constructor for creating a new {@link DataDefinition} with given attribute types.
10
+ *
11
+ * @param attributeTypes Attribute types of the data definition.
12
+ */
13
+ constructor(attributeTypes?: Array<AttributeType>) {
14
+ if (attributeTypes != undefined){
15
+ this.attributeTypes = attributeTypes
16
+ }
17
+ }
18
+
19
+ /**
20
+ * Returns the number of attribute types.
21
+ *
22
+ * @return Number of attribute types.
23
+ */
24
+ attributeCount(): number{
25
+ return this.attributeTypes.length
26
+ }
27
+
28
+ /**
29
+ * Counts the occurrences of binary and discrete type attributes.
30
+ *
31
+ * @return Count of binary and discrete type attributes.
32
+ */
33
+ discreteAttributeCount(): number{
34
+ let count = 0;
35
+ for (let attributeType of this.attributeTypes) {
36
+ if (attributeType == AttributeType.DISCRETE || attributeType == AttributeType.BINARY) {
37
+ count++;
38
+ }
39
+ }
40
+ return count;
41
+ }
42
+
43
+ /**
44
+ * Counts the occurrences of binary and continuous type attributes.
45
+ *
46
+ * @return Count of of binary and continuous type attributes.
47
+ */
48
+ continuousAttributeCount(): number{
49
+ let count = 0;
50
+ for (let attributeType of this.attributeTypes) {
51
+ if (attributeType == AttributeType.CONTINUOUS) {
52
+ count++;
53
+ }
54
+ }
55
+ return count;
56
+ }
57
+
58
+ /**
59
+ * Returns the attribute type of the corresponding item at given index.
60
+ *
61
+ * @param index Index of the attribute type.
62
+ * @return Attribute type of the corresponding item at given index.
63
+ */
64
+ getAttributeType(index: number): AttributeType{
65
+ return this.attributeTypes[index]
66
+ }
67
+
68
+ /**
69
+ * Adds an attribute type to the list of attribute types.
70
+ *
71
+ * @param attributeType Attribute type to add to the list of attribute types.
72
+ */
73
+ addAttribute(attributeType: AttributeType){
74
+ this.attributeTypes.push(attributeType)
75
+ }
76
+
77
+ /**
78
+ * Removes the attribute type at given index from the list of attributes.
79
+ *
80
+ * @param index Index to remove attribute type from list.
81
+ */
82
+ removeAttribute(index: number){
83
+ this.attributeTypes.splice(index, 1)
84
+ }
85
+
86
+ /**
87
+ * Clears all the attribute types from list.
88
+ */
89
+ removeAllAttributes(){
90
+ this.attributeTypes = new Array<AttributeType>()
91
+ }
92
+
93
+ /**
94
+ * Generates new subset of attribute types by using given feature subset.
95
+ *
96
+ * @param featureSubSet {@link FeatureSubSet} input.
97
+ * @return DataDefinition with new subset of attribute types.
98
+ */
99
+ getSubSetOfFeatures(featureSubSet: FeatureSubSet): DataDefinition{
100
+ let newAttributeTypes = new Array<AttributeType>();
101
+ for (let i = 0; i < featureSubSet.size(); i++) {
102
+ newAttributeTypes.push(this.attributeTypes[featureSubSet.get(i)]);
103
+ }
104
+ return new DataDefinition(newAttributeTypes);
105
+ }
106
+ }
@@ -0,0 +1,279 @@
1
+ import {InstanceList} from "../InstanceList/InstanceList";
2
+ import {DataDefinition} from "./DataDefinition";
3
+ import * as fs from "fs";
4
+ import {AttributeType} from "../Attribute/AttributeType";
5
+ import {Instance} from "../Instance/Instance";
6
+ import {CompositeInstance} from "../Instance/CompositeInstance";
7
+ import {ContinuousAttribute} from "../Attribute/ContinuousAttribute";
8
+ import {DiscreteAttribute} from "../Attribute/DiscreteAttribute";
9
+ import {BinaryAttribute} from "../Attribute/BinaryAttribute";
10
+ import {DiscreteIndexedAttribute} from "../Attribute/DiscreteIndexedAttribute";
11
+ import {Partition} from "../InstanceList/Partition";
12
+ import {FeatureSubSet} from "../FeatureSelection/FeatureSubSet";
13
+
14
+ export class DataSet {
15
+
16
+ private instances: InstanceList = new InstanceList()
17
+ private definition: DataDefinition = undefined
18
+
19
+ /**
20
+ * Constructor for generating a new {@link DataSet} with given {@link DataDefinition}.
21
+ *
22
+ * @param definition Data definition of the data set.
23
+ * @param separator Separator character which separates the attribute values in the data file.
24
+ * @param fileName Name of the data set file.
25
+ */
26
+ constructor(definition?: any, separator?: string, fileName?: string) {
27
+ if (definition != undefined){
28
+ if (definition instanceof DataDefinition){
29
+ this.definition = definition
30
+ } else {
31
+ if (separator == undefined){
32
+ let data = fs.readFileSync(fileName, 'utf8')
33
+ let i = 0
34
+ let lines = data.split("\n")
35
+ for (let line of lines){
36
+ let attributes = line.split(",");
37
+ if (i == 0) {
38
+ for (let j = 0; j < attributes.length - 1; j++) {
39
+ if (Number.isNaN(attributes[j])){
40
+ definition.addAttribute(AttributeType.DISCRETE);
41
+ } else {
42
+ Number.parseFloat(attributes[j]);
43
+ definition.addAttribute(AttributeType.CONTINUOUS);
44
+ }
45
+ }
46
+ } else {
47
+ if (attributes.length != definition.attributeCount() + 1) {
48
+ continue;
49
+ }
50
+ }
51
+ let instance : Instance
52
+ if (!attributes[attributes.length - 1].includes(";")) {
53
+ instance = new Instance(attributes[attributes.length - 1]);
54
+ } else {
55
+ let labels = attributes[attributes.length - 1].split(";");
56
+ instance = new CompositeInstance(labels[0]);
57
+ (<CompositeInstance> instance).setPossibleClassLabels(labels.slice(1))
58
+ }
59
+ for (let j = 0; j < attributes.length - 1; j++) {
60
+ switch (definition.getAttributeType(j)) {
61
+ case AttributeType.CONTINUOUS:
62
+ instance.addAttribute(new ContinuousAttribute(Number.parseFloat(attributes[j])));
63
+ break;
64
+ case AttributeType.DISCRETE:
65
+ instance.addAttribute(new DiscreteAttribute(attributes[j]));
66
+ break;
67
+ }
68
+ }
69
+ if (instance.attributeSize() == definition.attributeCount()) {
70
+ this.instances.add(instance);
71
+ }
72
+ i++;
73
+ }
74
+ }
75
+ else {
76
+ this.definition = definition;
77
+ this.instances = new InstanceList(definition, separator, fileName);
78
+ }
79
+ }
80
+ }
81
+ }
82
+
83
+ /**
84
+ * Checks the correctness of the attribute type, for instance, if the attribute of given instance is a Binary attribute,
85
+ * and the attribute type of the corresponding item of the data definition is also a Binary attribute, it then
86
+ * returns true, and false otherwise.
87
+ *
88
+ * @param instance {@link Instance} to checks the attribute type.
89
+ * @return true if attribute types of given {@link Instance} and data definition matches.
90
+ */
91
+ private checkDefinition(instance: Instance): boolean{
92
+ for (let i = 0; i < instance.attributeSize(); i++) {
93
+ if (instance.getAttribute(i) instanceof BinaryAttribute) {
94
+ if (this.definition.getAttributeType(i) != AttributeType.BINARY)
95
+ return false;
96
+ } else {
97
+ if (instance.getAttribute(i) instanceof DiscreteIndexedAttribute) {
98
+ if (this.definition.getAttributeType(i) != AttributeType.DISCRETE_INDEXED)
99
+ return false;
100
+ } else {
101
+ if (instance.getAttribute(i) instanceof DiscreteAttribute) {
102
+ if (this.definition.getAttributeType(i) != AttributeType.DISCRETE)
103
+ return false;
104
+ } else {
105
+ if (instance.getAttribute(i) instanceof ContinuousAttribute) {
106
+ if (this.definition.getAttributeType(i) != AttributeType.CONTINUOUS)
107
+ return false;
108
+ }
109
+ }
110
+ }
111
+ }
112
+ }
113
+ return true;
114
+ }
115
+
116
+ /**
117
+ * Adds the attribute types according to given {@link Instance}. For instance, if the attribute type of given {@link Instance}
118
+ * is a Discrete type, it than adds a discrete attribute type to the list of attribute types.
119
+ *
120
+ * @param instance {@link Instance} input.
121
+ */
122
+ private setDefinition(instance: Instance){
123
+ let attributeTypes = new Array<AttributeType>();
124
+ for (let i = 0; i < instance.attributeSize(); i++) {
125
+ if (instance.getAttribute(i) instanceof BinaryAttribute) {
126
+ attributeTypes.push(AttributeType.BINARY);
127
+ } else {
128
+ if (instance.getAttribute(i) instanceof DiscreteIndexedAttribute) {
129
+ attributeTypes.push(AttributeType.DISCRETE_INDEXED);
130
+ } else {
131
+ if (instance.getAttribute(i) instanceof DiscreteAttribute) {
132
+ attributeTypes.push(AttributeType.DISCRETE);
133
+ } else {
134
+ if (instance.getAttribute(i) instanceof ContinuousAttribute) {
135
+ attributeTypes.push(AttributeType.CONTINUOUS);
136
+ }
137
+ }
138
+ }
139
+ }
140
+ }
141
+ this.definition = new DataDefinition(attributeTypes);
142
+ }
143
+
144
+ /**
145
+ * Returns the size of the {@link InstanceList}.
146
+ *
147
+ * @return Size of the {@link InstanceList}.
148
+ */
149
+ sampleSize(): number{
150
+ return this.instances.size()
151
+ }
152
+
153
+ /**
154
+ * Returns the size of the class label distribution of {@link InstanceList}.
155
+ *
156
+ * @return Size of the class label distribution of {@link InstanceList}.
157
+ */
158
+ classCount(): number{
159
+ return this.instances.classDistribution().size
160
+ }
161
+
162
+ /**
163
+ * Returns the number of attribute types at {@link DataDefinition} list.
164
+ *
165
+ * @return The number of attribute types at {@link DataDefinition} list.
166
+ */
167
+ attributeCount(): number{
168
+ return this.definition.attributeCount()
169
+ }
170
+
171
+ /**
172
+ * Returns the number of discrete attribute types at {@link DataDefinition} list.
173
+ *
174
+ * @return The number of discrete attribute types at {@link DataDefinition} list.
175
+ */
176
+ discreteAttributeCount(): number{
177
+ return this.definition.discreteAttributeCount()
178
+ }
179
+
180
+ /**
181
+ * Returns the number of continuous attribute types at {@link DataDefinition} list.
182
+ *
183
+ * @return The number of continuous attribute types at {@link DataDefinition} list.
184
+ */
185
+ continuousAttributeCount(): number{
186
+ return this.definition.continuousAttributeCount()
187
+ }
188
+
189
+ /**
190
+ * Returns the accumulated {@link String} of class labels of the {@link InstanceList}.
191
+ *
192
+ * @return The accumulated {@link String} of class labels of the {@link InstanceList}.
193
+ */
194
+ getClasses(): string{
195
+ let classLabels = this.instances.getDistinctClassLabels();
196
+ let result = classLabels[0];
197
+ for (let i = 1; i < classLabels.length; i++) {
198
+ result = result + ";" + classLabels[i];
199
+ }
200
+ return result;
201
+ }
202
+
203
+ /**
204
+ * Adds a new instance to the {@link InstanceList}.
205
+ *
206
+ * @param current {@link Instance} to add.
207
+ */
208
+ addInstance(current: Instance){
209
+ if (this.definition == undefined) {
210
+ this.setDefinition(current);
211
+ this.instances.add(current);
212
+ } else {
213
+ if (this.checkDefinition(current)) {
214
+ this.instances.add(current);
215
+ }
216
+ }
217
+ }
218
+
219
+ /**
220
+ * Adds all the instances of given instance list to the {@link InstanceList}.
221
+ *
222
+ * @param instanceList {@link InstanceList} to add instances from.
223
+ */
224
+ addInstanceList(instanceList: Array<Instance>){
225
+ for (let instance of instanceList) {
226
+ this.addInstance(instance);
227
+ }
228
+ }
229
+
230
+ /**
231
+ * Returns the instances of {@link InstanceList}.
232
+ *
233
+ * @return The instances of {@link InstanceList}.
234
+ */
235
+ getInstances(): Array<Instance>{
236
+ return this.instances.getInstances()
237
+ }
238
+
239
+ /**
240
+ * Returns instances of the items at the list of instance lists from the partitions.
241
+ *
242
+ * @return Instances of the items at the list of instance lists from the partitions.
243
+ */
244
+ getClassInstances(): Array<Array<Instance>>{
245
+ return new Partition(this.instances).getLists()
246
+ }
247
+
248
+ /**
249
+ * Accessor for the {@link InstanceList}.
250
+ *
251
+ * @return The {@link InstanceList}.
252
+ */
253
+ getInstanceList(): InstanceList{
254
+ return this.instances
255
+ }
256
+
257
+ /**
258
+ * Accessor for the data definition.
259
+ *
260
+ * @return The data definition.
261
+ */
262
+ getDataDefinition(): DataDefinition{
263
+ return this.definition
264
+ }
265
+
266
+ /**
267
+ * Return a subset generated via the given {@link FeatureSubSet}.
268
+ *
269
+ * @param featureSubSet {@link FeatureSubSet} input.
270
+ * @return Subset generated via the given {@link FeatureSubSet}.
271
+ */
272
+ getSubSetOfFeatures(featureSubSet: FeatureSubSet): DataSet{
273
+ let result = new DataSet(this.definition.getSubSetOfFeatures(featureSubSet));
274
+ for (let i = 0; i < this.instances.size(); i++) {
275
+ result.addInstance(this.instances.get(i).getSubSetOfFeatures(featureSubSet));
276
+ }
277
+ return result;
278
+ }
279
+ }
@@ -0,0 +1,6 @@
1
+ import {Instance} from "../Instance/Instance";
2
+
3
+ export interface DistanceMetric {
4
+
5
+ distance(instance1: Instance, instance2: Instance): number
6
+ }
@@ -0,0 +1,32 @@
1
+ import {DistanceMetric} from "./DistanceMetric";
2
+ import {Instance} from "../Instance/Instance";
3
+ import {DiscreteAttribute} from "../Attribute/DiscreteAttribute";
4
+ import {ContinuousAttribute} from "../Attribute/ContinuousAttribute";
5
+
6
+ export class EuclidianDistance implements DistanceMetric{
7
+
8
+ /**
9
+ * Calculates Euclidian distance between two instances. For continuous features: \sum_{i=1}^d (x_i^(1) - x_i^(2))^2,
10
+ * For discrete features: \sum_{i=1}^d 1(x_i^(1) == x_i^(2))
11
+ *
12
+ * @param instance1 First instance
13
+ * @param instance2 Second instance
14
+ * @return Euclidian distance between two instances.
15
+ */
16
+ distance(instance1: Instance, instance2: Instance): number {
17
+ let result = 0;
18
+ for (let i = 0; i < instance1.attributeSize(); i++) {
19
+ if (instance1.getAttribute(i) instanceof DiscreteAttribute && instance2.getAttribute(i) instanceof DiscreteAttribute) {
20
+ if ((<DiscreteAttribute> instance1.getAttribute(i)).getValue() != null && (<DiscreteAttribute> instance1.getAttribute(i)).getValue() != (<DiscreteAttribute> instance2.getAttribute(i)).getValue()) {
21
+ result += 1;
22
+ }
23
+ } else {
24
+ if (instance1.getAttribute(i) instanceof ContinuousAttribute && instance2.getAttribute(i) instanceof ContinuousAttribute) {
25
+ result += Math.pow((<ContinuousAttribute> instance1.getAttribute(i)).getValue() - (<ContinuousAttribute> instance2.getAttribute(i)).getValue(), 2);
26
+ }
27
+ }
28
+ }
29
+ return result;
30
+ }
31
+
32
+ }
@@ -0,0 +1,33 @@
1
+ import {DistanceMetric} from "./DistanceMetric";
2
+ import {Instance} from "../Instance/Instance";
3
+ import {Matrix} from "nlptoolkit-math/dist/Matrix";
4
+
5
+ export class MahalanobisDistance implements DistanceMetric{
6
+
7
+ private covarianceInverse: Matrix
8
+
9
+ /**
10
+ * Constructor for the MahalanobisDistance class. Basically sets the inverse of the covariance matrix.
11
+ *
12
+ * @param covarianceInverse Inverse of the covariance matrix.
13
+ */
14
+ constructor(covarianceInverse: Matrix) {
15
+ this.covarianceInverse = covarianceInverse
16
+ }
17
+
18
+ /**
19
+ * Calculates Mahalanobis distance between two instances. (x^(1) - x^(2)) S (x^(1) - x^(2))^T
20
+ *
21
+ * @param instance1 First instance.
22
+ * @param instance2 Second instance.
23
+ * @return Mahalanobis distance between two instances.
24
+ */
25
+ distance(instance1: Instance, instance2: Instance): number {
26
+ let v1 = instance1.toVector();
27
+ let v2 = instance2.toVector();
28
+ v1.subtract(v2);
29
+ let v3 = this.covarianceInverse.multiplyWithVectorFromLeft(v1);
30
+ return v3.dotProduct(v1);
31
+ }
32
+
33
+ }
@@ -0,0 +1,37 @@
1
+ import {MultipleRun} from "./MultipleRun";
2
+ import {Experiment} from "./Experiment";
3
+ import {ExperimentPerformance} from "../Performance/ExperimentPerformance";
4
+ import {Bootstrap} from "nlptoolkit-sampling/dist/Bootstrap";
5
+ import {InstanceList} from "../InstanceList/InstanceList";
6
+ import {Instance} from "../Instance/Instance";
7
+
8
+ export class BootstrapRun implements MultipleRun{
9
+
10
+ private numberOfBootstraps: number
11
+
12
+ /**
13
+ * Constructor for BootstrapRun class. Basically sets the number of bootstrap runs.
14
+ *
15
+ * @param numberOfBootstraps Number of bootstrap runs.
16
+ */
17
+ constructor(numberOfBootstraps: number) {
18
+ this.numberOfBootstraps = numberOfBootstraps
19
+ }
20
+
21
+ /**
22
+ * Execute the bootstrap run with the given classifier on the given data set using the given parameters.
23
+ *
24
+ * @param experiment Experiment to be run.
25
+ * @return An ExperimentPerformance instance.
26
+ */
27
+ execute(experiment: Experiment): ExperimentPerformance {
28
+ let result = new ExperimentPerformance();
29
+ for (let i = 0; i < this.numberOfBootstraps; i++) {
30
+ let bootstrap = new Bootstrap<Instance>(experiment.getDataSet().getInstances(), i + experiment.getParameter().getSeed());
31
+ let bootstrapSample = new InstanceList(bootstrap.getSample());
32
+ experiment.getClassifier().train(bootstrapSample, experiment.getParameter());
33
+ result.add(experiment.getClassifier().test(experiment.getDataSet().getInstanceList()));
34
+ }
35
+ return result;
36
+ }
37
+ }
@@ -0,0 +1,57 @@
1
+ import {Classifier} from "../Classifier/Classifier";
2
+ import {Parameter} from "../Parameter/Parameter";
3
+ import {DataSet} from "../DataSet/DataSet";
4
+ import {FeatureSubSet} from "../FeatureSelection/FeatureSubSet";
5
+
6
+ export class Experiment {
7
+
8
+ private classifier: Classifier
9
+ private parameter: Parameter
10
+ private dataSet: DataSet
11
+
12
+ /**
13
+ * Constructor for a specific machine learning experiment
14
+ * @param classifier Classifier used in the machine learning experiment
15
+ * @param parameter Parameter(s) of the classifier.
16
+ * @param dataSet DataSet on which the classifier is run.
17
+ */
18
+ constructor(classifier: Classifier, parameter: Parameter, dataSet: DataSet) {
19
+ this.classifier = classifier
20
+ this.parameter = parameter
21
+ this.dataSet = dataSet
22
+ }
23
+
24
+ /**
25
+ * Accessor for the classifier attribute.
26
+ * @return Classifier attribute.
27
+ */
28
+ getClassifier(): Classifier{
29
+ return this.classifier
30
+ }
31
+
32
+ /**
33
+ * Accessor for the parameter attribute.
34
+ * @return Parameter attribute.
35
+ */
36
+ getParameter(): Parameter{
37
+ return this.parameter
38
+ }
39
+
40
+ /**
41
+ * Accessor for the dataSet attribute.
42
+ * @return DataSet attribute.
43
+ */
44
+ getDataSet(): DataSet{
45
+ return this.dataSet
46
+ }
47
+
48
+ /**
49
+ * Construct and returns a feature selection experiment.
50
+ * @param featureSubSet Feature subset used in the feature selection experiment
51
+ * @return Experiment constructed
52
+ */
53
+ featureSelectedExperiment(featureSubSet: FeatureSubSet): Experiment{
54
+ return new Experiment(this.classifier, this.parameter, this.dataSet.getSubSetOfFeatures(featureSubSet));
55
+ }
56
+
57
+ }
@@ -0,0 +1,44 @@
1
+ import {MultipleRun} from "./MultipleRun";
2
+ import {Experiment} from "./Experiment";
3
+ import {ExperimentPerformance} from "../Performance/ExperimentPerformance";
4
+ import {Classifier} from "../Classifier/Classifier";
5
+ import {Parameter} from "../Parameter/Parameter";
6
+ import {CrossValidation} from "nlptoolkit-sampling/dist/CrossValidation";
7
+ import {Instance} from "../Instance/Instance";
8
+ import {InstanceList} from "../InstanceList/InstanceList";
9
+ import {KFoldCrossValidation} from "nlptoolkit-sampling/dist/KFoldCrossValidation";
10
+
11
+ export class KFoldRun implements MultipleRun{
12
+
13
+ protected K: number
14
+
15
+ constructor(K: number) {
16
+ this.K = K
17
+ }
18
+
19
+ protected runExperiment(classifier: Classifier,
20
+ parameter: Parameter,
21
+ experimentPerformance: ExperimentPerformance,
22
+ crossValidation: CrossValidation<Instance>){
23
+ for (let i = 0; i < this.K; i++) {
24
+ let trainSet = new InstanceList(crossValidation.getTrainFold(i));
25
+ let testSet = new InstanceList(crossValidation.getTestFold(i));
26
+ classifier.train(trainSet, parameter);
27
+ experimentPerformance.add(classifier.test(testSet));
28
+ }
29
+ }
30
+
31
+ /**
32
+ * Execute K-fold cross-validation with the given classifier on the given data set using the given parameters.
33
+ *
34
+ * @param experiment Experiment to be run.
35
+ * @return An ExperimentPerformance instance.
36
+ */
37
+ execute(experiment: Experiment): ExperimentPerformance {
38
+ let result = new ExperimentPerformance();
39
+ let crossValidation = new KFoldCrossValidation<Instance>(experiment.getDataSet().getInstances(), this.K, experiment.getParameter().getSeed());
40
+ this.runExperiment(experiment.getClassifier(), experiment.getParameter(), result, crossValidation);
41
+ return result;
42
+ }
43
+
44
+ }
@@ -0,0 +1,50 @@
1
+ import {KFoldRun} from "./KFoldRun";
2
+ import {Classifier} from "../Classifier/Classifier";
3
+ import {Parameter} from "../Parameter/Parameter";
4
+ import {ExperimentPerformance} from "../Performance/ExperimentPerformance";
5
+ import {InstanceList} from "../InstanceList/InstanceList";
6
+ import {CrossValidation} from "nlptoolkit-sampling/dist/CrossValidation";
7
+ import {Instance} from "../Instance/Instance";
8
+ import {Experiment} from "./Experiment";
9
+ import {KFoldCrossValidation} from "nlptoolkit-sampling/dist/KFoldCrossValidation";
10
+ import {Partition} from "../InstanceList/Partition";
11
+
12
+ export class KFoldRunSeparateTest extends KFoldRun{
13
+
14
+ /**
15
+ * Constructor for KFoldRunSeparateTest class. Basically sets K parameter of the K-fold cross-validation.
16
+ *
17
+ * @param K K of the K-fold cross-validation.
18
+ */
19
+ constructor(K: number) {
20
+ super(K);
21
+ }
22
+
23
+ protected runExperiment(classifier: Classifier,
24
+ parameter: Parameter,
25
+ experimentPerformance: ExperimentPerformance,
26
+ crossValidation: CrossValidation<Instance>,
27
+ testSet?: InstanceList) {
28
+ for (let i = 0; i < this.K; i++) {
29
+ let trainSet = new InstanceList(crossValidation.getTrainFold(i));
30
+ classifier.train(trainSet, parameter);
31
+ experimentPerformance.add(classifier.test(testSet));
32
+ }
33
+ }
34
+
35
+ /**
36
+ * Execute K-fold cross-validation with separate test set with the given classifier on the given data set using the given parameters.
37
+ *
38
+ * @param experiment Experiment to be run.
39
+ * @return An ExperimentPerformance instance.
40
+ */
41
+ execute(experiment: Experiment): ExperimentPerformance {
42
+ let result = new ExperimentPerformance();
43
+ let instanceList = experiment.getDataSet().getInstanceList();
44
+ let partition = new Partition(instanceList, 0.25, true);
45
+ let crossValidation = new KFoldCrossValidation<Instance>(partition.get(1).getInstances(), this.K, experiment.getParameter().getSeed());
46
+ this.runExperiment(experiment.getClassifier(), experiment.getParameter(), result, crossValidation, partition.get(0));
47
+ return result;
48
+ }
49
+
50
+ }