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.
- data/.gitignore +1 -0
- data/.rakeTasks +7 -0
- data/README.rdoc +56 -0
- data/Rakefile.rb +42 -0
- data/VERSION +1 -0
- data/ai4r.gemspec +221 -0
- data/change_log +49 -0
- data/examples/classifiers/id3_data.csv +121 -0
- data/examples/classifiers/id3_example.rb +29 -0
- data/examples/classifiers/naive_bayes_data.csv +11 -0
- data/examples/classifiers/naive_bayes_example.rb +16 -0
- data/examples/classifiers/results.txt +31 -0
- data/examples/genetic_algorithm/genetic_algorithm_example.rb +37 -0
- data/examples/genetic_algorithm/travel_cost.csv +16 -0
- data/examples/neural_network/backpropagation_example.rb +67 -0
- data/examples/neural_network/patterns_with_base_noise.rb +68 -0
- data/examples/neural_network/patterns_with_noise.rb +66 -0
- data/examples/neural_network/training_patterns.rb +68 -0
- data/examples/neural_network/xor_example.rb +35 -0
- data/examples/som/som_data.rb +156 -0
- data/examples/som/som_multi_node_example.rb +22 -0
- data/examples/som/som_single_example.rb +24 -0
- data/lib/ai4r.rb +32 -0
- data/lib/ai4r/classifiers/classifier.rb +59 -0
- data/lib/ai4r/classifiers/hyperpipes.rb +118 -0
- data/lib/ai4r/classifiers/id3.rb +326 -0
- data/lib/ai4r/classifiers/multilayer_perceptron.rb +135 -0
- data/lib/ai4r/classifiers/naive_bayes.rb +259 -0
- data/lib/ai4r/classifiers/one_r.rb +110 -0
- data/lib/ai4r/classifiers/prism.rb +197 -0
- data/lib/ai4r/classifiers/zero_r.rb +73 -0
- data/lib/ai4r/clusterers/average_linkage.rb +59 -0
- data/lib/ai4r/clusterers/bisecting_k_means.rb +93 -0
- data/lib/ai4r/clusterers/centroid_linkage.rb +66 -0
- data/lib/ai4r/clusterers/clusterer.rb +61 -0
- data/lib/ai4r/clusterers/complete_linkage.rb +67 -0
- data/lib/ai4r/clusterers/diana.rb +139 -0
- data/lib/ai4r/clusterers/k_means.rb +126 -0
- data/lib/ai4r/clusterers/median_linkage.rb +61 -0
- data/lib/ai4r/clusterers/single_linkage.rb +194 -0
- data/lib/ai4r/clusterers/ward_linkage.rb +64 -0
- data/lib/ai4r/clusterers/weighted_average_linkage.rb +61 -0
- data/lib/ai4r/data/data_set.rb +266 -0
- data/lib/ai4r/data/parameterizable.rb +64 -0
- data/lib/ai4r/data/proximity.rb +100 -0
- data/lib/ai4r/data/statistics.rb +77 -0
- data/lib/ai4r/experiment/classifier_evaluator.rb +95 -0
- data/lib/ai4r/genetic_algorithm/genetic_algorithm.rb +270 -0
- data/lib/ai4r/neural_network/backpropagation.rb +293 -0
- data/lib/ai4r/neural_network/hopfield.rb +149 -0
- data/lib/ai4r/som/layer.rb +68 -0
- data/lib/ai4r/som/node.rb +96 -0
- data/lib/ai4r/som/som.rb +155 -0
- data/lib/ai4r/som/two_phase_layer.rb +90 -0
- data/site/forrest.properties +152 -0
- data/site/forrest.properties.dispatcher.properties +25 -0
- data/site/forrest.properties.xml +29 -0
- data/site/src/documentation/README.txt +7 -0
- data/site/src/documentation/classes/CatalogManager.properties +62 -0
- data/site/src/documentation/content/locationmap.xml +72 -0
- data/site/src/documentation/content/xdocs/downloads.html +9 -0
- data/site/src/documentation/content/xdocs/geneticAlgorithms.xml +294 -0
- data/site/src/documentation/content/xdocs/index.xml +155 -0
- data/site/src/documentation/content/xdocs/machineLearning.xml +131 -0
- data/site/src/documentation/content/xdocs/neuralNetworks.xml +270 -0
- data/site/src/documentation/content/xdocs/site.xml +54 -0
- data/site/src/documentation/content/xdocs/sourceCode.xml +43 -0
- data/site/src/documentation/content/xdocs/tabs.xml +35 -0
- data/site/src/documentation/resources/images/ai4r-logo.png +0 -0
- data/site/src/documentation/resources/images/c.png +0 -0
- data/site/src/documentation/resources/images/c_wbn.png +0 -0
- data/site/src/documentation/resources/images/c_wn.png +0 -0
- data/site/src/documentation/resources/images/ellipse-2.svg +30 -0
- data/site/src/documentation/resources/images/ero.gif +0 -0
- data/site/src/documentation/resources/images/europe2.png +0 -0
- data/site/src/documentation/resources/images/europe3.png +0 -0
- data/site/src/documentation/resources/images/fitness.png +0 -0
- data/site/src/documentation/resources/images/genetic_algorithms_example.png +0 -0
- data/site/src/documentation/resources/images/icon-a.png +0 -0
- data/site/src/documentation/resources/images/icon-b.png +0 -0
- data/site/src/documentation/resources/images/icon.png +0 -0
- data/site/src/documentation/resources/images/jadeferret.png +0 -0
- data/site/src/documentation/resources/images/my_email.png +0 -0
- data/site/src/documentation/resources/images/neural_network_example.png +0 -0
- data/site/src/documentation/resources/images/project-logo.png +0 -0
- data/site/src/documentation/resources/images/rubyforge.png +0 -0
- data/site/src/documentation/resources/images/s.png +0 -0
- data/site/src/documentation/resources/images/s_wbn.png +0 -0
- data/site/src/documentation/resources/images/s_wn.png +0 -0
- data/site/src/documentation/resources/images/sigmoid.png +0 -0
- data/site/src/documentation/resources/images/sub-dir/icon-c.png +0 -0
- data/site/src/documentation/resources/images/t.png +0 -0
- data/site/src/documentation/resources/images/t_wbn.png +0 -0
- data/site/src/documentation/resources/images/t_wn.png +0 -0
- data/site/src/documentation/resources/schema/catalog.xcat +29 -0
- data/site/src/documentation/resources/schema/hello-v10.dtd +51 -0
- data/site/src/documentation/resources/schema/symbols-project-v10.ent +26 -0
- data/site/src/documentation/resources/stylesheets/hello2document.xsl +33 -0
- data/site/src/documentation/sitemap.xmap +66 -0
- data/site/src/documentation/skinconf.xml +418 -0
- data/site/src/documentation/translations/langcode.xml +29 -0
- data/site/src/documentation/translations/languages_de.xml +24 -0
- data/site/src/documentation/translations/languages_en.xml +24 -0
- data/site/src/documentation/translations/languages_es.xml +22 -0
- data/site/src/documentation/translations/languages_fr.xml +24 -0
- data/site/src/documentation/translations/languages_nl.xml +24 -0
- data/site/src/documentation/translations/menu.xml +33 -0
- data/site/src/documentation/translations/menu_af.xml +33 -0
- data/site/src/documentation/translations/menu_de.xml +33 -0
- data/site/src/documentation/translations/menu_es.xml +33 -0
- data/site/src/documentation/translations/menu_fr.xml +33 -0
- data/site/src/documentation/translations/menu_it.xml +33 -0
- data/site/src/documentation/translations/menu_nl.xml +33 -0
- data/site/src/documentation/translations/menu_no.xml +33 -0
- data/site/src/documentation/translations/menu_ru.xml +33 -0
- data/site/src/documentation/translations/menu_sk.xml +33 -0
- data/site/src/documentation/translations/tabs.xml +22 -0
- data/site/src/documentation/translations/tabs_de.xml +22 -0
- data/site/src/documentation/translations/tabs_es.xml +22 -0
- data/site/src/documentation/translations/tabs_fr.xml +22 -0
- data/site/src/documentation/translations/tabs_nl.xml +22 -0
- data/test/classifiers/hyperpipes_test.rb +84 -0
- data/test/classifiers/id3_test.rb +208 -0
- data/test/classifiers/multilayer_perceptron_test.rb +79 -0
- data/test/classifiers/naive_bayes_test.rb +43 -0
- data/test/classifiers/one_r_test.rb +62 -0
- data/test/classifiers/prism_test.rb +85 -0
- data/test/classifiers/zero_r_test.rb +50 -0
- data/test/clusterers/average_linkage_test.rb +51 -0
- data/test/clusterers/bisecting_k_means_test.rb +66 -0
- data/test/clusterers/centroid_linkage_test.rb +53 -0
- data/test/clusterers/complete_linkage_test.rb +57 -0
- data/test/clusterers/diana_test.rb +69 -0
- data/test/clusterers/k_means_test.rb +100 -0
- data/test/clusterers/median_linkage_test.rb +53 -0
- data/test/clusterers/single_linkage_test.rb +122 -0
- data/test/clusterers/ward_linkage_test.rb +53 -0
- data/test/clusterers/weighted_average_linkage_test.rb +53 -0
- data/test/data/data_set.csv +121 -0
- data/test/data/data_set_test.rb +96 -0
- data/test/data/proximity_test.rb +81 -0
- data/test/data/statistics_data_set.csv +5 -0
- data/test/data/statistics_test.rb +65 -0
- data/test/experiment/classifier_evaluator_test.rb +76 -0
- data/test/genetic_algorithm/chromosome_test.rb +58 -0
- data/test/genetic_algorithm/genetic_algorithm_test.rb +81 -0
- data/test/neural_network/backpropagation_test.rb +69 -0
- data/test/neural_network/hopfield_test.rb +72 -0
- data/test/som/som_test.rb +97 -0
- 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,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
|