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
         |