ai4r 1.12 → 1.13
Sign up to get free protection for your applications and to get access to all the features.
- 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
|