nirvdrum-ai4r 1.9.1

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 (150) hide show
  1. data/.gitignore +1 -0
  2. data/.rakeTasks +7 -0
  3. data/README.rdoc +56 -0
  4. data/Rakefile.rb +42 -0
  5. data/VERSION +1 -0
  6. data/ai4r.gemspec +221 -0
  7. data/change_log +49 -0
  8. data/examples/classifiers/id3_data.csv +121 -0
  9. data/examples/classifiers/id3_example.rb +29 -0
  10. data/examples/classifiers/naive_bayes_data.csv +11 -0
  11. data/examples/classifiers/naive_bayes_example.rb +16 -0
  12. data/examples/classifiers/results.txt +31 -0
  13. data/examples/genetic_algorithm/genetic_algorithm_example.rb +37 -0
  14. data/examples/genetic_algorithm/travel_cost.csv +16 -0
  15. data/examples/neural_network/backpropagation_example.rb +67 -0
  16. data/examples/neural_network/patterns_with_base_noise.rb +68 -0
  17. data/examples/neural_network/patterns_with_noise.rb +66 -0
  18. data/examples/neural_network/training_patterns.rb +68 -0
  19. data/examples/neural_network/xor_example.rb +35 -0
  20. data/examples/som/som_data.rb +156 -0
  21. data/examples/som/som_multi_node_example.rb +22 -0
  22. data/examples/som/som_single_example.rb +24 -0
  23. data/lib/ai4r.rb +32 -0
  24. data/lib/ai4r/classifiers/classifier.rb +59 -0
  25. data/lib/ai4r/classifiers/hyperpipes.rb +118 -0
  26. data/lib/ai4r/classifiers/id3.rb +326 -0
  27. data/lib/ai4r/classifiers/multilayer_perceptron.rb +135 -0
  28. data/lib/ai4r/classifiers/naive_bayes.rb +259 -0
  29. data/lib/ai4r/classifiers/one_r.rb +110 -0
  30. data/lib/ai4r/classifiers/prism.rb +197 -0
  31. data/lib/ai4r/classifiers/zero_r.rb +73 -0
  32. data/lib/ai4r/clusterers/average_linkage.rb +59 -0
  33. data/lib/ai4r/clusterers/bisecting_k_means.rb +93 -0
  34. data/lib/ai4r/clusterers/centroid_linkage.rb +66 -0
  35. data/lib/ai4r/clusterers/clusterer.rb +61 -0
  36. data/lib/ai4r/clusterers/complete_linkage.rb +67 -0
  37. data/lib/ai4r/clusterers/diana.rb +139 -0
  38. data/lib/ai4r/clusterers/k_means.rb +126 -0
  39. data/lib/ai4r/clusterers/median_linkage.rb +61 -0
  40. data/lib/ai4r/clusterers/single_linkage.rb +194 -0
  41. data/lib/ai4r/clusterers/ward_linkage.rb +64 -0
  42. data/lib/ai4r/clusterers/weighted_average_linkage.rb +61 -0
  43. data/lib/ai4r/data/data_set.rb +266 -0
  44. data/lib/ai4r/data/parameterizable.rb +64 -0
  45. data/lib/ai4r/data/proximity.rb +100 -0
  46. data/lib/ai4r/data/statistics.rb +77 -0
  47. data/lib/ai4r/experiment/classifier_evaluator.rb +95 -0
  48. data/lib/ai4r/genetic_algorithm/genetic_algorithm.rb +270 -0
  49. data/lib/ai4r/neural_network/backpropagation.rb +293 -0
  50. data/lib/ai4r/neural_network/hopfield.rb +149 -0
  51. data/lib/ai4r/som/layer.rb +68 -0
  52. data/lib/ai4r/som/node.rb +96 -0
  53. data/lib/ai4r/som/som.rb +155 -0
  54. data/lib/ai4r/som/two_phase_layer.rb +90 -0
  55. data/site/forrest.properties +152 -0
  56. data/site/forrest.properties.dispatcher.properties +25 -0
  57. data/site/forrest.properties.xml +29 -0
  58. data/site/src/documentation/README.txt +7 -0
  59. data/site/src/documentation/classes/CatalogManager.properties +62 -0
  60. data/site/src/documentation/content/locationmap.xml +72 -0
  61. data/site/src/documentation/content/xdocs/downloads.html +9 -0
  62. data/site/src/documentation/content/xdocs/geneticAlgorithms.xml +294 -0
  63. data/site/src/documentation/content/xdocs/index.xml +155 -0
  64. data/site/src/documentation/content/xdocs/machineLearning.xml +131 -0
  65. data/site/src/documentation/content/xdocs/neuralNetworks.xml +270 -0
  66. data/site/src/documentation/content/xdocs/site.xml +54 -0
  67. data/site/src/documentation/content/xdocs/sourceCode.xml +43 -0
  68. data/site/src/documentation/content/xdocs/tabs.xml +35 -0
  69. data/site/src/documentation/resources/images/ai4r-logo.png +0 -0
  70. data/site/src/documentation/resources/images/c.png +0 -0
  71. data/site/src/documentation/resources/images/c_wbn.png +0 -0
  72. data/site/src/documentation/resources/images/c_wn.png +0 -0
  73. data/site/src/documentation/resources/images/ellipse-2.svg +30 -0
  74. data/site/src/documentation/resources/images/ero.gif +0 -0
  75. data/site/src/documentation/resources/images/europe2.png +0 -0
  76. data/site/src/documentation/resources/images/europe3.png +0 -0
  77. data/site/src/documentation/resources/images/fitness.png +0 -0
  78. data/site/src/documentation/resources/images/genetic_algorithms_example.png +0 -0
  79. data/site/src/documentation/resources/images/icon-a.png +0 -0
  80. data/site/src/documentation/resources/images/icon-b.png +0 -0
  81. data/site/src/documentation/resources/images/icon.png +0 -0
  82. data/site/src/documentation/resources/images/jadeferret.png +0 -0
  83. data/site/src/documentation/resources/images/my_email.png +0 -0
  84. data/site/src/documentation/resources/images/neural_network_example.png +0 -0
  85. data/site/src/documentation/resources/images/project-logo.png +0 -0
  86. data/site/src/documentation/resources/images/rubyforge.png +0 -0
  87. data/site/src/documentation/resources/images/s.png +0 -0
  88. data/site/src/documentation/resources/images/s_wbn.png +0 -0
  89. data/site/src/documentation/resources/images/s_wn.png +0 -0
  90. data/site/src/documentation/resources/images/sigmoid.png +0 -0
  91. data/site/src/documentation/resources/images/sub-dir/icon-c.png +0 -0
  92. data/site/src/documentation/resources/images/t.png +0 -0
  93. data/site/src/documentation/resources/images/t_wbn.png +0 -0
  94. data/site/src/documentation/resources/images/t_wn.png +0 -0
  95. data/site/src/documentation/resources/schema/catalog.xcat +29 -0
  96. data/site/src/documentation/resources/schema/hello-v10.dtd +51 -0
  97. data/site/src/documentation/resources/schema/symbols-project-v10.ent +26 -0
  98. data/site/src/documentation/resources/stylesheets/hello2document.xsl +33 -0
  99. data/site/src/documentation/sitemap.xmap +66 -0
  100. data/site/src/documentation/skinconf.xml +418 -0
  101. data/site/src/documentation/translations/langcode.xml +29 -0
  102. data/site/src/documentation/translations/languages_de.xml +24 -0
  103. data/site/src/documentation/translations/languages_en.xml +24 -0
  104. data/site/src/documentation/translations/languages_es.xml +22 -0
  105. data/site/src/documentation/translations/languages_fr.xml +24 -0
  106. data/site/src/documentation/translations/languages_nl.xml +24 -0
  107. data/site/src/documentation/translations/menu.xml +33 -0
  108. data/site/src/documentation/translations/menu_af.xml +33 -0
  109. data/site/src/documentation/translations/menu_de.xml +33 -0
  110. data/site/src/documentation/translations/menu_es.xml +33 -0
  111. data/site/src/documentation/translations/menu_fr.xml +33 -0
  112. data/site/src/documentation/translations/menu_it.xml +33 -0
  113. data/site/src/documentation/translations/menu_nl.xml +33 -0
  114. data/site/src/documentation/translations/menu_no.xml +33 -0
  115. data/site/src/documentation/translations/menu_ru.xml +33 -0
  116. data/site/src/documentation/translations/menu_sk.xml +33 -0
  117. data/site/src/documentation/translations/tabs.xml +22 -0
  118. data/site/src/documentation/translations/tabs_de.xml +22 -0
  119. data/site/src/documentation/translations/tabs_es.xml +22 -0
  120. data/site/src/documentation/translations/tabs_fr.xml +22 -0
  121. data/site/src/documentation/translations/tabs_nl.xml +22 -0
  122. data/test/classifiers/hyperpipes_test.rb +84 -0
  123. data/test/classifiers/id3_test.rb +208 -0
  124. data/test/classifiers/multilayer_perceptron_test.rb +79 -0
  125. data/test/classifiers/naive_bayes_test.rb +43 -0
  126. data/test/classifiers/one_r_test.rb +62 -0
  127. data/test/classifiers/prism_test.rb +85 -0
  128. data/test/classifiers/zero_r_test.rb +50 -0
  129. data/test/clusterers/average_linkage_test.rb +51 -0
  130. data/test/clusterers/bisecting_k_means_test.rb +66 -0
  131. data/test/clusterers/centroid_linkage_test.rb +53 -0
  132. data/test/clusterers/complete_linkage_test.rb +57 -0
  133. data/test/clusterers/diana_test.rb +69 -0
  134. data/test/clusterers/k_means_test.rb +100 -0
  135. data/test/clusterers/median_linkage_test.rb +53 -0
  136. data/test/clusterers/single_linkage_test.rb +122 -0
  137. data/test/clusterers/ward_linkage_test.rb +53 -0
  138. data/test/clusterers/weighted_average_linkage_test.rb +53 -0
  139. data/test/data/data_set.csv +121 -0
  140. data/test/data/data_set_test.rb +96 -0
  141. data/test/data/proximity_test.rb +81 -0
  142. data/test/data/statistics_data_set.csv +5 -0
  143. data/test/data/statistics_test.rb +65 -0
  144. data/test/experiment/classifier_evaluator_test.rb +76 -0
  145. data/test/genetic_algorithm/chromosome_test.rb +58 -0
  146. data/test/genetic_algorithm/genetic_algorithm_test.rb +81 -0
  147. data/test/neural_network/backpropagation_test.rb +69 -0
  148. data/test/neural_network/hopfield_test.rb +72 -0
  149. data/test/som/som_test.rb +97 -0
  150. metadata +238 -0
