ai4r 1.12 → 1.13
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/README.rdoc +7 -12
- data/examples/classifiers/simple_linear_regression_example.csv +159 -0
- data/examples/classifiers/simple_linear_regression_example.rb +15 -0
- data/examples/clusterers/clusterer_example.rb +56 -0
- data/examples/neural_network/backpropagation_example.rb +2 -1
- data/lib/ai4r.rb +3 -1
- data/lib/ai4r/classifiers/id3.rb +6 -2
- data/lib/ai4r/classifiers/multilayer_perceptron.rb +1 -1
- data/lib/ai4r/classifiers/naive_bayes.rb +24 -21
- data/lib/ai4r/classifiers/simple_linear_regression.rb +118 -0
- data/lib/ai4r/clusterers/average_linkage.rb +3 -3
- data/lib/ai4r/clusterers/bisecting_k_means.rb +2 -2
- data/lib/ai4r/clusterers/centroid_linkage.rb +3 -3
- data/lib/ai4r/clusterers/clusterer.rb +0 -11
- data/lib/ai4r/clusterers/complete_linkage.rb +3 -3
- data/lib/ai4r/clusterers/diana.rb +2 -2
- data/lib/ai4r/clusterers/k_means.rb +123 -21
- data/lib/ai4r/clusterers/median_linkage.rb +3 -3
- data/lib/ai4r/clusterers/single_linkage.rb +4 -4
- data/lib/ai4r/clusterers/ward_linkage.rb +4 -4
- data/lib/ai4r/clusterers/ward_linkage_hierarchical.rb +48 -0
- data/lib/ai4r/clusterers/weighted_average_linkage.rb +3 -3
- data/lib/ai4r/data/data_set.rb +12 -3
- data/lib/ai4r/data/proximity.rb +22 -0
- data/lib/ai4r/neural_network/backpropagation.rb +26 -15
- data/test/classifiers/id3_test.rb +12 -0
- data/test/classifiers/multilayer_perceptron_test.rb +1 -1
- data/test/classifiers/naive_bayes_test.rb +18 -18
- data/test/classifiers/simple_linear_regression_test.rb +37 -0
- data/test/clusterers/k_means_test.rb +75 -8
- data/test/clusterers/ward_linkage_hierarchical_test.rb +81 -0
- data/test/data/data_set_test.rb +8 -0
- data/test/data/proximity_test.rb +7 -1
- metadata +96 -55
data/README.rdoc
CHANGED
@@ -1,7 +1,6 @@
|
|
1
1
|
= Introduction
|
2
2
|
|
3
|
-
This project aims to produce ruby implementations of
|
4
|
-
algorithms covering several Artificial intelligence fields.
|
3
|
+
This project aims to produce ruby implementations of algorithms covering several Artificial intelligence fields.
|
5
4
|
|
6
5
|
= Where can I find the lastest code and info on this project?
|
7
6
|
|
@@ -11,13 +10,13 @@ http://www.ai4r.org
|
|
11
10
|
|
12
11
|
1. Install the gem:
|
13
12
|
|
14
|
-
|
13
|
+
gem install ai4r
|
15
14
|
|
16
15
|
2. Include require statements in your code:
|
17
16
|
|
18
17
|
require "rubygems"
|
19
18
|
require "ai4r"
|
20
|
-
|
19
|
+
|
21
20
|
= More Info
|
22
21
|
|
23
22
|
* AI4R Project site: http://www.ai4r.org
|
@@ -31,14 +30,10 @@ If you have questions or constructive comments about this project send it to me:
|
|
31
30
|
= Contributors
|
32
31
|
|
33
32
|
This project was created and is maintained by {Sergio Fierens}[https://github.com/SergioFierens].
|
34
|
-
There are other (great and absolutely cool) people who have donated time and code to make this project better
|
35
|
-
|
36
|
-
* {Thomas Kern}[https://github.com/thomaskern]
|
37
|
-
* {Luis Parravicini}[https://github.com/luisparravicini]
|
38
|
-
* {Kevin Menard}[https://github.com/nirvdrum]
|
33
|
+
There are other (great and absolutely cool) people who have donated time and code to make this project better. You can check out the complete AI4R contributors list: http://github.com/SergioFierens/ai4r/graphs/contributors.
|
39
34
|
|
40
35
|
= Disclaimer
|
41
36
|
|
42
|
-
This software is provided "as is" and without any express or implied warranties,
|
43
|
-
including, without limitation, the implied warranties of merchantibility and
|
44
|
-
fitness for a particular purpose.
|
37
|
+
This software is provided "as is" and without any express or implied warranties,
|
38
|
+
including, without limitation, the implied warranties of merchantibility and
|
39
|
+
fitness for a particular purpose.
|
@@ -0,0 +1,159 @@
|
|
1
|
+
symboling,normalized-losses,wheel-base,length,width,height,curb-weight,engine-size,bore,stroke,compression-ratio,horsepower,peak-rpm,city-mpg,highway-mpg,class
|
2
|
+
2,164,99.8,176.6,66.2,54.3,2337,109,3.19,3.4,10,102,5500,24,30,13950
|
3
|
+
2,164,99.4,176.6,66.4,54.3,2824,136,3.19,3.4,8,115,5500,18,22,17450
|
4
|
+
1,158,105.8,192.7,71.4,55.7,2844,136,3.19,3.4,8.5,110,5500,19,25,17710
|
5
|
+
1,158,105.8,192.7,71.4,55.9,3086,131,3.13,3.4,8.3,140,5500,17,20,23875
|
6
|
+
2,192,101.2,176.8,64.8,54.3,2395,108,3.5,2.8,8.8,101,5800,23,29,16430
|
7
|
+
0,192,101.2,176.8,64.8,54.3,2395,108,3.5,2.8,8.8,101,5800,23,29,16925
|
8
|
+
0,188,101.2,176.8,64.8,54.3,2710,164,3.31,3.19,9,121,4250,21,28,20970
|
9
|
+
0,188,101.2,176.8,64.8,54.3,2765,164,3.31,3.19,9,121,4250,21,28,21105
|
10
|
+
2,121,88.4,141.1,60.3,53.2,1488,61,2.91,3.03,9.5,48,5100,47,53,5151
|
11
|
+
1,98,94.5,155.9,63.6,52,1874,90,3.03,3.11,9.6,70,5400,38,43,6295
|
12
|
+
0,81,94.5,158.8,63.6,52,1909,90,3.03,3.11,9.6,70,5400,38,43,6575
|
13
|
+
1,118,93.7,157.3,63.8,50.8,1876,90,2.97,3.23,9.41,68,5500,37,41,5572
|
14
|
+
1,118,93.7,157.3,63.8,50.8,1876,90,2.97,3.23,9.4,68,5500,31,38,6377
|
15
|
+
1,118,93.7,157.3,63.8,50.8,2128,98,3.03,3.39,7.6,102,5500,24,30,7957
|
16
|
+
1,148,93.7,157.3,63.8,50.6,1967,90,2.97,3.23,9.4,68,5500,31,38,6229
|
17
|
+
1,148,93.7,157.3,63.8,50.6,1989,90,2.97,3.23,9.4,68,5500,31,38,6692
|
18
|
+
1,148,93.7,157.3,63.8,50.6,1989,90,2.97,3.23,9.4,68,5500,31,38,7609
|
19
|
+
-1,110,103.3,174.6,64.6,59.8,2535,122,3.34,3.46,8.5,88,5000,24,30,8921
|
20
|
+
3,145,95.9,173.2,66.3,50.2,2811,156,3.6,3.9,7,145,5000,19,24,12964
|
21
|
+
2,137,86.6,144.6,63.9,50.8,1713,92,2.91,3.41,9.6,58,4800,49,54,6479
|
22
|
+
2,137,86.6,144.6,63.9,50.8,1819,92,2.91,3.41,9.2,76,6000,31,38,6855
|
23
|
+
1,101,93.7,150,64,52.6,1837,79,2.91,3.07,10.1,60,5500,38,42,5399
|
24
|
+
1,101,93.7,150,64,52.6,1940,92,2.91,3.41,9.2,76,6000,30,34,6529
|
25
|
+
1,101,93.7,150,64,52.6,1956,92,2.91,3.41,9.2,76,6000,30,34,7129
|
26
|
+
0,110,96.5,163.4,64,54.5,2010,92,2.91,3.41,9.2,76,6000,30,34,7295
|
27
|
+
0,78,96.5,157.1,63.9,58.3,2024,92,2.92,3.41,9.2,76,6000,30,34,7295
|
28
|
+
0,106,96.5,167.5,65.2,53.3,2236,110,3.15,3.58,9,86,5800,27,33,7895
|
29
|
+
0,106,96.5,167.5,65.2,53.3,2289,110,3.15,3.58,9,86,5800,27,33,9095
|
30
|
+
0,85,96.5,175.4,65.2,54.1,2304,110,3.15,3.58,9,86,5800,27,33,8845
|
31
|
+
0,85,96.5,175.4,62.5,54.1,2372,110,3.15,3.58,9,86,5800,27,33,10295
|
32
|
+
0,85,96.5,175.4,65.2,54.1,2465,110,3.15,3.58,9,101,5800,24,28,12945
|
33
|
+
1,107,96.5,169.1,66,51,2293,110,3.15,3.58,9.1,100,5500,25,31,10345
|
34
|
+
0,145,113,199.6,69.6,52.8,4066,258,3.63,4.17,8.1,176,4750,15,19,32250
|
35
|
+
1,104,93.1,159.1,64.2,54.1,1890,91,3.03,3.15,9,68,5000,30,31,5195
|
36
|
+
1,104,93.1,159.1,64.2,54.1,1900,91,3.03,3.15,9,68,5000,31,38,6095
|
37
|
+
1,104,93.1,159.1,64.2,54.1,1905,91,3.03,3.15,9,68,5000,31,38,6795
|
38
|
+
1,113,93.1,166.8,64.2,54.1,1945,91,3.03,3.15,9,68,5000,31,38,6695
|
39
|
+
1,113,93.1,166.8,64.2,54.1,1950,91,3.08,3.15,9,68,5000,31,38,7395
|
40
|
+
1,129,98.8,177.8,66.5,53.7,2385,122,3.39,3.39,8.6,84,4800,26,32,8845
|
41
|
+
0,115,98.8,177.8,66.5,55.5,2410,122,3.39,3.39,8.6,84,4800,26,32,8495
|
42
|
+
1,129,98.8,177.8,66.5,53.7,2385,122,3.39,3.39,8.6,84,4800,26,32,10595
|
43
|
+
0,115,98.8,177.8,66.5,55.5,2410,122,3.39,3.39,8.6,84,4800,26,32,10245
|
44
|
+
0,115,98.8,177.8,66.5,55.5,2425,122,3.39,3.39,8.6,84,4800,26,32,11245
|
45
|
+
0,118,104.9,175,66.1,54.4,2670,140,3.76,3.16,8,120,5000,19,27,18280
|
46
|
+
-1,93,110,190.9,70.3,56.5,3515,183,3.58,3.64,21.5,123,4350,22,25,25552
|
47
|
+
-1,93,110,190.9,70.3,58.7,3750,183,3.58,3.64,21.5,123,4350,22,25,28248
|
48
|
+
0,93,106.7,187.5,70.3,54.9,3495,183,3.58,3.64,21.5,123,4350,22,25,28176
|
49
|
+
-1,93,115.6,202.6,71.7,56.3,3770,183,3.58,3.64,21.5,123,4350,22,25,31600
|
50
|
+
3,142,96.6,180.3,70.5,50.8,3685,234,3.46,3.1,8.3,155,4750,16,18,35056
|
51
|
+
2,161,93.7,157.3,64.4,50.8,1918,92,2.97,3.23,9.4,68,5500,37,41,5389
|
52
|
+
2,161,93.7,157.3,64.4,50.8,1944,92,2.97,3.23,9.4,68,5500,31,38,6189
|
53
|
+
2,161,93.7,157.3,64.4,50.8,2004,92,2.97,3.23,9.4,68,5500,31,38,6669
|
54
|
+
1,161,93,157.3,63.8,50.8,2145,98,3.03,3.39,7.6,102,5500,24,30,7689
|
55
|
+
3,153,96.3,173,65.4,49.4,2370,110,3.17,3.46,7.5,116,5500,23,30,9959
|
56
|
+
3,153,96.3,173,65.4,49.4,2328,122,3.35,3.46,8.5,88,5000,25,32,8499
|
57
|
+
1,125,96.3,172.4,65.4,51.6,2365,122,3.35,3.46,8.5,88,5000,25,32,6989
|
58
|
+
1,125,96.3,172.4,65.4,51.6,2405,122,3.35,3.46,8.5,88,5000,25,32,8189
|
59
|
+
1,125,96.3,172.4,65.4,51.6,2403,110,3.17,3.46,7.5,116,5500,23,30,9279
|
60
|
+
-1,137,96.3,172.4,65.4,51.6,2403,110,3.17,3.46,7.5,116,5500,23,30,9279
|
61
|
+
1,128,94.5,165.3,63.8,54.5,1889,97,3.15,3.29,9.4,69,5200,31,37,5499
|
62
|
+
1,128,94.5,165.3,63.8,54.5,2017,103,2.99,3.47,21.9,55,4800,45,50,7099
|
63
|
+
1,128,94.5,165.3,63.8,54.5,1918,97,3.15,3.29,9.4,69,5200,31,37,6649
|
64
|
+
1,122,94.5,165.3,63.8,54.5,1938,97,3.15,3.29,9.4,69,5200,31,37,6849
|
65
|
+
1,103,94.5,170.2,63.8,53.5,2024,97,3.15,3.29,9.4,69,5200,31,37,7349
|
66
|
+
1,128,94.5,165.3,63.8,54.5,1951,97,3.15,3.29,9.4,69,5200,31,37,7299
|
67
|
+
1,128,94.5,165.6,63.8,53.3,2028,97,3.15,3.29,9.4,69,5200,31,37,7799
|
68
|
+
1,122,94.5,165.3,63.8,54.5,1971,97,3.15,3.29,9.4,69,5200,31,37,7499
|
69
|
+
1,103,94.5,170.2,63.8,53.5,2037,97,3.15,3.29,9.4,69,5200,31,37,7999
|
70
|
+
2,168,95.1,162.4,63.8,53.3,2008,97,3.15,3.29,9.4,69,5200,31,37,8249
|
71
|
+
0,106,97.2,173.4,65.2,54.7,2324,120,3.33,3.47,8.5,97,5200,27,34,8949
|
72
|
+
0,106,97.2,173.4,65.2,54.7,2302,120,3.33,3.47,8.5,97,5200,27,34,9549
|
73
|
+
0,128,100.4,181.7,66.5,55.1,3095,181,3.43,3.27,9,152,5200,17,22,13499
|
74
|
+
0,108,100.4,184.6,66.5,56.1,3296,181,3.43,3.27,9,152,5200,17,22,14399
|
75
|
+
0,108,100.4,184.6,66.5,55.1,3060,181,3.43,3.27,9,152,5200,19,25,13499
|
76
|
+
3,194,91.3,170.7,67.9,49.7,3071,181,3.43,3.27,9,160,5200,19,25,17199
|
77
|
+
3,194,91.3,170.7,67.9,49.7,3139,181,3.43,3.27,7.8,200,5200,17,23,19699
|
78
|
+
1,231,99.2,178.5,67.9,49.7,3139,181,3.43,3.27,9,160,5200,19,25,18399
|
79
|
+
0,161,107.9,186.7,68.4,56.7,3020,120,3.46,3.19,8.4,97,5000,19,24,11900
|
80
|
+
0,161,107.9,186.7,68.4,56.7,3197,152,3.7,3.52,21,95,4150,28,33,13200
|
81
|
+
0,161,107.9,186.7,68.4,56.7,3075,120,3.46,2.19,8.4,95,5000,19,24,15580
|
82
|
+
0,161,107.9,186.7,68.4,56.7,3252,152,3.7,3.52,21,95,4150,28,33,16900
|
83
|
+
0,161,107.9,186.7,68.4,56.7,3075,120,3.46,3.19,8.4,97,5000,19,24,16630
|
84
|
+
0,161,107.9,186.7,68.4,56.7,3252,152,3.7,3.52,21,95,4150,28,33,17950
|
85
|
+
0,161,108,186.7,68.3,56,3130,134,3.61,3.21,7,142,5600,18,24,18150
|
86
|
+
1,119,93.7,157.3,63.8,50.8,1918,90,2.97,3.23,9.4,68,5500,37,41,5572
|
87
|
+
1,119,93.7,157.3,63.8,50.8,2128,98,3.03,3.39,7.6,102,5500,24,30,7957
|
88
|
+
1,154,93.7,157.3,63.8,50.6,1967,90,2.97,3.23,9.4,68,5500,31,38,6229
|
89
|
+
1,154,93.7,167.3,63.8,50.8,1989,90,2.97,3.23,9.4,68,5500,31,38,6692
|
90
|
+
1,154,93.7,167.3,63.8,50.8,2191,98,2.97,3.23,9.4,68,5500,31,38,7609
|
91
|
+
-1,74,103.3,174.6,64.6,59.8,2535,122,3.35,3.46,8.5,88,5000,24,30,8921
|
92
|
+
3,186,94.5,168.9,68.3,50.2,2778,151,3.94,3.11,9.5,143,5500,19,27,22018
|
93
|
+
3,150,99.1,186.6,66.5,56.1,2658,121,3.54,3.07,9.31,110,5250,21,28,11850
|
94
|
+
2,104,99.1,186.6,66.5,56.1,2695,121,3.54,3.07,9.3,110,5250,21,28,12170
|
95
|
+
3,150,99.1,186.6,66.5,56.1,2707,121,2.54,2.07,9.3,110,5250,21,28,15040
|
96
|
+
2,104,99.1,186.6,66.5,56.1,2758,121,3.54,3.07,9.3,110,5250,21,28,15510
|
97
|
+
3,150,99.1,186.6,66.5,56.1,2808,121,3.54,3.07,9,160,5500,19,26,18150
|
98
|
+
2,104,99.1,186.6,66.5,56.1,2847,121,3.54,3.07,9,160,5500,19,26,18620
|
99
|
+
2,83,93.7,156.9,63.4,53.7,2050,97,3.62,2.36,9,69,4900,31,36,5118
|
100
|
+
2,83,93.7,157.9,63.6,53.7,2120,108,3.62,2.64,8.7,73,4400,26,31,7053
|
101
|
+
2,83,93.3,157.3,63.8,55.7,2240,108,3.62,2.64,8.7,73,4400,26,31,7603
|
102
|
+
0,102,97.2,172,65.4,52.5,2145,108,3.62,2.64,9.5,82,4800,32,37,7126
|
103
|
+
0,102,97.2,172,65.4,52.5,2190,108,3.62,2.64,9.5,82,4400,28,33,7775
|
104
|
+
0,102,97.2,172,65.4,52.5,2340,108,3.62,2.64,9,94,5200,26,32,9960
|
105
|
+
0,102,97,172,65.4,54.3,2385,108,3.62,2.64,9,82,4800,24,25,9233
|
106
|
+
0,102,97,172,65.4,54.3,2510,108,3.62,2.64,7.7,111,4800,24,29,11259
|
107
|
+
0,89,97,173.5,65.4,53,2290,108,3.62,2.64,9,82,4800,28,32,7463
|
108
|
+
0,89,97,173.5,65.4,53,2455,108,3.62,2.64,9,94,5200,25,31,10198
|
109
|
+
0,85,96.9,173.6,65.4,54.9,2420,108,3.62,2.64,9,82,4800,23,29,8013
|
110
|
+
0,85,96.9,173.6,65.4,54.9,2650,108,3.62,2.64,7.7,111,4800,23,23,11694
|
111
|
+
1,87,95.7,158.7,63.6,54.5,1985,92,3.05,3.03,9,62,4800,35,39,5348
|
112
|
+
1,87,95.7,158.7,63.6,54.5,2040,92,3.05,3.03,9,62,4800,31,38,6338
|
113
|
+
1,74,95.7,158.7,63.6,54.5,2015,92,3.05,3.03,9,62,4800,31,38,6488
|
114
|
+
0,77,95.7,169.7,63.6,59.1,2280,92,3.05,3.03,9,62,4800,31,37,6918
|
115
|
+
0,81,95.7,169.7,63.6,59.1,2290,92,3.05,3.03,9,62,4800,27,32,7898
|
116
|
+
0,91,95.7,169.7,63.6,59.1,3110,92,3.05,3.03,9,62,4800,27,32,8778
|
117
|
+
0,91,95.7,166.3,64.4,53,2081,98,3.19,3.03,9,70,4800,30,37,6938
|
118
|
+
0,91,95.7,166.3,64.4,52.8,2109,98,3.19,3.03,9,70,4800,30,37,7198
|
119
|
+
0,91,95.7,166.3,64.4,53,2275,110,3.27,3.35,22.5,56,4500,34,36,7898
|
120
|
+
0,91,95.7,166.3,64.4,52.8,2275,110,3.27,3.35,22.5,56,4500,38,47,7788
|
121
|
+
0,91,95.7,166.3,64.4,53,2094,98,3.19,3.03,9,70,4800,38,47,7738
|
122
|
+
0,91,95.7,166.3,64.4,52.8,2122,98,3.19,3.03,9,70,4800,28,34,8358
|
123
|
+
0,91,95.7,166.3,64.4,52.8,2140,98,3.19,3.03,9,70,4800,28,34,9258
|
124
|
+
1,168,94.5,168.7,64,52.6,2169,98,3.19,3.03,9,70,4800,29,34,8058
|
125
|
+
1,168,94.5,168.7,64,52.6,2204,98,3.19,3.03,9,70,4800,29,34,8238
|
126
|
+
1,168,94.5,168.7,64,52.6,2265,98,3.24,3.08,9.4,112,6600,26,29,9298
|
127
|
+
1,168,94.5,168.7,64,52.6,2300,98,3.24,3.08,9.4,112,6600,26,29,9538
|
128
|
+
2,134,98.4,176.2,65.6,52,2540,146,3.62,3.5,9.3,116,4800,24,30,8449
|
129
|
+
2,134,98.4,176.2,65.6,52,2536,146,3.62,3.5,9.3,116,4800,24,30,9639
|
130
|
+
2,134,98.4,176.2,65.6,52,2551,146,3.62,3.5,9.3,116,4800,24,30,9989
|
131
|
+
2,134,98.4,176.2,65.6,52,2679,146,3.62,3.5,9.3,116,4800,24,30,11199
|
132
|
+
2,134,98.4,176.2,65.6,52,2714,146,3.62,3.5,9.3,116,4800,24,30,11549
|
133
|
+
2,134,98.4,176.2,65.6,53,2975,146,3.62,3.5,9.3,116,4800,24,30,17669
|
134
|
+
-1,65,102.4,175.6,66.5,54.9,2326,122,3.31,3.54,8.7,92,4200,29,34,8948
|
135
|
+
-1,65,102.4,175.6,66.5,54.9,2480,110,3.27,3.35,22.5,73,4500,30,33,10698
|
136
|
+
-1,65,102.4,175.6,66.5,53.9,2414,122,3.31,3.54,8.7,92,4200,27,32,9988
|
137
|
+
-1,65,102.4,175.6,66.5,54.9,2414,122,3.31,3.54,8.7,92,4200,27,32,10898
|
138
|
+
-1,65,102.4,175.6,66.5,53.9,2458,122,3.31,3.54,8.7,92,4200,27,32,11248
|
139
|
+
3,197,102.9,183.5,67.7,52,2976,171,3.27,3.35,9.3,161,5200,20,24,16558
|
140
|
+
3,197,102.9,183.5,67.7,52,3016,171,3.27,3.35,9.3,161,5200,19,24,15998
|
141
|
+
-1,90,104.5,187.8,66.5,54.1,3131,171,3.27,3.35,9.2,156,5200,20,24,15690
|
142
|
+
2,122,97.3,171.7,65.5,55.7,2261,97,3.01,3.4,23,52,4800,37,46,7775
|
143
|
+
2,122,97.3,171.7,65.5,55.7,2209,109,3.19,3.4,9,85,5250,27,34,7975
|
144
|
+
2,94,97.3,171.7,65.5,55.7,2264,97,3.01,3.4,23,52,4800,37,46,7995
|
145
|
+
2,94,97.3,171.7,65.5,55.7,2212,109,3.19,3.4,9,85,5250,27,34,8195
|
146
|
+
2,94,97.3,171.7,65.5,55.7,2275,109,3.19,3.4,9,85,5250,27,34,8495
|
147
|
+
2,94,97.3,171.7,65.5,55.7,2319,97,3.01,3.4,23,68,4500,37,42,9495
|
148
|
+
2,94,97.3,171.7,65.5,55.7,2300,109,3.19,3.4,10,100,5500,26,32,9995
|
149
|
+
3,256,94.5,165.7,64,51.4,2221,109,3.19,3.4,8.5,90,5500,24,29,9980
|
150
|
+
-2,103,104.3,188.8,67.2,56.2,2912,141,3.78,3.15,9.5,114,5400,23,28,12940
|
151
|
+
-1,74,104.3,188.8,67.2,57.5,3034,141,3.78,3.15,9.5,114,5400,23,28,13415
|
152
|
+
-2,103,104.3,188.8,67.2,56.2,2935,141,3.78,3.15,9.5,114,5400,24,28,15985
|
153
|
+
-1,74,104.3,188.8,67.2,57.5,3042,141,3.78,3.15,9.5,114,5400,24,28,16515
|
154
|
+
-2,103,104.3,188.8,67.2,56.2,3045,130,3.62,3.15,7.5,162,5100,17,22,18420
|
155
|
+
-1,74,104.3,188.8,67.2,57.5,3157,130,3.62,3.15,7.5,162,5100,17,22,18950
|
156
|
+
-1,95,109.1,188.8,68.9,55.5,2952,141,3.78,3.15,9.5,114,5400,23,28,16845
|
157
|
+
-1,95,109.1,188.8,68.8,55.5,3049,141,3.78,3.15,8.7,160,5300,19,25,19045
|
158
|
+
-1,95,109.1,188.8,68.9,55.5,3012,173,3.58,2.87,8.8,134,5500,18,23,21485
|
159
|
+
-1,95,109.1,188.8,68.9,55.5,3217,145,3.01,3.4,23,106,4800,26,27,22470
|
@@ -0,0 +1,15 @@
|
|
1
|
+
require File.dirname(__FILE__) + '/../../lib/ai4r/classifiers/simple_linear_regression'
|
2
|
+
require File.dirname(__FILE__) + '/../../lib/ai4r/data/data_set'
|
3
|
+
require 'benchmark'
|
4
|
+
|
5
|
+
include Ai4r::Classifiers
|
6
|
+
include Ai4r::Data
|
7
|
+
|
8
|
+
data_set = DataSet.new
|
9
|
+
data_set.parse_csv_with_labels File.dirname(__FILE__) + "/simple_linear_regression_example.csv"
|
10
|
+
|
11
|
+
r = SimpleLinearRegression.new.build data_set
|
12
|
+
p r.eval([-1,95,109.1,188.8,68.9,55.5,3062,141,3.78,3.15,9.5,114,5400,19,25])
|
13
|
+
|
14
|
+
# => 11662.949367088606
|
15
|
+
#Actual price 22625
|
@@ -0,0 +1,56 @@
|
|
1
|
+
# Author:: Sergio Fierens (implementation)
|
2
|
+
# License:: MPL 1.1
|
3
|
+
# Project:: ai4r
|
4
|
+
# Url:: http://www.ai4r.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
|
+
# In this example we group results from a post-training survey into 4 groups.
|
11
|
+
# The Diana algorithm is used, but you can try other algorithms by changing
|
12
|
+
# the word "Diana" by "KMeans", "AverageLinkage", or any other cluster implementation.
|
13
|
+
# The cluster API is the same, so you can play around and observe different results.
|
14
|
+
|
15
|
+
require 'rubygems'
|
16
|
+
require 'ai4r'
|
17
|
+
include Ai4r::Data
|
18
|
+
include Ai4r::Clusterers
|
19
|
+
|
20
|
+
# 5 Questions on a post training survey
|
21
|
+
questions = [ "The material covered was appropriate for someone with my level of knowledge of the subject.",
|
22
|
+
"The material was presented in a clear and logical fashion",
|
23
|
+
"There was sufficient time in the session to cover the material that was presented",
|
24
|
+
"The instructor was respectful of students",
|
25
|
+
"The instructor provided good examples"]
|
26
|
+
|
27
|
+
# Answers to each question go from 1 (bad) to 5 (excellent)
|
28
|
+
# The answers array has an element per survey complemented.
|
29
|
+
# Each survey completed is in turn an array with the answer of each question.
|
30
|
+
answers = [ [ 1, 2, 3, 2, 2], # Answers of person 1
|
31
|
+
[ 5, 5, 3, 2, 2], # Answers of person 2
|
32
|
+
[ 1, 2, 3, 2, 2], # Answers of person 3
|
33
|
+
[ 1, 2, 2, 2, 2], # ...
|
34
|
+
[ 1, 2, 5, 5, 2],
|
35
|
+
[ 3, 3, 3, 3, 3],
|
36
|
+
[ 1, 2, 3, 2, 2],
|
37
|
+
[ 3, 2, 3, 5, 5],
|
38
|
+
[ 3, 3, 3, 5, 2],
|
39
|
+
[ 4, 4, 3, 1, 1],
|
40
|
+
[ 5, 5, 5, 5, 5],
|
41
|
+
[ 4, 2, 4, 2, 1],
|
42
|
+
[ 4, 4, 5, 5, 5],
|
43
|
+
[ 4, 4, 3, 2, 2],
|
44
|
+
[ 2, 2, 3, 2, 3],
|
45
|
+
[ 3, 3, 3, 1, 1]] # Answers of person 16
|
46
|
+
|
47
|
+
data_set = DataSet.new(:data_items => answers, :data_labels => questions)
|
48
|
+
|
49
|
+
# Let's group answers in 4 groups
|
50
|
+
clusterer = Diana.new.build(data_set, 4)
|
51
|
+
|
52
|
+
clusterer.clusters.each_with_index do |cluster, index|
|
53
|
+
puts "Group #{index+1}"
|
54
|
+
p cluster.data_items
|
55
|
+
end
|
56
|
+
|
@@ -16,7 +16,8 @@ require 'benchmark'
|
|
16
16
|
times = Benchmark.measure do
|
17
17
|
|
18
18
|
srand 1
|
19
|
-
|
19
|
+
|
20
|
+
# creating network with 256 input-neurons, 3-neurons and 0 hidden layers
|
20
21
|
net = Ai4r::NeuralNetwork::Backpropagation.new([256, 3])
|
21
22
|
|
22
23
|
tr_input = TRIANGLE.flatten.collect { |input| input.to_f / 5.0}
|
data/lib/ai4r.rb
CHANGED
@@ -14,6 +14,7 @@ require File.dirname(__FILE__) + "/ai4r/clusterers/weighted_average_linkage"
|
|
14
14
|
require File.dirname(__FILE__) + "/ai4r/clusterers/centroid_linkage"
|
15
15
|
require File.dirname(__FILE__) + "/ai4r/clusterers/median_linkage"
|
16
16
|
require File.dirname(__FILE__) + "/ai4r/clusterers/ward_linkage"
|
17
|
+
require File.dirname(__FILE__) + "/ai4r/clusterers/ward_linkage_hierarchical"
|
17
18
|
require File.dirname(__FILE__) + "/ai4r/clusterers/diana"
|
18
19
|
# Classifiers
|
19
20
|
require File.dirname(__FILE__) + "/ai4r/classifiers/classifier"
|
@@ -30,4 +31,5 @@ require File.dirname(__FILE__) + "/ai4r/neural_network/hopfield"
|
|
30
31
|
# Genetic Algorithms
|
31
32
|
require File.dirname(__FILE__) + "/ai4r/genetic_algorithm/genetic_algorithm"
|
32
33
|
# SOM
|
33
|
-
require File.dirname(__FILE__) + "/ai4r/som/som"
|
34
|
+
require File.dirname(__FILE__) + "/ai4r/som/som"
|
35
|
+
|
data/lib/ai4r/classifiers/id3.rb
CHANGED
@@ -280,7 +280,7 @@ module Ai4r
|
|
280
280
|
|
281
281
|
def value(data)
|
282
282
|
value = data[@index]
|
283
|
-
return
|
283
|
+
return ErrorNode.new.value(data) if !@values.include?(value)
|
284
284
|
return nodes[@values.index(value)].value(data)
|
285
285
|
end
|
286
286
|
|
@@ -313,9 +313,13 @@ module Ai4r
|
|
313
313
|
end
|
314
314
|
end
|
315
315
|
|
316
|
+
class ModelFailureError < StandardError
|
317
|
+
default_message = "There was not enough information during training to do a proper induction for this data element."
|
318
|
+
end
|
319
|
+
|
316
320
|
class ErrorNode #:nodoc: all
|
317
321
|
def value(data)
|
318
|
-
raise "There was not enough information during training to do a proper induction for
|
322
|
+
raise ModelFailureError, "There was not enough information during training to do a proper induction for the data element #{data}."
|
319
323
|
end
|
320
324
|
def get_rules
|
321
325
|
return []
|
@@ -47,7 +47,7 @@ module Ai4r
|
|
47
47
|
:hidden_layers => "Hidden layer structure. E.g. [8, 6] will generate " +
|
48
48
|
"2 hidden layers with 8 and 6 neurons each. By default []",
|
49
49
|
:training_iterations => "How many times the training should be " +
|
50
|
-
"repeated. By default:
|
50
|
+
"repeated. By default: 500",
|
51
51
|
:active_node_value => "Default: 1",
|
52
52
|
:inactive_node_value => "Default: 0"
|
53
53
|
|
@@ -57,8 +57,8 @@ module Ai4r
|
|
57
57
|
|
58
58
|
class NaiveBayes < Classifier
|
59
59
|
|
60
|
-
parameters_info :m =>
|
61
|
-
|
60
|
+
parameters_info :m => 'Default value is set to 0. It may be set to a value greater than ' +
|
61
|
+
'0 when the size of the dataset is relatively small'
|
62
62
|
|
63
63
|
def initialize
|
64
64
|
@m = 0
|
@@ -75,7 +75,7 @@ module Ai4r
|
|
75
75
|
# b.eval(["Red", "SUV", "Domestic"])
|
76
76
|
# => 'No'
|
77
77
|
def eval(data)
|
78
|
-
prob = @class_prob.
|
78
|
+
prob = @class_prob.dup
|
79
79
|
prob = calculate_class_probabilities_for_entry(data, prob)
|
80
80
|
index_to_klass(prob.index(prob.max))
|
81
81
|
end
|
@@ -90,27 +90,28 @@ module Ai4r
|
|
90
90
|
# b.get_probability_map(["Red", "SUV", "Domestic"])
|
91
91
|
# => {"Yes"=>0.4166666666666667, "No"=>0.5833333333333334}
|
92
92
|
def get_probability_map(data)
|
93
|
-
prob = @class_prob.
|
93
|
+
prob = @class_prob.dup
|
94
94
|
prob = calculate_class_probabilities_for_entry(data, prob)
|
95
95
|
prob = normalize_class_probability prob
|
96
96
|
probability_map = {}
|
97
97
|
prob.each_with_index { |p, i| probability_map[index_to_klass(i)] = p }
|
98
|
-
|
98
|
+
|
99
|
+
probability_map
|
99
100
|
end
|
100
101
|
|
101
102
|
# counts values of the attribute instances and calculates the probability of the classes
|
102
103
|
# and the conditional probabilities
|
103
104
|
# Parameter data has to be an instance of CsvDataSet
|
104
105
|
def build(data)
|
105
|
-
raise
|
106
|
-
raise
|
106
|
+
raise 'Error instance must be passed' unless data.is_a?(Ai4r::Data::DataSet)
|
107
|
+
raise 'Data should not be empty' if data.data_items.length == 0
|
107
108
|
|
108
109
|
initialize_domain_data(data)
|
109
110
|
initialize_klass_index
|
110
111
|
initialize_pc
|
111
112
|
calculate_probabilities
|
112
113
|
|
113
|
-
|
114
|
+
self
|
114
115
|
end
|
115
116
|
|
116
117
|
private
|
@@ -128,25 +129,27 @@ module Ai4r
|
|
128
129
|
# probability of every attribute in condition to a specific class
|
129
130
|
# this is repeated for every class
|
130
131
|
def calculate_class_probabilities_for_entry(data, prob)
|
131
|
-
prob.
|
132
|
+
0.upto(prob.length - 1) do |prob_index|
|
132
133
|
data.each_with_index do |att, index|
|
133
134
|
next if value_index(att, index).nil?
|
134
135
|
prob[prob_index] *= @pcp[index][value_index(att, index)][prob_index]
|
135
136
|
end
|
136
137
|
end
|
138
|
+
|
139
|
+
prob
|
137
140
|
end
|
138
141
|
|
139
142
|
# normalises the array of probabilities so the sum of the array equals 1
|
140
143
|
def normalize_class_probability(prob)
|
141
144
|
prob_sum = sum(prob)
|
142
145
|
prob_sum > 0 ?
|
143
|
-
prob.map {|prob_entry| prob_entry / prob_sum } :
|
146
|
+
prob.map { |prob_entry| prob_entry / prob_sum } :
|
144
147
|
prob
|
145
148
|
end
|
146
149
|
|
147
150
|
# sums an array up; returns a number of type Float
|
148
151
|
def sum(array)
|
149
|
-
array.inject(0.0){|b, i| b+i}
|
152
|
+
array.inject(0.0) { |b, i| b + i }
|
150
153
|
end
|
151
154
|
|
152
155
|
# returns the name of the class when the index is found
|
@@ -160,7 +163,7 @@ module Ai4r
|
|
160
163
|
@klass_index[dl] = index
|
161
164
|
end
|
162
165
|
|
163
|
-
@data_labels.
|
166
|
+
0.upto(@data_labels.length - 1) do |index|
|
164
167
|
@values[index] = {}
|
165
168
|
@domains[index].each_with_index do |d, d_index|
|
166
169
|
@values[index][d] = d_index
|
@@ -180,19 +183,19 @@ module Ai4r
|
|
180
183
|
|
181
184
|
# builds an array of the form:
|
182
185
|
# array[attributes][values][classes]
|
183
|
-
def build_array(
|
186
|
+
def build_array(index)
|
184
187
|
domains = Array.new(@domains[index].length)
|
185
|
-
domains.map do
|
186
|
-
|
188
|
+
domains.map do
|
189
|
+
Array.new @klasses.length, 0
|
187
190
|
end
|
188
191
|
end
|
189
192
|
|
190
193
|
# initializes the two array for storing the count and conditional probabilities of
|
191
194
|
# the attributes
|
192
195
|
def initialize_pc
|
193
|
-
@data_labels.
|
194
|
-
@pcc << build_array(
|
195
|
-
@pcp << build_array(
|
196
|
+
0.upto(@data_labels.length - 1) do |index|
|
197
|
+
@pcc << build_array(index)
|
198
|
+
@pcp << build_array(index)
|
196
199
|
end
|
197
200
|
end
|
198
201
|
|
@@ -200,7 +203,7 @@ module Ai4r
|
|
200
203
|
# certain attribute and the assigned class.
|
201
204
|
# In addition to that, it also calculates the conditional probabilities and values
|
202
205
|
def calculate_probabilities
|
203
|
-
@klasses.each {|dl| @class_counts[klass_index(dl)] = 0}
|
206
|
+
@klasses.each { |dl| @class_counts[klass_index(dl)] = 0 }
|
204
207
|
|
205
208
|
calculate_class_probabilities
|
206
209
|
count_instances
|
@@ -220,7 +223,7 @@ module Ai4r
|
|
220
223
|
# counts the instances of a certain value of a certain attribute and the assigned class
|
221
224
|
def count_instances
|
222
225
|
@data_items.each do |item|
|
223
|
-
@data_labels.
|
226
|
+
0.upto(@data_labels.length - 1) do |dl_index|
|
224
227
|
@pcc[dl_index][value_index(item[dl_index], dl_index)][klass_index(item.klass)] += 1
|
225
228
|
end
|
226
229
|
end
|
@@ -231,7 +234,7 @@ module Ai4r
|
|
231
234
|
@pcc.each_with_index do |attributes, a_index|
|
232
235
|
attributes.each_with_index do |values, v_index|
|
233
236
|
values.each_with_index do |klass, k_index|
|
234
|
-
@pcp[a_index][v_index][k_index] = (klass.to_f + @m * @class_prob[k_index]) / (@class_counts[k_index] + @m)
|
237
|
+
@pcp[a_index][v_index][k_index] = (klass.to_f + @m * @class_prob[k_index]) / (@class_counts[k_index] + @m)
|
235
238
|
end
|
236
239
|
end
|
237
240
|
end
|