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,519 @@
1
+ import {Instance} from "../Instance/Instance";
2
+ import {DataDefinition} from "../DataSet/DataDefinition";
3
+ import * as fs from "fs";
4
+ import {BinaryAttribute} from "../Attribute/BinaryAttribute";
5
+ import {DiscreteAttribute} from "../Attribute/DiscreteAttribute";
6
+ import {ContinuousAttribute} from "../Attribute/ContinuousAttribute";
7
+ import {AttributeType} from "../Attribute/AttributeType";
8
+ import {Bootstrap} from "nlptoolkit-sampling/dist/Bootstrap";
9
+ import {CompositeInstance} from "../Instance/CompositeInstance";
10
+ import {Attribute} from "../Attribute/Attribute";
11
+ import {Model} from "../Model/Model";
12
+ import {DiscreteIndexedAttribute} from "../Attribute/DiscreteIndexedAttribute";
13
+ import {DiscreteDistribution} from "nlptoolkit-math/dist/DiscreteDistribution";
14
+ import {Vector} from "nlptoolkit-math/dist/Vector";
15
+ import {Matrix} from "nlptoolkit-math/dist/Matrix";
16
+
17
+ export class InstanceList {
18
+
19
+ protected list: Array<Instance> = new Array<Instance>()
20
+
21
+ /**
22
+ * Constructor for an instance list with a given data definition, data file and a separator character. Each instance
23
+ * must be stored in a separate line separated with the character separator. The last item must be the class label.
24
+ * The function reads the file line by line and for each line; depending on the data definition, that is, type of
25
+ * the attributes, adds discrete and continuous attributes to a new instance. For example, given the data set file
26
+ * <p>
27
+ * red;1;0.4;true
28
+ * green;-1;0.8;true
29
+ * blue;3;1.3;false
30
+ * <p>
31
+ * where the first attribute is a discrete attribute, second and third attributes are continuous attributes, the
32
+ * fourth item is the class label.
33
+ *
34
+ * @param definition Data definition of the data set.
35
+ * @param separator Separator character which separates the attribute values in the data file.
36
+ * @param fileName Name of the data set file.
37
+ */
38
+ constructor(definition?: any, separator?: string, fileName?: string) {
39
+ if (definition != undefined){
40
+ if (definition instanceof DataDefinition){
41
+ let data = fs.readFileSync(fileName, 'utf8')
42
+ let lines = data.split("\n")
43
+ for (let line of lines){
44
+ let attributeList : Array<string> = line.split(separator);
45
+ if (attributeList.length == definition.attributeCount() + 1) {
46
+ let current = new Instance(attributeList[attributeList.length - 1]);
47
+ for (let i = 0; i < attributeList.length - 1; i++) {
48
+ switch (definition.getAttributeType(i)) {
49
+ case AttributeType.DISCRETE:
50
+ current.addAttribute(new DiscreteAttribute(attributeList[i]));
51
+ break;
52
+ case AttributeType.BINARY:
53
+ if (attributeList[i].toLowerCase() == "yes" || attributeList[i] == "1"){
54
+ current.addAttribute(new BinaryAttribute(true));
55
+ } else {
56
+ current.addAttribute(new BinaryAttribute(false));
57
+ }
58
+ break;
59
+ case AttributeType.CONTINUOUS:
60
+ current.addAttribute(new ContinuousAttribute(Number.parseFloat(attributeList[i])));
61
+ break;
62
+ }
63
+ }
64
+ this.list.push(current);
65
+ }
66
+ }
67
+ } else {
68
+ this.list = definition
69
+ }
70
+ }
71
+ }
72
+
73
+ /**
74
+ * Adds instance to the instance list.
75
+ *
76
+ * @param instance Instance to be added.
77
+ */
78
+ add(instance: Instance){
79
+ this.list.push(instance)
80
+ }
81
+
82
+ /**
83
+ * Adds a list of instances to the current instance list.
84
+ *
85
+ * @param instanceList List of instances to be added.
86
+ */
87
+ addAll(instanceList: Array<Instance>){
88
+ for (let instance of instanceList){
89
+ this.list.push(instance)
90
+ }
91
+ }
92
+
93
+ /**
94
+ * Returns size of the instance list.
95
+ *
96
+ * @return Size of the instance list.
97
+ */
98
+ size(): number{
99
+ return this.list.length
100
+ }
101
+
102
+ /**
103
+ * Accessor for a single instance with the given index.
104
+ *
105
+ * @param index Index of the instance.
106
+ * @return Instance with index 'index'.
107
+ */
108
+ get(index: number): Instance{
109
+ return this.list[index]
110
+ }
111
+
112
+ /**
113
+ * Sorts instance list according to the attribute with index 'attributeIndex'.
114
+ *
115
+ * @param attributeIndex index of the attribute.
116
+ */
117
+ sort(attributeIndex?: number){
118
+ if (attributeIndex == undefined){
119
+ this.list.sort((a: Instance, b: Instance) =>
120
+ (a.getClassLabel() < b.getClassLabel() ? -1 :
121
+ a.getClassLabel() > b.getClassLabel() ? 1 : 0))
122
+ } else {
123
+ this.list.sort((a: Instance, b: Instance) =>
124
+ (<ContinuousAttribute> a.getAttribute(attributeIndex)).getValue() < (<ContinuousAttribute> b.getAttribute(attributeIndex)).getValue() ? -1:
125
+ (<ContinuousAttribute> a.getAttribute(attributeIndex)).getValue() > (<ContinuousAttribute> b.getAttribute(attributeIndex)).getValue() ? 1: 0)
126
+ }
127
+ }
128
+
129
+ /**
130
+ * Shuffles the instance list.
131
+ * @param seed Seed is used for random number generation.
132
+ */
133
+ shuffle(seed: number){
134
+ }
135
+
136
+ /**
137
+ * Creates a bootstrap sample from the current instance list.
138
+ *
139
+ * @param seed To create a different bootstrap sample, we need a new seed for each sample.
140
+ * @return Bootstrap sample.
141
+ */
142
+ bootstrap(seed: number): Bootstrap<Instance>{
143
+ return new Bootstrap<Instance>(this.list, seed)
144
+ }
145
+
146
+ /**
147
+ * Extracts the class labels of each instance in the instance list and returns them in an array of {@link String}.
148
+ *
149
+ * @return An array list of class labels.
150
+ */
151
+ getClassLabels(): Array<string>{
152
+ let classLabels = new Array<string>();
153
+ for (let instance of this.list) {
154
+ classLabels.push(instance.getClassLabel());
155
+ }
156
+ return classLabels;
157
+ }
158
+
159
+ /**
160
+ * Extracts the class labels of each instance in the instance list and returns them as a set.
161
+ *
162
+ * @return An {@link Array} of distinct class labels.
163
+ */
164
+ getDistinctClassLabels(): Array<string>{
165
+ let classLabels = new Array<string>();
166
+ for (let instance of this.list) {
167
+ if (!classLabels.includes(instance.getClassLabel())) {
168
+ classLabels.push(instance.getClassLabel());
169
+ }
170
+ }
171
+ return classLabels;
172
+ }
173
+
174
+ /**
175
+ * Extracts the possible class labels of each instance in the instance list and returns them as a set.
176
+ *
177
+ * @return An {@link Array} of distinct class labels.
178
+ */
179
+ getUnionOfPossibleClassLabels(): Array<string>{
180
+ let possibleClassLabels = new Array<string>();
181
+ for (let instance of this.list) {
182
+ if (instance instanceof CompositeInstance) {
183
+ let compositeInstance = <CompositeInstance> instance;
184
+ for (let possibleClassLabel of compositeInstance.getPossibleClassLabels()) {
185
+ if (!possibleClassLabels.includes(possibleClassLabel)) {
186
+ possibleClassLabels.push(possibleClassLabel);
187
+ }
188
+ }
189
+ } else {
190
+ if (!possibleClassLabels.includes(instance.getClassLabel())) {
191
+ possibleClassLabels.push(instance.getClassLabel());
192
+ }
193
+ }
194
+ }
195
+ return possibleClassLabels;
196
+ }
197
+
198
+ /**
199
+ * Extracts distinct discrete values of a given attribute as an array of strings.
200
+ *
201
+ * @param attributeIndex Index of the discrete attribute.
202
+ * @return An array of distinct values of a discrete attribute.
203
+ */
204
+ getAttributeValueList(attributeIndex: number): Array<string>{
205
+ let valueList = new Array<string>();
206
+ for (let instance of this.list) {
207
+ if (!valueList.includes((<DiscreteAttribute> instance.getAttribute(attributeIndex)).getValue())) {
208
+ valueList.push((<DiscreteAttribute> instance.getAttribute(attributeIndex)).getValue());
209
+ }
210
+ }
211
+ return valueList;
212
+ }
213
+
214
+ /**
215
+ * Calculates the mean of a single attribute for this instance list (m_i). If the attribute is discrete, the maximum
216
+ * occurring value for that attribute is returned. If the attribute is continuous, the mean value of the values of
217
+ * all instances are returned.
218
+ *
219
+ * @param index Index of the attribute.
220
+ * @return The mean value of the instances as an attribute.
221
+ */
222
+ private attributeAverage(index: number): Attribute{
223
+ if (this.list[0].getAttribute(index) instanceof DiscreteAttribute) {
224
+ let values = new Array<string>();
225
+ for (let instance of this.list) {
226
+ values.push((<DiscreteAttribute> instance.getAttribute(index)).getValue());
227
+ }
228
+ return new DiscreteAttribute(Model.getMaximum(values));
229
+ } else {
230
+ if (this.list[0].getAttribute(index) instanceof ContinuousAttribute) {
231
+ let sum = 0.0;
232
+ for (let instance of this.list) {
233
+ sum += (<ContinuousAttribute> instance.getAttribute(index)).getValue();
234
+ }
235
+ return new ContinuousAttribute(sum / this.list.length);
236
+ } else {
237
+ return undefined;
238
+ }
239
+ }
240
+ }
241
+
242
+ /**
243
+ * Calculates the mean of a single attribute for this instance list (m_i).
244
+ *
245
+ * @param index Index of the attribute.
246
+ * @return The mean value of the instances as an attribute.
247
+ */
248
+ public continuousAttributeAverage(index?: number): Array<number>{
249
+ if (index == undefined){
250
+ let result = new Array<number>();
251
+ for (let i = 0; i < this.list[0].attributeSize(); i++) {
252
+ for (let attribute of this.continuousAttributeAverage(i)){
253
+ result.push(attribute);
254
+ }
255
+ }
256
+ return result;
257
+ } else {
258
+ if (this.list[0].getAttribute(index) instanceof DiscreteIndexedAttribute) {
259
+ let maxIndexSize = (<DiscreteIndexedAttribute> this.list[0].getAttribute(index)).getMaxIndex();
260
+ let values = new Array<number>();
261
+ for (let i = 0; i < maxIndexSize; i++) {
262
+ values.push(0.0);
263
+ }
264
+ for (let instance of this.list) {
265
+ let valueIndex = (<DiscreteIndexedAttribute> instance.getAttribute(index)).getIndex();
266
+ values[valueIndex]++;
267
+ }
268
+ for (let i = 0; i < values.length; i++) {
269
+ values[i] /= this.list.length;
270
+ }
271
+ return values;
272
+ } else {
273
+ if (this.list[0].getAttribute(index) instanceof ContinuousAttribute) {
274
+ let sum = 0.0;
275
+ for (let instance of this.list) {
276
+ sum += (<ContinuousAttribute> instance.getAttribute(index)).getValue();
277
+ }
278
+ let values = new Array<number>();
279
+ values.push(sum / this.list.length);
280
+ return values;
281
+ } else {
282
+ return undefined;
283
+ }
284
+ }
285
+ }
286
+ }
287
+
288
+ /**
289
+ * Calculates the standard deviation of a single attribute for this instance list (m_i). If the attribute is discrete,
290
+ * null returned. If the attribute is continuous, the standard deviation of the values all instances are returned.
291
+ *
292
+ * @param index Index of the attribute.
293
+ * @return The standard deviation of the instances as an attribute.
294
+ */
295
+ private attributeStandardDeviation(index: number): Attribute{
296
+ if (this.list[0].getAttribute(index) instanceof ContinuousAttribute) {
297
+ let sum = 0.0;
298
+ for (let instance of this.list) {
299
+ sum += (<ContinuousAttribute> instance.getAttribute(index)).getValue();
300
+ }
301
+ let average = sum / this.list.length;
302
+ sum = 0.0;
303
+ for (let instance of this.list) {
304
+ sum += Math.pow((<ContinuousAttribute> instance.getAttribute(index)).getValue() - average, 2);
305
+ }
306
+ return new ContinuousAttribute(Math.sqrt(sum / (this.list.length - 1)));
307
+ } else {
308
+ return undefined;
309
+ }
310
+ }
311
+
312
+ /**
313
+ * Calculates the standard deviation of a single continuous attribute for this instance list (m_i).
314
+ *
315
+ * @param index Index of the attribute.
316
+ * @return The standard deviation of the instances as an attribute.
317
+ */
318
+ private continuousAttributeStandardDeviation(index?: number): Array<number>{
319
+ if (index == undefined){
320
+ let result = new Array<number>();
321
+ for (let i = 0; i < this.list[0].attributeSize(); i++) {
322
+ for (let attribute of this.continuousAttributeStandardDeviation(i)){
323
+ result.push(attribute);
324
+ }
325
+ }
326
+ return result;
327
+ } else {
328
+ if (this.list[0].getAttribute(index) instanceof DiscreteIndexedAttribute) {
329
+ let maxIndexSize = (<DiscreteIndexedAttribute> this.list[0].getAttribute(index)).getMaxIndex();
330
+ let averages = new Array<number>();
331
+ for (let i = 0; i < maxIndexSize; i++) {
332
+ averages.push(0.0);
333
+ }
334
+ for (let instance of this.list) {
335
+ let valueIndex = (<DiscreteIndexedAttribute> instance.getAttribute(index)).getIndex();
336
+ averages[valueIndex]++;
337
+ }
338
+ for (let i = 0; i < averages.length; i++) {
339
+ averages[i] /= this.list.length;
340
+ }
341
+ let values = new Array<number>();
342
+ for (let i = 0; i < maxIndexSize; i++) {
343
+ values.push(0.0);
344
+ }
345
+ for (let instance of this.list) {
346
+ let valueIndex = (<DiscreteIndexedAttribute> instance.getAttribute(index)).getIndex();
347
+ for (let i = 0; i < maxIndexSize; i++) {
348
+ if (i == valueIndex) {
349
+ values[i] += Math.pow(1 - averages[i], 2);
350
+ } else {
351
+ values[i] += Math.pow(averages[i], 2);
352
+ }
353
+ }
354
+ }
355
+ for (let i = 0; i < values.length; i++) {
356
+ values[i] = Math.sqrt(values[i] / (this.list.length - 1));
357
+ }
358
+ return values;
359
+ } else {
360
+ if (this.list[0].getAttribute(index) instanceof ContinuousAttribute) {
361
+ let sum = 0.0;
362
+ for (let instance of this.list) {
363
+ sum += (<ContinuousAttribute> instance.getAttribute(index)).getValue();
364
+ }
365
+ let average = sum / this.list.length;
366
+ sum = 0.0;
367
+ for (let instance of this.list) {
368
+ sum += Math.pow((<ContinuousAttribute> instance.getAttribute(index)).getValue() - average, 2);
369
+ }
370
+ let result = new Array<number>();
371
+ result.push(Math.sqrt(sum / (this.list.length - 1)));
372
+ return result;
373
+ } else {
374
+ return undefined;
375
+ }
376
+ }
377
+ }
378
+ }
379
+
380
+ /**
381
+ * The attributeDistribution method takes an index as an input and if the attribute of the instance at given index is
382
+ * discrete, it returns the distribution of the attributes of that instance.
383
+ *
384
+ * @param index Index of the attribute.
385
+ * @return Distribution of the attribute.
386
+ */
387
+ attributeDistribution(index: number): DiscreteDistribution{
388
+ let distribution = new DiscreteDistribution();
389
+ if (this.list[0].getAttribute(index) instanceof DiscreteAttribute) {
390
+ for (let instance of this.list) {
391
+ distribution.addItem((<DiscreteAttribute> instance.getAttribute(index)).getValue());
392
+ }
393
+ }
394
+ return distribution;
395
+ }
396
+
397
+ /**
398
+ * The attributeClassDistribution method takes an attribute index as an input. It loops through the instances, gets
399
+ * the corresponding value of given attribute index and adds the class label of that instance to the discrete distributions list.
400
+ *
401
+ * @param attributeIndex Index of the attribute.
402
+ * @return Distribution of the class labels.
403
+ */
404
+ attributeClassDistribution(attributeIndex: number): Array<DiscreteDistribution>{
405
+ let distributions = new Array<DiscreteDistribution>();
406
+ let valueList = this.getAttributeValueList(attributeIndex);
407
+ for (let ignored of valueList) {
408
+ distributions.push(new DiscreteDistribution());
409
+ }
410
+ for (let instance of this.list) {
411
+ distributions[valueList.indexOf((<DiscreteAttribute> instance.getAttribute(attributeIndex)).getValue())].addItem(instance.getClassLabel());
412
+ }
413
+ return distributions;
414
+ }
415
+
416
+ /**
417
+ * The discreteIndexedAttributeClassDistribution method takes an attribute index and an attribute value as inputs.
418
+ * It loops through the instances, gets the corresponding value of given attribute index and given attribute value.
419
+ * Then, adds the class label of that instance to the discrete indexed distributions list.
420
+ *
421
+ * @param attributeIndex Index of the attribute.
422
+ * @param attributeValue Value of the attribute.
423
+ * @return Distribution of the class labels.
424
+ */
425
+ discreteIndexedAttributeClassDistribution(attributeIndex: number, attributeValue: number): DiscreteDistribution{
426
+ let distribution = new DiscreteDistribution();
427
+ for (let instance of this.list) {
428
+ if ((<DiscreteIndexedAttribute> instance.getAttribute(attributeIndex)).getIndex() == attributeValue) {
429
+ distribution.addItem(instance.getClassLabel());
430
+ }
431
+ }
432
+ return distribution;
433
+ }
434
+
435
+ /**
436
+ * The classDistribution method returns the distribution of all the class labels of instances.
437
+ *
438
+ * @return Distribution of the class labels.
439
+ */
440
+ classDistribution(): DiscreteDistribution{
441
+ let distribution = new DiscreteDistribution();
442
+ for (let instance of this.list) {
443
+ distribution.addItem(instance.getClassLabel());
444
+ }
445
+ return distribution;
446
+ }
447
+
448
+ /**
449
+ * The allAttributesDistribution method returns the distributions of all the attributes of instances.
450
+ *
451
+ * @return Distributions of all the attributes of instances.
452
+ */
453
+ allAttributesDistribution(): Array<DiscreteDistribution>{
454
+ let distributions = new Array<DiscreteDistribution>();
455
+ for (let i = 0; i < this.list[0].attributeSize(); i++) {
456
+ distributions.push(this.attributeDistribution(i));
457
+ }
458
+ return distributions;
459
+ }
460
+
461
+ /**
462
+ * Returns the mean of all the attributes for instances in the list.
463
+ *
464
+ * @return Mean of all the attributes for instances in the list.
465
+ */
466
+ average(): Instance{
467
+ let result = new Instance(this.list[0].getClassLabel());
468
+ for (let i = 0; i < this.list[0].attributeSize(); i++) {
469
+ result.addAttribute(this.attributeAverage(i));
470
+ }
471
+ return result;
472
+ }
473
+
474
+ /**
475
+ * Returns the standard deviation of attributes for instances.
476
+ *
477
+ * @return Standard deviation of attributes for instances.
478
+ */
479
+ standardDeviation(): Instance{
480
+ let result = new Instance(this.list[0].getClassLabel());
481
+ for (let i = 0; i < this.list[0].attributeSize(); i++) {
482
+ result.addAttribute(this.attributeStandardDeviation(i));
483
+ }
484
+ return result;
485
+ }
486
+
487
+ /**
488
+ * Calculates a covariance {@link Matrix} by using an average {@link Vector}.
489
+ *
490
+ * @param average Vector input.
491
+ * @return Covariance {@link Matrix}.
492
+ */
493
+ covariance(average: Vector): Matrix{
494
+ let result = new Matrix(this.list[0].continuousAttributeSize(), this.list[0].continuousAttributeSize());
495
+ for (let instance of this.list) {
496
+ let continuousAttributes = instance.continuousAttributes();
497
+ for (let i = 0; i < instance.continuousAttributeSize(); i++) {
498
+ let xi = continuousAttributes[i];
499
+ let mi = average.getValue(i);
500
+ for (let j = 0; j < instance.continuousAttributeSize(); j++) {
501
+ let xj = continuousAttributes[j];
502
+ let mj = average.getValue(j);
503
+ result.addValue(i, j, (xi - mi) * (xj - mj));
504
+ }
505
+ }
506
+ }
507
+ result.divideByConstant(this.list.length - 1);
508
+ return result;
509
+ }
510
+
511
+ /**
512
+ * Accessor for the instances.
513
+ *
514
+ * @return Instances.
515
+ */
516
+ getInstances(): Array<Instance>{
517
+ return this.list
518
+ }
519
+ }
@@ -0,0 +1,25 @@
1
+ import {InstanceList} from "./InstanceList";
2
+
3
+ export class InstanceListOfSameClass extends InstanceList{
4
+
5
+ private classLabel: string
6
+
7
+ /**
8
+ * Constructor for creating a new instance list with the same class label.
9
+ *
10
+ * @param classLabel Class label of instance list.
11
+ */
12
+ constructor(classLabel: string) {
13
+ super();
14
+ this.classLabel = classLabel
15
+ }
16
+
17
+ /**
18
+ * Accessor for the class label.
19
+ *
20
+ * @return Class label.
21
+ */
22
+ getClassLabel(): string{
23
+ return this.classLabel
24
+ }
25
+ }
@@ -0,0 +1,131 @@
1
+ import {InstanceList} from "./InstanceList";
2
+ import {InstanceListOfSameClass} from "./InstanceListOfSameClass";
3
+ import {DiscreteAttribute} from "../Attribute/DiscreteAttribute";
4
+ import {DiscreteIndexedAttribute} from "../Attribute/DiscreteIndexedAttribute";
5
+ import {ContinuousAttribute} from "../Attribute/ContinuousAttribute";
6
+ import {Instance} from "../Instance/Instance";
7
+
8
+ export class Partition {
9
+
10
+ private multiList: Array<InstanceList> = new Array<InstanceList>()
11
+
12
+ constructor(instanceList?: InstanceList, attributeIndex?: number, stratifiedOrValue?: any) {
13
+ if (instanceList != undefined){
14
+ if (attributeIndex == undefined){
15
+ let classLabels = instanceList.getDistinctClassLabels();
16
+ for (let classLabel of classLabels){
17
+ this.add(new InstanceListOfSameClass(classLabel));
18
+ }
19
+ for (let instance of instanceList.getInstances()) {
20
+ this.get(classLabels.indexOf(instance.getClassLabel())).add(instance);
21
+ }
22
+ } else {
23
+ if (stratifiedOrValue == undefined){
24
+ let valueList = instanceList.getAttributeValueList(attributeIndex);
25
+ for (let value of valueList) {
26
+ this.add(new InstanceList());
27
+ }
28
+ for (let instance of instanceList.getInstances()) {
29
+ this.get(valueList.indexOf((<DiscreteAttribute> instance.getAttribute(attributeIndex)).getValue())).add(instance);
30
+ }
31
+ } else {
32
+ if (typeof stratifiedOrValue == "boolean"){
33
+ this.add(new InstanceList());
34
+ this.add(new InstanceList());
35
+ if (stratifiedOrValue){
36
+ let distribution = instanceList.classDistribution();
37
+ let counts = new Array<number>(distribution.size).fill(0)
38
+ let randomArray = new Array<number>();
39
+ for (let i = 0; i < instanceList.size(); i++){
40
+ randomArray.push(i);
41
+ }
42
+ for (let i = 0; i < instanceList.size(); i++) {
43
+ let instance = instanceList.get(randomArray[i]);
44
+ let classIndex = distribution.getIndex(instance.getClassLabel());
45
+ let ratio = attributeIndex
46
+ if (counts[classIndex] < instanceList.size() * ratio * distribution.getProbability(instance.getClassLabel())) {
47
+ this.get(0).add(instance);
48
+ } else {
49
+ this.get(1).add(instance);
50
+ }
51
+ counts[classIndex]++;
52
+ }
53
+ } else {
54
+ for (let i = 0; i < instanceList.size(); i++) {
55
+ let instance = instanceList.get(i);
56
+ let ratio = attributeIndex
57
+ if (i < instanceList.size() * ratio) {
58
+ this.get(0).add(instance);
59
+ } else {
60
+ this.get(1).add(instance);
61
+ }
62
+ }
63
+ }
64
+ } else {
65
+ this.add(new InstanceList());
66
+ this.add(new InstanceList());
67
+ if (Number.isInteger(stratifiedOrValue)){
68
+ for (let instance of instanceList.getInstances()) {
69
+ if ((<DiscreteIndexedAttribute> instance.getAttribute(attributeIndex)).getIndex() == stratifiedOrValue) {
70
+ this.get(0).add(instance);
71
+ } else {
72
+ this.get(1).add(instance);
73
+ }
74
+ }
75
+ } else {
76
+ for (let instance of instanceList.getInstances()) {
77
+ if ((<ContinuousAttribute> instance.getAttribute(attributeIndex)).getValue() <= stratifiedOrValue) {
78
+ this.get(0).add(instance);
79
+ } else {
80
+ this.get(1).add(instance);
81
+ }
82
+ }
83
+ }
84
+ }
85
+ }
86
+ }
87
+ }
88
+ }
89
+
90
+ /**
91
+ * Adds given instance list to the list of instance lists.
92
+ *
93
+ * @param list Instance list to add.
94
+ */
95
+ add(list: InstanceList){
96
+ this.multiList.push(list)
97
+ }
98
+
99
+ /**
100
+ * Returns the size of the list of instance lists.
101
+ *
102
+ * @return The size of the list of instance lists.
103
+ */
104
+ size(): number{
105
+ return this.multiList.length
106
+ }
107
+
108
+ /**
109
+ * Returns the corresponding instance list at given index of list of instance lists.
110
+ *
111
+ * @param index Index of the instance list.
112
+ * @return Instance list at given index of list of instance lists.
113
+ */
114
+ get(index: number): InstanceList{
115
+ return this.multiList[index]
116
+ }
117
+
118
+ /**
119
+ * Returns the instances of the items at the list of instance lists.
120
+ *
121
+ * @return Instances of the items at the list of instance lists.
122
+ */
123
+ getLists(): Array<Array<Instance>>{
124
+ let result = new Array<Array<Instance>>(this.multiList.length);
125
+ for (let i = 0; i < this.multiList.length; i++) {
126
+ result.push(this.multiList[i].getInstances());
127
+ }
128
+ return result;
129
+ }
130
+
131
+ }