@@ -0,0 +1,121 @@
1
+ zone,rooms,size,price
2
+ Moron Sur (GBA),2,[28 m2 - 39 m2],[29K-35K]
3
+ Moron Sur (GBA),2,[28 m2 - 39 m2],[29K-35K]
4
+ Moron Sur (GBA),2,[28 m2 - 39 m2],[29K-35K]
5
+ Moron Sur (GBA),2,[28 m2 - 39 m2],[29K-35K]
6
+ Moron Sur (GBA),2,[28 m2 - 39 m2],[29K-35K]
7
+ Moron Sur (GBA),2,[28 m2 - 39 m2],[29K-35K]
8
+ Moron Sur (GBA),2,[28 m2 - 39 m2],[29K-35K]
9
+ Moron Sur (GBA),2,[28 m2 - 39 m2],[36K-45K]
10
+ Moron Sur (GBA),2,[28 m2 - 39 m2],[36K-45K]
11
+ Moron Sur (GBA),2,[28 m2 - 39 m2],[36K-45K]
12
+ Moron Sur (GBA),2,[28 m2 - 39 m2],[29K-35K]
13
+ Moron Sur (GBA),2,[28 m2 - 39 m2],[36K-45K]
14
+ Moron Sur (GBA),2,[40 m2 - 50 m2],[36K-45K]
15
+ Moron Sur (GBA),2,[40 m2 - 50 m2],[29K-35K]
16
+ Moron Sur (GBA),2,[40 m2 - 50 m2],[29K-35K]
17
+ Moron Sur (GBA),2,[40 m2 - 50 m2],[56K-75K]
18
+ Moron Sur (GBA),3,[40 m2 - 50 m2],[36K-45K]
19
+ Moron Sur (GBA),2,[40 m2 - 50 m2],[29K-35K]
20
+ Moron Sur (GBA),2,[51 m2 - 59 m2],[36K-45K]
21
+ Moron Sur (GBA),3,[51 m2 - 59 m2],[46K-55K]
22
+ Moron Sur (GBA),3,[51 m2 - 59 m2],[36K-45K]
23
+ Moron Sur (GBA),3,[51 m2 - 59 m2],[36K-45K]
24
+ Moron Sur (GBA),3,[51 m2 - 59 m2],[36K-45K]
25
+ Moron Sur (GBA),3,[51 m2 - 59 m2],[36K-45K]
26
+ Moron Sur (GBA),3,[51 m2 - 59 m2],[46K-55K]
27
+ Moron Sur (GBA),2,[51 m2 - 59 m2],[46K-55K]
28
+ Moron Sur (GBA),3,[60 m2 - 70 m2],[46K-55K]
29
+ Moron Sur (GBA),3,[60 m2 - 70 m2],[46K-55K]
30
+ Moron Sur (GBA),3,[60 m2 - 70 m2],[56K-75K]
31
+ Moron Sur (GBA),3,[60 m2 - 70 m2],[56K-75K]
32
+ Moron Sur (GBA),3,[60 m2 - 70 m2],[36K-45K]
33
+ Moron Sur (GBA),3,[60 m2 - 70 m2],[36K-45K]
34
+ Moron Sur (GBA),3,[60 m2 - 70 m2],[56K-75K]
35
+ Moron Sur (GBA),3,[71 m2 - 85 m2],[46K-55K]
36
+ Moron Sur (GBA),3,[86 m2 - 100 m2],[46K-55K]
37
+ Moron Sur (GBA),4,[101 m2 - 125 m2],[101K-125K]
38
+ Moron Sur (GBA),3,[101 m2 - 125 m2],[76K-100K]
39
+ Moron Sur (GBA),4,[101 m2 - 125 m2],[170K-200K]
40
+ Moron Sur (GBA),4,[101 m2 - 125 m2],[76K-100K]
41
+ Moron Sur (GBA),4,[126 m2 - 160 m2],[56K-75K]
42
+ Moron Sur (GBA),4,[126 m2 - 160 m2],[126K-150K]
43
+ Recoleta (CABA),2,[28 m2 - 39 m2],[46K-55K]
44
+ Recoleta (CABA),2,[28 m2 - 39 m2],[56K-75K]
45
+ Recoleta (CABA),2,[28 m2 - 39 m2],[56K-75K]
46
+ Recoleta (CABA),2,[28 m2 - 39 m2],[46K-55K]
47
+ Recoleta (CABA),2,[40 m2 - 50 m2],[56K-75K]
48
+ Recoleta (CABA),2,[40 m2 - 50 m2],[76K-100K]
49
+ Recoleta (CABA),2,[40 m2 - 50 m2],[76K-100K]
50
+ Recoleta (CABA),2,[40 m2 - 50 m2],[56K-75K]
51
+ Recoleta (CABA),2,[40 m2 - 50 m2],[101K-125K]
52
+ Recoleta (CABA),2,[51 m2 - 59 m2],[101K-125K]
53
+ Recoleta (CABA),2,[51 m2 - 59 m2],[56K-75K]
54
+ Recoleta (CABA),2,[51 m2 - 59 m2],[76K-100K]
55
+ Recoleta (CABA),2,[51 m2 - 59 m2],[76K-100K]
56
+ Recoleta (CABA),2,[60 m2 - 70 m2],[56K-75K]
57
+ Recoleta (CABA),2,[60 m2 - 70 m2],[76K-100K]
58
+ Recoleta (CABA),3,[60 m2 - 70 m2],[101K-125K]
59
+ Recoleta (CABA),2,[60 m2 - 70 m2],[76K-100K]
60
+ Recoleta (CABA),2,[60 m2 - 70 m2],[76K-100K]
61
+ Recoleta (CABA),2,[60 m2 - 70 m2],[126K-150K]
62
+ Recoleta (CABA),3,[60 m2 - 70 m2],[76K-100K]
63
+ Recoleta (CABA),3,[60 m2 - 70 m2],[76K-100K]
64
+ Recoleta (CABA),2,[71 m2 - 85 m2],[152K-169K]
65
+ Recoleta (CABA),3,[71 m2 - 85 m2],[126K-150K]
66
+ Recoleta (CABA),3,[71 m2 - 85 m2],[152K-169K]
67
+ Recoleta (CABA),3,[71 m2 - 85 m2],[170K-200K]
68
+ Recoleta (CABA),3,[71 m2 - 85 m2],[101K-125K]
69
+ Recoleta (CABA),3,[71 m2 - 85 m2],[170K-200K]
70
+ Recoleta (CABA),3,[71 m2 - 85 m2],[76K-100K]
71
+ Recoleta (CABA),2,[71 m2 - 85 m2],[126K-150K]
72
+ Recoleta (CABA),3,[71 m2 - 85 m2],[126K-150K]
73
+ Recoleta (CABA),2,[71 m2 - 85 m2],[200K-275K]
74
+ Recoleta (CABA),3,[86 m2 - 100 m2],[152K-169K]
75
+ Recoleta (CABA),3,[86 m2 - 100 m2],[170K-200K]
76
+ Recoleta (CABA),4,[86 m2 - 100 m2],[126K-150K]
77
+ Recoleta (CABA),4,[86 m2 - 100 m2],[126K-150K]
78
+ Recoleta (CABA),3,[86 m2 - 100 m2],[200K-275K]
79
+ Recoleta (CABA),3,[86 m2 - 100 m2],[126K-150K]
80
+ Recoleta (CABA),3,[86 m2 - 100 m2],[152K-169K]
81
+ Recoleta (CABA),3,[86 m2 - 100 m2],[200K-275K]
82
+ Recoleta (CABA),3,[101 m2 - 125 m2],[200K-275K]
83
+ Recoleta (CABA),3,[101 m2 - 125 m2],[170K-200K]
84
+ Recoleta (CABA),4,[101 m2 - 125 m2],[170K-200K]
85
+ Recoleta (CABA),4,[101 m2 - 125 m2],[200K-275K]
86
+ Recoleta (CABA),3,[101 m2 - 125 m2],[56K-75K]
87
+ Recoleta (CABA),4,[101 m2 - 125 m2],[200K-275K]
88
+ Recoleta (CABA),4,[101 m2 - 125 m2],[170K-200K]
89
+ Recoleta (CABA),3,[126 m2 - 160 m2],[200K-275K]
90
+ Recoleta (CABA),4,[126 m2 - 160 m2],[200K-275K]
91
+ Recoleta (CABA),3,[126 m2 - 160 m2],[152K-169K]
92
+ Recoleta (CABA),3,[126 m2 - 160 m2],[200K-275K]
93
+ Recoleta (CABA),4,[126 m2 - 160 m2],>275K
94
+ Recoleta (CABA),3,[126 m2 - 160 m2],[200K-275K]
95
+ Recoleta (CABA),4,[126 m2 - 160 m2],>275K
96
+ Recoleta (CABA),3,[126 m2 - 160 m2],[170K-200K]
97
+ Tigre (GBA),2,[28 m2 - 39 m2],[56K-75K]
98
+ Tigre (GBA),2,[40 m2 - 50 m2],[56K-75K]
99
+ Tigre (GBA),2,[40 m2 - 50 m2],[76K-100K]
100
+ Tigre (GBA),2,[51 m2 - 59 m2],[101K-125K]
101
+ Tigre (GBA),2,[51 m2 - 59 m2],[101K-125K]
102
+ Tigre (GBA),3,[51 m2 - 59 m2],[101K-125K]
103
+ Tigre (GBA),3,[51 m2 - 59 m2],[101K-125K]
104
+ Tigre (GBA),3,[51 m2 - 59 m2],[126K-150K]
105
+ Tigre (GBA),2,[71 m2 - 85 m2],[126K-150K]
106
+ Tigre (GBA),2,[71 m2 - 85 m2],[126K-150K]
107
+ Tigre (GBA),2,[71 m2 - 85 m2],[126K-150K]
108
+ Tigre (GBA),3,[86 m2 - 100 m2],[170K-200K]
109
+ Tigre (GBA),4,[86 m2 - 100 m2],[152K-169K]
110
+ Tigre (GBA),4,[86 m2 - 100 m2],[152K-169K]
111
+ Tigre (GBA),3,[86 m2 - 100 m2],[152K-169K]
112
+ Tigre (GBA),3,[86 m2 - 100 m2],[152K-169K]
113
+ Tigre (GBA),3,[101 m2 - 125 m2],[152K-169K]
114
+ Tigre (GBA),4,[101 m2 - 125 m2],[170K-200K]
115
+ Tigre (GBA),4,[101 m2 - 125 m2],[170K-200K]
116
+ Tigre (GBA),4,[101 m2 - 125 m2],[200K-275K]
117
+ Tigre (GBA),4,[101 m2 - 125 m2],[200K-275K]
118
+ Tigre (GBA),4,[101 m2 - 125 m2],[170K-200K]
119
+ Tigre (GBA),4,[101 m2 - 125 m2],>275K
120
+ Tigre (GBA),4,[101 m2 - 125 m2],>275K
121
+ Tigre (GBA),4,[126 m2 - 160 m2],>275K
@@ -0,0 +1,96 @@
1
+ # Author:: Sergio Fierens
2
+ # License:: MPL 1.1
3
+ # Project:: ai4r
4
+ # Url:: http://ai4r.rubyforge.org/
5
+ #
6
+ # You can redistribute it and/or modify it under the terms of
7
+ # the Mozilla Public License version 1.1 as published by the
8
+ # Mozilla Foundation at http://www.mozilla.org/MPL/MPL-1.1.txt
9
+
10
+ require 'test/unit'
11
+ require File.dirname(__FILE__) + '/../../lib/ai4r/data/data_set'
12
+
13
+ module Ai4r
14
+ module Data
15
+ class DataSetTest < Test::Unit::TestCase
16
+
17
+ def test_load_csv_with_labels
18
+ set = DataSet.new.load_csv_with_labels("#{File.dirname(__FILE__)}/data_set.csv")
19
+ assert_equal 120, set.data_items.length
20
+ assert_equal ["zone", "rooms", "size", "price"], set.data_labels
21
+ end
22
+
23
+ def test_build_domains
24
+ domains = [ Set.new(["New York", "Chicago"]),
25
+ Set.new(["M", "F"]),
26
+ [5, 85],
27
+ Set.new(["Y", "N"]) ]
28
+ data = [ [ "New York", "M", 23, "Y"],
29
+ [ "Chicago", "M", 85, "Y"],
30
+ [ "New York", "F", 32, "Y"],
31
+ [ "New York", "M", 5, "N"],
32
+ [ "Chicago", "M", 15, "N"],
33
+ [ "Chicago", "F", 45, "Y"] ]
34
+ labels = ["city", "gender", "age", "result"]
35
+ set = DataSet.new({:data_items => data, :data_labels => labels})
36
+ assert_equal domains, set.build_domains
37
+ assert_equal domains[0], set.build_domain("city")
38
+ assert_equal domains[1], set.build_domain(1)
39
+ assert_equal domains[2], set.build_domain("age")
40
+ assert_equal domains[3], set.build_domain("result")
41
+ end
42
+
43
+ def test_set_data_labels
44
+ labels = ["A", "B"]
45
+ set = DataSet.new.set_data_labels(labels)
46
+ assert_equal labels, set.data_labels
47
+ set = DataSet.new(:data_labels => labels)
48
+ assert_equal labels, set.data_labels
49
+ set = DataSet.new(:data_items => [[ 1, 2, 3]])
50
+ assert_raise(ArgumentError) { set.set_data_labels(labels) }
51
+ end
52
+
53
+ def test_set_data_items
54
+ items = [ [ "New York", "M", "Y"],
55
+ [ "Chicago", "M", "Y"],
56
+ [ "New York", "F", "Y"],
57
+ [ "New York", "M", "N"],
58
+ [ "Chicago", "M", "N"],
59
+ [ "Chicago", "F", "Y"] ]
60
+ set = DataSet.new.set_data_items(items)
61
+ assert_equal items, set.data_items
62
+ assert_equal 3, set.data_labels.length
63
+ items << items.first[0..-2]
64
+ assert_raise(ArgumentError) { set.set_data_items(items) }
65
+ assert_raise(ArgumentError) { set.set_data_items(nil) }
66
+ assert_raise(ArgumentError) { set.set_data_items([1]) }
67
+ end
68
+
69
+ def test_get_mean_or_mode
70
+ items = [ [ "New York", 25, "Y"],
71
+ [ "New York", 55, "Y"],
72
+ [ "Chicago", 23, "Y"],
73
+ [ "Boston", 23, "N"],
74
+ [ "Chicago", 12, "N"],
75
+ [ "Chicago", 87, "Y"] ]
76
+ set = DataSet.new.set_data_items(items)
77
+ assert_equal ["Chicago", 37.5, "Y"], set.get_mean_or_mode
78
+ end
79
+
80
+ def test_index
81
+ items = [ [ "New York", 25, "Y"],
82
+ [ "New York", 55, "Y"],
83
+ [ "Chicago", 23, "Y"],
84
+ [ "Boston", 23, "N"],
85
+ [ "Chicago", 12, "N"],
86
+ [ "Chicago", 87, "Y"] ]
87
+ set = DataSet.new.set_data_items(items)
88
+ assert_equal set.data_labels, set[0].data_labels
89
+ assert_equal [[ "New York", 25, "Y"]], set[0].data_items
90
+ assert_equal [[ "Chicago", 23, "Y"],[ "Boston", 23, "N"]], set[2..3].data_items
91
+ assert_equal items[1..-1], set[1..-1].data_items
92
+ end
93
+
94
+ end
95
+ end
96
+ end
@@ -0,0 +1,81 @@
1
+ # Author:: Sergio Fierens
2
+ # License:: MPL 1.1
3
+ # Project:: ai4r
4
+ # Url:: http://ai4r.rubyforge.org/
5
+ #
6
+ # You can redistribute it and/or modify it under the terms of
7
+ # the Mozilla Public License version 1.1 as published by the
8
+ # Mozilla Foundation at http://www.mozilla.org/MPL/MPL-1.1.txt
9
+
10
+ require 'test/unit'
11
+ require File.dirname(__FILE__) + '/../../lib/ai4r/data/proximity'
12
+
13
+ module Ai4r
14
+ module Data
15
+ class ProximityTest < Test::Unit::TestCase
16
+
17
+ @@delta = 0.0001
18
+ @@data1 = [rand*10, rand*10, rand*-10]
19
+ @@data2 = [rand*10, rand*-10, rand*10]
20
+
21
+ def test_squared_euclidean_distance
22
+ assert_equal 0, Proximity.squared_euclidean_distance(@@data1, @@data1)
23
+ assert_equal Proximity.squared_euclidean_distance(@@data1, @@data2),
24
+ Proximity.squared_euclidean_distance(@@data2, @@data1)
25
+ assert 0 <= Proximity.squared_euclidean_distance(@@data1, @@data1)
26
+ assert_equal 2, Proximity.squared_euclidean_distance([1,1], [2,2])
27
+ assert_equal 9, Proximity.squared_euclidean_distance([3], [0])
28
+ end
29
+
30
+ def test_euclidean_distance
31
+ assert_equal 0, Proximity.euclidean_distance(@@data1, @@data1)
32
+ assert_equal Proximity.euclidean_distance(@@data1, @@data2),
33
+ Proximity.euclidean_distance(@@data2, @@data1)
34
+ assert 0 <= Proximity.euclidean_distance(@@data1, @@data1)
35
+ assert_equal Math.sqrt(2), Proximity.euclidean_distance([1,1], [2,2])
36
+ assert_equal 3, Proximity.euclidean_distance([3], [0])
37
+ end
38
+
39
+ def test_manhattan_distance
40
+ assert_equal 0, Proximity.manhattan_distance(@@data1, @@data1)
41
+ assert_equal Proximity.manhattan_distance(@@data1, @@data2),
42
+ Proximity.manhattan_distance(@@data2, @@data1)
43
+ assert 0 <= Proximity.manhattan_distance(@@data1, @@data1)
44
+ assert_equal 2, Proximity.manhattan_distance([1,1], [2,2])
45
+ assert_equal 9, Proximity.manhattan_distance([1,10], [2,2])
46
+ assert_equal 3, Proximity.manhattan_distance([3], [0])
47
+ end
48
+
49
+ def test_sup_distance
50
+ assert_equal 0, Proximity.sup_distance(@@data1, @@data1)
51
+ assert_equal Proximity.sup_distance(@@data1, @@data2),
52
+ Proximity.sup_distance(@@data2, @@data1)
53
+ assert 0 <= Proximity.sup_distance(@@data1, @@data1)
54
+ assert_equal 1, Proximity.sup_distance([1,1], [2,2])
55
+ assert_equal 8, Proximity.sup_distance([1,10], [2,2])
56
+ assert_equal 3, Proximity.sup_distance([3], [0])
57
+ end
58
+
59
+ def test_hamming_distance
60
+ assert_equal 0, Proximity.hamming_distance(@@data1, @@data1)
61
+ assert_equal Proximity.hamming_distance(@@data1, @@data2),
62
+ Proximity.hamming_distance(@@data2, @@data1)
63
+ assert 0 <= Proximity.hamming_distance(@@data1, @@data1)
64
+ assert_equal 1, Proximity.hamming_distance([1,1], [0,1])
65
+ assert_equal 2, Proximity.hamming_distance([1,10], [2,2])
66
+ assert_equal 1, Proximity.hamming_distance([3], [0])
67
+ end
68
+
69
+ def test_simple_matching_distance
70
+ assert_equal 0, Proximity.simple_matching_distance(@@data1, @@data1)
71
+ assert_equal Proximity.simple_matching_distance(@@data1, @@data2),
72
+ Proximity.simple_matching_distance(@@data2, @@data1)
73
+ assert 0 <= Proximity.simple_matching_distance(@@data1, @@data1)
74
+ assert_equal 1, Proximity.simple_matching_distance([1,2], [0,1])
75
+ assert_equal 1.0/0, Proximity.simple_matching_distance([1,10], [2,2])
76
+ assert_equal 1.0/0, Proximity.simple_matching_distance([3], [0])
77
+ end
78
+
79
+ end
80
+ end
81
+ end
@@ -0,0 +1,5 @@
1
+ 1,2,3.0,4,5
2
+ 3,2,3.0,4,5
3
+ 6,2,3,4.0,5
4
+ 1.11,2,3.3,4,5
5
+ 1.4,2,3.7,4,5
@@ -0,0 +1,65 @@
1
+ # Author:: Sergio Fierens
2
+ # License:: MPL 1.1
3
+ # Project:: ai4r
4
+ # Url:: http://ai4r.rubyforge.org/
5
+ #
6
+ # You can redistribute it and/or modify it under the terms of
7
+ # the Mozilla Public License version 1.1 as published by the
8
+ # Mozilla Foundation at http://www.mozilla.org/MPL/MPL-1.1.txt
9
+
10
+ require 'test/unit'
11
+ require File.dirname(__FILE__) + '/../../lib/ai4r/data/statistics'
12
+
13
+ module Ai4r
14
+ module Data
15
+ class StatisticsTest < Test::Unit::TestCase
16
+
17
+ DELTA = 0.00001
18
+
19
+ def setup
20
+ @data_set = DataSet.new.
21
+ parse_csv "#{File.dirname(__FILE__)}/statistics_data_set.csv"
22
+ end
23
+
24
+ def test_mean
25
+ assert_equal 2, Statistics.mean(@data_set, 1)
26
+ assert_equal 2.502, Statistics.mean(@data_set, 0)
27
+ end
28
+
29
+ def test_variance
30
+ assert_equal 0, Statistics.variance(@data_set, 1)
31
+ assert_in_delta 4.47302, Statistics.variance(@data_set, 0), DELTA
32
+ end
33
+
34
+ def test_standard_deviation
35
+ assert_equal 0, Statistics.standard_deviation(@data_set, 1)
36
+ assert_in_delta 2.11495, Statistics.standard_deviation(@data_set, 0), DELTA
37
+ end
38
+
39
+ def test_mode
40
+ items = [ [ "New York", 25, "Y"],
41
+ [ "New York", 55, "Y"],
42
+ [ "Chicago", 23, "Y"],
43
+ [ "Boston", 23, "N"],
44
+ [ "Chicago", 12, "N"],
45
+ [ "Chicago", 87, "Y"] ]
46
+ set = DataSet.new.set_data_items(items)
47
+ assert_equal "Chicago", Statistics.mode(set,0)
48
+ assert_equal 23, Statistics.mode(set,1)
49
+ assert_equal "Y", Statistics.mode(set,2)
50
+ end
51
+
52
+ def test_min
53
+ assert_equal 2, Statistics.min(@data_set, 1)
54
+ assert_equal 1, Statistics.min(@data_set, 0)
55
+ end
56
+
57
+ def test_max
58
+ assert_equal 2, Statistics.max(@data_set, 1)
59
+ assert_equal 6, Statistics.max(@data_set, 0)
60
+ assert_equal 3.7, Statistics.max(@data_set, 2)
61
+ end
62
+
63
+ end
64
+ end
65
+ end
@@ -0,0 +1,76 @@
1
+ # Author:: Sergio Fierens
2
+ # License:: MPL 1.1
3
+ # Project:: ai4r
4
+ # Url:: http://ai4r.rubyforge.org/
5
+ #
6
+ # You can redistribute it and/or modify it under the terms of
7
+ # the Mozilla Public License version 1.1 as published by the
8
+ # Mozilla Foundation at http://www.mozilla.org/MPL/MPL-1.1.txt
9
+
10
+ require 'test/unit'
11
+ require File.dirname(__FILE__) + '/../../lib/ai4r/experiment/classifier_evaluator'
12
+ require File.dirname(__FILE__) + '/../../lib/ai4r/classifiers/classifier'
13
+
14
+ class MockClassifier < Ai4r::Classifiers::Classifier
15
+
16
+ attr_accessor :built
17
+
18
+ def initialize(class_value)
19
+ @built = false
20
+ @class_value = class_value
21
+ end
22
+
23
+ def build(data_set)
24
+ @built = true
25
+ end
26
+
27
+ def eval(data)
28
+ @class_value
29
+ end
30
+
31
+ end
32
+
33
+ module Ai4r
34
+ module Experiment
35
+ class ClassifierEvaluatorTest < Test::Unit::TestCase
36
+
37
+ def test_add_classifier
38
+ evaluator = ClassifierEvaluator.new
39
+ evaluator << MockClassifier.new(nil) << MockClassifier.new(nil)
40
+ evaluator.add_classifier(MockClassifier.new(nil)).
41
+ add_classifier(MockClassifier.new(nil)).
42
+ add_classifier(MockClassifier.new(nil))
43
+ assert_equal 5, evaluator.classifiers.length
44
+ end
45
+
46
+ def test_build
47
+ evaluator = ClassifierEvaluator.new
48
+ 5.times { evaluator << MockClassifier.new(nil) }
49
+ evaluator.classifiers.each {|c| assert !c.built}
50
+ evaluator.build(Ai4r::Data::DataSet.new)
51
+ evaluator.classifiers.each {|c| assert c.built}
52
+ end
53
+
54
+ def test_eval
55
+ evaluator = ClassifierEvaluator.new
56
+ 5.times { |x| evaluator << MockClassifier.new(x) }
57
+ assert_equal [0, 1, 2, 3, 4], evaluator.eval([])
58
+ end
59
+
60
+ def test_test
61
+ evaluator = ClassifierEvaluator.new
62
+ 5.times { |x| evaluator << MockClassifier.new(x) }
63
+ input = Ai4r::Data::DataSet.new :data_items =>
64
+ [[0],[0],[0],[1],[2],[3]]
65
+ output = evaluator.test input
66
+ assert_equal 5, output.data_items.length # 5 classifiers, 5 result rows
67
+ output.data_items.each { |result| assert result[1]>=0 && result[1]<1} # eval time
68
+ assert_equal 3, output.data_items.first[2] # 3 errors for the 1st classifier
69
+ assert_equal 0.5, output.data_items.first[3] # succes rate
70
+ assert_equal 6, output.data_items.last[2] # 6 errors for the last classifier
71
+ assert_equal 0, output.data_items.last[3] # succes rate
72
+ end
73
+
74
+ end
75
+ end
76
+ end