ai4r 1.12 → 2.0

This diff represents the content of publicly available package versions that have been released to one of the supported registries. The information contained in this diff is provided for informational purposes only and reflects changes between package versions as they appear in their respective public registries.
Files changed (128) hide show
  1. checksums.yaml +7 -0
  2. data/README.md +174 -0
  3. data/examples/classifiers/hyperpipes_data.csv +14 -0
  4. data/examples/classifiers/hyperpipes_example.rb +22 -0
  5. data/examples/classifiers/ib1_example.rb +12 -0
  6. data/examples/classifiers/id3_example.rb +15 -10
  7. data/examples/classifiers/id3_graphviz_example.rb +17 -0
  8. data/examples/classifiers/logistic_regression_example.rb +11 -0
  9. data/examples/classifiers/naive_bayes_attributes_example.rb +13 -0
  10. data/examples/classifiers/naive_bayes_example.rb +12 -13
  11. data/examples/classifiers/one_r_example.rb +27 -0
  12. data/examples/classifiers/parameter_tutorial.rb +29 -0
  13. data/examples/classifiers/prism_nominal_example.rb +15 -0
  14. data/examples/classifiers/prism_numeric_example.rb +21 -0
  15. data/examples/classifiers/simple_linear_regression_example.csv +159 -0
  16. data/examples/classifiers/simple_linear_regression_example.rb +18 -0
  17. data/examples/classifiers/zero_and_one_r_example.rb +34 -0
  18. data/examples/classifiers/zero_one_r_data.csv +8 -0
  19. data/examples/clusterers/clusterer_example.rb +62 -0
  20. data/examples/clusterers/dbscan_example.rb +17 -0
  21. data/examples/clusterers/dendrogram_example.rb +17 -0
  22. data/examples/clusterers/hierarchical_dendrogram_example.rb +20 -0
  23. data/examples/clusterers/kmeans_custom_example.rb +26 -0
  24. data/examples/genetic_algorithm/bitstring_example.rb +41 -0
  25. data/examples/genetic_algorithm/genetic_algorithm_example.rb +26 -18
  26. data/examples/genetic_algorithm/kmeans_seed_tuning.rb +45 -0
  27. data/examples/neural_network/backpropagation_example.rb +49 -48
  28. data/examples/neural_network/hopfield_example.rb +45 -0
  29. data/examples/neural_network/patterns_with_base_noise.rb +39 -39
  30. data/examples/neural_network/patterns_with_noise.rb +41 -39
  31. data/examples/neural_network/train_epochs_callback.rb +25 -0
  32. data/examples/neural_network/training_patterns.rb +39 -39
  33. data/examples/neural_network/transformer_text_classification.rb +78 -0
  34. data/examples/neural_network/xor_example.rb +23 -22
  35. data/examples/reinforcement/q_learning_example.rb +10 -0
  36. data/examples/som/som_data.rb +155 -152
  37. data/examples/som/som_multi_node_example.rb +12 -13
  38. data/examples/som/som_single_example.rb +12 -15
  39. data/examples/transformer/decode_classifier_example.rb +68 -0
  40. data/examples/transformer/deterministic_example.rb +10 -0
  41. data/examples/transformer/seq2seq_example.rb +16 -0
  42. data/lib/ai4r/classifiers/classifier.rb +24 -16
  43. data/lib/ai4r/classifiers/gradient_boosting.rb +64 -0
  44. data/lib/ai4r/classifiers/hyperpipes.rb +119 -43
  45. data/lib/ai4r/classifiers/ib1.rb +122 -32
  46. data/lib/ai4r/classifiers/id3.rb +527 -144
  47. data/lib/ai4r/classifiers/logistic_regression.rb +96 -0
  48. data/lib/ai4r/classifiers/multilayer_perceptron.rb +75 -59
  49. data/lib/ai4r/classifiers/naive_bayes.rb +112 -48
  50. data/lib/ai4r/classifiers/one_r.rb +112 -44
  51. data/lib/ai4r/classifiers/prism.rb +167 -76
  52. data/lib/ai4r/classifiers/random_forest.rb +72 -0
  53. data/lib/ai4r/classifiers/simple_linear_regression.rb +143 -0
  54. data/lib/ai4r/classifiers/support_vector_machine.rb +91 -0
  55. data/lib/ai4r/classifiers/votes.rb +57 -0
  56. data/lib/ai4r/classifiers/zero_r.rb +71 -30
  57. data/lib/ai4r/clusterers/average_linkage.rb +46 -27
  58. data/lib/ai4r/clusterers/bisecting_k_means.rb +50 -44
  59. data/lib/ai4r/clusterers/centroid_linkage.rb +52 -36
  60. data/lib/ai4r/clusterers/cluster_tree.rb +50 -0
  61. data/lib/ai4r/clusterers/clusterer.rb +28 -24
  62. data/lib/ai4r/clusterers/complete_linkage.rb +42 -31
  63. data/lib/ai4r/clusterers/dbscan.rb +134 -0
  64. data/lib/ai4r/clusterers/diana.rb +75 -49
  65. data/lib/ai4r/clusterers/k_means.rb +309 -72
  66. data/lib/ai4r/clusterers/median_linkage.rb +49 -33
  67. data/lib/ai4r/clusterers/single_linkage.rb +196 -88
  68. data/lib/ai4r/clusterers/ward_linkage.rb +51 -35
  69. data/lib/ai4r/clusterers/ward_linkage_hierarchical.rb +63 -0
  70. data/lib/ai4r/clusterers/weighted_average_linkage.rb +48 -32
  71. data/lib/ai4r/data/data_set.rb +229 -100
  72. data/lib/ai4r/data/parameterizable.rb +31 -25
  73. data/lib/ai4r/data/proximity.rb +72 -50
  74. data/lib/ai4r/data/statistics.rb +46 -35
  75. data/lib/ai4r/experiment/classifier_evaluator.rb +84 -32
  76. data/lib/ai4r/experiment/split.rb +39 -0
  77. data/lib/ai4r/genetic_algorithm/chromosome_base.rb +43 -0
  78. data/lib/ai4r/genetic_algorithm/genetic_algorithm.rb +92 -170
  79. data/lib/ai4r/genetic_algorithm/tsp_chromosome.rb +83 -0
  80. data/lib/ai4r/hmm/hidden_markov_model.rb +134 -0
  81. data/lib/ai4r/neural_network/activation_functions.rb +37 -0
  82. data/lib/ai4r/neural_network/backpropagation.rb +419 -143
  83. data/lib/ai4r/neural_network/hopfield.rb +175 -58
  84. data/lib/ai4r/neural_network/transformer.rb +194 -0
  85. data/lib/ai4r/neural_network/weight_initializations.rb +40 -0
  86. data/lib/ai4r/reinforcement/policy_iteration.rb +66 -0
  87. data/lib/ai4r/reinforcement/q_learning.rb +51 -0
  88. data/lib/ai4r/search/a_star.rb +76 -0
  89. data/lib/ai4r/search/bfs.rb +50 -0
  90. data/lib/ai4r/search/dfs.rb +50 -0
  91. data/lib/ai4r/search/mcts.rb +118 -0
  92. data/lib/ai4r/search.rb +12 -0
  93. data/lib/ai4r/som/distance_metrics.rb +29 -0
  94. data/lib/ai4r/som/layer.rb +28 -17
  95. data/lib/ai4r/som/node.rb +61 -32
  96. data/lib/ai4r/som/som.rb +158 -41
  97. data/lib/ai4r/som/two_phase_layer.rb +21 -25
  98. data/lib/ai4r/version.rb +3 -0
  99. data/lib/ai4r.rb +58 -27
  100. metadata +117 -106
  101. data/README.rdoc +0 -44
  102. data/test/classifiers/hyperpipes_test.rb +0 -84
  103. data/test/classifiers/ib1_test.rb +0 -78
  104. data/test/classifiers/id3_test.rb +0 -208
  105. data/test/classifiers/multilayer_perceptron_test.rb +0 -79
  106. data/test/classifiers/naive_bayes_test.rb +0 -43
  107. data/test/classifiers/one_r_test.rb +0 -62
  108. data/test/classifiers/prism_test.rb +0 -85
  109. data/test/classifiers/zero_r_test.rb +0 -50
  110. data/test/clusterers/average_linkage_test.rb +0 -51
  111. data/test/clusterers/bisecting_k_means_test.rb +0 -66
  112. data/test/clusterers/centroid_linkage_test.rb +0 -53
  113. data/test/clusterers/complete_linkage_test.rb +0 -57
  114. data/test/clusterers/diana_test.rb +0 -69
  115. data/test/clusterers/k_means_test.rb +0 -100
  116. data/test/clusterers/median_linkage_test.rb +0 -53
  117. data/test/clusterers/single_linkage_test.rb +0 -122
  118. data/test/clusterers/ward_linkage_test.rb +0 -53
  119. data/test/clusterers/weighted_average_linkage_test.rb +0 -53
  120. data/test/data/data_set_test.rb +0 -96
  121. data/test/data/proximity_test.rb +0 -81
  122. data/test/data/statistics_test.rb +0 -65
  123. data/test/experiment/classifier_evaluator_test.rb +0 -76
  124. data/test/genetic_algorithm/chromosome_test.rb +0 -57
  125. data/test/genetic_algorithm/genetic_algorithm_test.rb +0 -81
  126. data/test/neural_network/backpropagation_test.rb +0 -82
  127. data/test/neural_network/hopfield_test.rb +0 -72
  128. data/test/som/som_test.rb +0 -97
checksums.yaml ADDED
@@ -0,0 +1,7 @@
1
+ ---
2
+ SHA256:
3
+ metadata.gz: 8d01465e193f7bda084a9cd76bc10e1dd4422b7c384eb0fe924d7a5f705123db
4
+ data.tar.gz: 64ffbe98250389997fbdc9fa1a93c4b79154c1b9d3cb4a5a6577c086ee392214
5
+ SHA512:
6
+ metadata.gz: 2bf0626ab8227c93fbc8a784717806ec3c3b72a4e6d2f375f232be8ad0be9e5f1ee70c6dfc2be02cd2c6dd40311cb5ac1d840f3acc92300cc208c8ccfc839425
7
+ data.tar.gz: 5140c67b5213fa3ed1a9017c1d4dd09c05cba0786d27bc8b97c32e7d72d8638347f80ae22536ecacd4efb10742a88c2e7e263878baf73edcb064749564a1d8a0
data/README.md ADDED
@@ -0,0 +1,174 @@
1
+ # AI4R — Artificial Intelligence for Ruby
2
+
3
+ 🎓 **Welcome to AI4R**
4
+
5
+ Current version: 2.0
6
+
7
+ Your Lightweight Lab for AI and Machine Learning in Ruby.
8
+
9
+ AI4R isn’t just another machine learning library. It’s a learning playground. No black boxes and no bulky dependencies—just clean, readable Ruby implementations of core AI algorithms so you can explore, modify and really understand how they work.
10
+
11
+ ## Installation
12
+
13
+ AI4R is distributed as a gem and requires Ruby 3.2 or later.
14
+
15
+ Install the gem using RubyGems:
16
+
17
+ ```bash
18
+ gem install ai4r
19
+ ```
20
+
21
+ Add the library to your code:
22
+
23
+ ```ruby
24
+ require 'ai4r'
25
+ ```
26
+
27
+ ## Where to start?
28
+ - [Beginner Track](docs/learning_path_1_beginner.md) – Build core intuition for AI—step by step, in Ruby.
29
+ - [Intermediate Track](docs/learning_path_2_intermediate.md) – From "I can run a model" to "I can tune, extend, and build smart stuff that actually works."
30
+ - [Advanced Track](docs/learning_path_3_advanced.md) – Time to stop following recipes and start writing your own.
31
+
32
+
33
+ ## 🧭 What’s Inside?
34
+
35
+ A quick map to AI4R’s built‑in toolkits, grouped by type. Each folder comes with examples and benchmark runners so you can dive right in.
36
+
37
+ ### 🤖 Transformers – *Play with the Building Blocks of Modern LLMs*
38
+
39
+ > *“Meet your future coworker / overlord.”*
40
+
41
+ This is not a full GPT—but it is the core logic, stripped down and readable.
42
+ AI4R ships with a bite-sized, dependency-free Transformer implementation that supports:
43
+
44
+ - **Encoder-only** mode (like BERT)
45
+ - **Decoder-only** mode (like GPT)
46
+ - **Seq2Seq** mode (like T5)
47
+
48
+ 📂 Code: `lib/ai4r/neural_network/transformer.rb`
49
+ Docs: [Transformer guide](docs/transformer.md)
50
+
51
+ 💡 **Try this**:
52
+ Load up the transformer and walk through a simple forward pass.
53
+ Everything from attention weights to layer normalization is short enough to read and understand in one go.
54
+
55
+ ### 🧠 Classifiers – Make Predictions
56
+ "What’s the most likely outcome?"
57
+
58
+ You’ll find in [lib/ai4r/classifiers/](lib/ai4r/classifiers/):
59
+
60
+ - `ZeroR`, `OneR` – the simplest baselines
61
+ - `LogisticRegression`, `SimpleLinearRegression`
62
+ - `SupportVectorMachine`
63
+ - `RandomForest`, `GradientBoosting`
64
+ - `MultilayerPerceptron`
65
+
66
+ Docs: [logistic_regression.md](docs/logistic_regression.md), [random_forest.md](docs/random_forest.md)
67
+
68
+ Try this: run `compare_all.rb` to benchmark classifiers on real datasets.
69
+
70
+ ### 🔍 Clusterers – Find Hidden Patterns
71
+ "What belongs together?"
72
+
73
+ Includes in [lib/ai4r/clusterers/](lib/ai4r/clusterers/):
74
+
75
+ - `KMeans`
76
+ - `DBSCAN`
77
+ - `Hierarchical` clustering variants
78
+
79
+ Docs: [kmeans.md](docs/kmeans.md), [dbscan.md](docs/dbscan.md)
80
+
81
+ Try this: cluster the Iris dataset using both KMeans and DBSCAN.
82
+
83
+ ### 🧬 Neural Networks – Learn From Data
84
+ "What if we build a brain?"
85
+
86
+ - Backpropagation – classic feedforward network
87
+ - Hopfield – associative memory model
88
+ - Transformer – a tiny GPT‑style block (encoder, decoder, seq2seq)
89
+
90
+ Code: `lib/ai4r/neural_network/`
91
+
92
+ Try this: open `transformer.rb` and trace each step—it’s short enough to grok in one sitting.
93
+
94
+ ### 🔎 Search Algorithms – Explore Possibility Spaces
95
+ "What’s the best path?"
96
+
97
+ You’ll find in [lib/ai4r/search/](lib/ai4r/search/):
98
+
99
+ - `BreadthFirst`, `DepthFirst`, `IterativeDeepening`
100
+ - `A*`
101
+ - `MonteCarloTreeSearch`
102
+
103
+ Docs: [search_algorithms.md](docs/search_algorithms.md)
104
+
105
+ Try this: run A* and DFS on a maze and time the difference.
106
+
107
+ ### 🧪 Genetic Algorithms – Evolve a Solution
108
+ "Let’s mutate our way to a better answer."
109
+
110
+ - Generic GA framework
111
+ - A Traveling Salesman Problem (TSP) chromosome
112
+
113
+ Code: `lib/ai4r/genetic_algorithm/`
114
+
115
+ Try this: tweak the mutation rate in the TSP example.
116
+
117
+ ### 🧭 Reinforcement Learning – Learn by Doing
118
+ "Reward me, and I’ll improve."
119
+
120
+ - Q‑Learning
121
+ - Policy Iteration
122
+
123
+ Code: `lib/ai4r/reinforcement/`
124
+
125
+ Docs: `docs/reinforcement_learning.md`
126
+
127
+ Try this: run a grid‑world training loop and watch the agent build its own policy.
128
+
129
+ ### 🕵️ Hidden Markov Models – Guess What’s Hidden
130
+ "You can’t see the states—but you can infer them."
131
+
132
+ Code: `lib/ai4r/hmm/hidden_markov_model.rb`
133
+
134
+ Docs: `docs/hmm.md`
135
+
136
+ Try this: model a weather prediction problem with hidden states and visible activities.
137
+
138
+ ### 🧠 Self‑Organizing Maps – Compress Dimensions
139
+ "Can we project complex data onto a simpler map?"
140
+
141
+ - Kohonen‑style SOM
142
+
143
+ Code: `lib/ai4r/som/`
144
+
145
+ Try this: reduce high‑dimensional vectors into a 2D neuron grid and color it based on class.
146
+
147
+ ## 🧪 Benchmarks: Experiment & Compare
148
+
149
+ Each algorithm family has a benchmark runner:
150
+
151
+ - `bench/classifier/`
152
+ - `bench/clusterer/`
153
+ - `bench/search/`
154
+
155
+ Shared tools in `bench/common/` make it easy to run head‑to‑head comparisons, track runtime, accuracy and more, and output clean reports.
156
+
157
+ Docs: `docs/benches_overview.md`
158
+
159
+ Try this: run `bench/search/astar_vs_dfs.rb` and explain why A* usually wins.
160
+
161
+
162
+ ```bash
163
+ git clone https://github.com/SergioFierens/ai4r
164
+ cd ai4r
165
+ bundle install
166
+ ruby bench/classifier/compare_all.rb
167
+ ```
168
+
169
+
170
+
171
+ ## 💬 Feedback?
172
+
173
+ This library is maintained for the joy of it (and perhaps a misplaced sense of duty to Ruby). You can do whatever you want with it—it’s unlicensed. If you build something cool or just find it useful, drop a note in the [project's comments](https://github.com/SergioFierens/ai4r/discussions).
174
+
@@ -0,0 +1,14 @@
1
+ city,age,gender,marketing_target
2
+ New York,25,M,Y
3
+ New York,23,M,Y
4
+ New York,18,M,Y
5
+ Chicago,43,M,Y
6
+ New York,34,F,N
7
+ Chicago,33,F,Y
8
+ New York,31,F,N
9
+ Chicago,55,M,N
10
+ New York,58,F,N
11
+ New York,59,M,N
12
+ Chicago,71,M,N
13
+ New York,60,F,N
14
+ Chicago,85,F,Y
@@ -0,0 +1,22 @@
1
+ # frozen_string_literal: true
2
+
3
+ require_relative '../../lib/ai4r/classifiers/hyperpipes'
4
+ require_relative '../../lib/ai4r/data/data_set'
5
+
6
+ # Use fully qualified class names instead of including modules.
7
+
8
+ # Load the training data
9
+ file = "#{File.dirname(__FILE__)}/hyperpipes_data.csv"
10
+ data = Ai4r::Data::DataSet.new.parse_csv_with_labels(file)
11
+
12
+ # Build the classifier using custom parameters
13
+ classifier = Ai4r::Classifiers::Hyperpipes.new.set_parameters(tie_break: :random).build(data)
14
+
15
+ # Inspect the generated pipes
16
+ pipes_summary = classifier.pipes
17
+ puts 'Pipes summary:'
18
+ pp pipes_summary
19
+
20
+ # Classify new instances
21
+ puts "Prediction for ['Chicago', 85, 'F']: #{classifier.eval(['Chicago', 85, 'F'])}"
22
+ puts "Prediction for ['New York', 25, 'M']: #{classifier.eval(['New York', 25, 'M'])}"
@@ -0,0 +1,12 @@
1
+ # frozen_string_literal: true
2
+
3
+ require_relative '../../lib/ai4r/classifiers/ib1'
4
+ require_relative '../../lib/ai4r/data/data_set'
5
+
6
+ file = "#{File.dirname(__FILE__)}/hyperpipes_data.csv"
7
+ data = Ai4r::Data::DataSet.new.parse_csv_with_labels(file)
8
+
9
+ classifier = Ai4r::Classifiers::IB1.new.build(data)
10
+
11
+ sample = ['Chicago', 55, 'M']
12
+ puts "Prediction for #{sample.inspect}: #{classifier.eval(sample)}"
@@ -1,13 +1,15 @@
1
+ # frozen_string_literal: true
2
+
1
3
  # Author:: Sergio Fierens
2
4
  # License:: MPL 1.1
3
5
  # Project:: ai4r
4
6
  # Url:: http://www.ai4r.org/
5
7
  #
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
+ # You can redistribute it and/or modify it under the terms of
9
+ # the Mozilla Public License version 1.1 as published by the
8
10
  # Mozilla Foundation at http://www.mozilla.org/MPL/MPL-1.1.txt
9
11
 
10
- require File.dirname(__FILE__) + '/../../lib/ai4r/classifiers/id3'
12
+ require_relative '../../lib/ai4r/classifiers/id3'
11
13
 
12
14
  # Load data from data_set.csv
13
15
  data_filename = "#{File.dirname(__FILE__)}/id3_data.csv"
@@ -17,13 +19,16 @@ data_set = Ai4r::Data::DataSet.new.load_csv_with_labels data_filename
17
19
  id3 = Ai4r::Classifiers::ID3.new.build(data_set)
18
20
 
19
21
  # Show rules
20
- puts "Discovered rules are:"
22
+ puts 'Discovered rules are:'
21
23
  puts id3.get_rules
22
- puts
24
+ puts
23
25
 
24
26
  # Try to predict some values
25
- puts "Prediction samples:"
26
- puts "['Moron Sur (GBA)','4','[86 m2 - 100 m2]'] => " + id3.eval(['Moron Sur (GBA)','4','[86 m2 - 100 m2]'])
27
- puts "['Moron Sur (GBA)','3','[101 m2 - 125 m2]'] => " + id3.eval(['Moron Sur (GBA)','3','[101 m2 - 125 m2]'])
28
- puts "['Recoleta (CABA)','3','[86 m2 - 100 m2]'] => " + id3.eval(['Recoleta (CABA)','3','[86 m2 - 100 m2]',])
29
- puts "['Tigre (GBA)','3','[71 m2 - 85 m2]'] => " + id3.eval(['Tigre (GBA)','3','[71 m2 - 85 m2]',])
27
+ puts 'Prediction samples:'
28
+ puts "['Moron Sur (GBA)','4','[86 m2 - 100 m2]'] => #{id3.eval(['Moron Sur (GBA)', '4',
29
+ '[86 m2 - 100 m2]'])}"
30
+ puts "['Moron Sur (GBA)','3','[101 m2 - 125 m2]'] => #{id3.eval(['Moron Sur (GBA)', '3',
31
+ '[101 m2 - 125 m2]'])}"
32
+ puts "['Recoleta (CABA)','3','[86 m2 - 100 m2]'] => #{id3.eval(['Recoleta (CABA)', '3',
33
+ '[86 m2 - 100 m2]'])}"
34
+ puts "['Tigre (GBA)','3','[71 m2 - 85 m2]'] => #{id3.eval(['Tigre (GBA)', '3', '[71 m2 - 85 m2]'])}"
@@ -0,0 +1,17 @@
1
+ # frozen_string_literal: true
2
+
3
+ require_relative '../../lib/ai4r/classifiers/id3'
4
+
5
+ # Load the training data
6
+ file = "#{File.dirname(__FILE__)}/id3_data.csv"
7
+ data_set = Ai4r::Data::DataSet.new.load_csv_with_labels(file)
8
+
9
+ # Build the tree
10
+ id3 = Ai4r::Classifiers::ID3.new.build(data_set)
11
+
12
+ # Export DOT representation
13
+ File.open('id3_tree.dot', 'w') { |f| f.puts id3.to_graphviz }
14
+ puts 'Decision tree saved to id3_tree.dot'
15
+
16
+ # You can also inspect the tree as nested hashes
17
+ p id3.to_h
@@ -0,0 +1,11 @@
1
+ require 'ai4r/classifiers/logistic_regression'
2
+ require 'ai4r/data/data_set'
3
+
4
+ items = [[0, 0, 0], [0, 1, 1], [1, 0, 1], [1, 1, 1]]
5
+ labels = %w[x1 x2 class]
6
+ set = Ai4r::Data::DataSet.new(data_items: items, data_labels: labels)
7
+
8
+ reg = Ai4r::Classifiers::LogisticRegression.new
9
+ reg.set_parameters(learning_rate: 0.5, iterations: 2000).build(set)
10
+
11
+ puts reg.eval([1, 0])
@@ -0,0 +1,13 @@
1
+ # frozen_string_literal: true
2
+
3
+ require_relative '../../lib/ai4r/classifiers/naive_bayes'
4
+ require_relative '../../lib/ai4r/data/data_set'
5
+
6
+ file = "#{File.dirname(__FILE__)}/naive_bayes_data.csv"
7
+ set = Ai4r::Data::DataSet.new.load_csv_with_labels(file)
8
+
9
+ bayes = Ai4r::Classifiers::NaiveBayes.new.set_parameters(m: 3).build(set)
10
+
11
+ puts bayes.class_prob.inspect
12
+ puts bayes.pcc.inspect
13
+ puts bayes.pcp.inspect
@@ -1,16 +1,15 @@
1
- require File.dirname(__FILE__) + '/../../lib/ai4r/classifiers/naive_bayes'
2
- require File.dirname(__FILE__) + '/../../lib/ai4r/data/data_set'
3
- require File.dirname(__FILE__) + '/../../lib/ai4r/classifiers/id3'
4
- require 'benchmark'
1
+ # frozen_string_literal: true
5
2
 
6
- include Ai4r::Classifiers
7
- include Ai4r::Data
3
+ require_relative '../../lib/ai4r/classifiers/naive_bayes'
4
+ require_relative '../../lib/ai4r/data/data_set'
5
+ require_relative '../../lib/ai4r/classifiers/id3'
6
+ require 'benchmark'
8
7
 
9
- data_set = DataSet.new
10
- data_set.load_csv_with_labels File.dirname(__FILE__) + "/naive_bayes_data.csv"
8
+ data_set = Ai4r::Data::DataSet.new
9
+ data_set.load_csv_with_labels "#{File.dirname(__FILE__)}/naive_bayes_data.csv"
11
10
 
12
- b = NaiveBayes.new.
13
- set_parameters({:m=>3}).
14
- build data_set
15
- p b.eval(["Red", "SUV", "Domestic"])
16
- p b.get_probability_map(["Red", "SUV", "Domestic"])
11
+ b = Ai4r::Classifiers::NaiveBayes.new
12
+ .set_parameters({ m: 3 })
13
+ .build data_set
14
+ p b.eval(%w[Red SUV Domestic])
15
+ p b.get_probability_map(%w[Red SUV Domestic])
@@ -0,0 +1,27 @@
1
+ # frozen_string_literal: true
2
+
3
+ # Author:: Example contributor
4
+ # License:: MPL 1.1
5
+ # Project:: ai4r
6
+ #
7
+ # Simple example showing how to use OneR with numeric attributes.
8
+
9
+ require_relative '../../lib/ai4r/classifiers/one_r'
10
+ require_relative '../../lib/ai4r/data/data_set'
11
+
12
+ items = [
13
+ ['New York', 20, 'M', 'Y'],
14
+ ['Chicago', 25, 'M', 'Y'],
15
+ ['New York', 28, 'M', 'Y'],
16
+ ['New York', 35, 'F', 'N'],
17
+ ['Chicago', 40, 'F', 'Y'],
18
+ ['New York', 45, 'F', 'N'],
19
+ ['Chicago', 55, 'M', 'N']
20
+ ]
21
+ labels = %w[city age gender marketing_target]
22
+
23
+ ds = Ai4r::Data::DataSet.new(data_items: items, data_labels: labels)
24
+
25
+ classifier = Ai4r::Classifiers::OneR.new.build(ds)
26
+ puts classifier.get_rules
27
+ puts classifier.eval(['Chicago', 55, 'M'])
@@ -0,0 +1,29 @@
1
+ # frozen_string_literal: true
2
+
3
+ # This small tutorial shows how changing parameters of ZeroR and OneR
4
+ # affects the generated rules. Run it with `ruby parameter_tutorial.rb`.
5
+
6
+ require_relative '../../lib/ai4r/classifiers/zero_r'
7
+ require_relative '../../lib/ai4r/classifiers/one_r'
8
+ require_relative '../../lib/ai4r/data/data_set'
9
+
10
+ # Load the demonstration data set
11
+ file = "#{File.dirname(__FILE__)}/zero_one_r_data.csv"
12
+ set = Ai4r::Data::DataSet.new.load_csv_with_labels file
13
+
14
+ puts '== ZeroR with default parameters =='
15
+ zero_default = Ai4r::Classifiers::ZeroR.new.build(set)
16
+ puts zero_default.get_rules
17
+
18
+ puts "\n== ZeroR with :tie_break => :random =="
19
+ zero_rand = Ai4r::Classifiers::ZeroR.new.set_parameters(tie_break: :random).build(set)
20
+ puts zero_rand.get_rules
21
+
22
+ puts "\n== OneR default behaviour =="
23
+ one_default = Ai4r::Classifiers::OneR.new.build(set)
24
+ puts one_default.get_rules
25
+
26
+ puts "\n== OneR forcing first attribute and :last tie break =="
27
+ one_custom = Ai4r::Classifiers::OneR.new.set_parameters(selected_attribute: 0,
28
+ tie_break: :last).build(set)
29
+ puts one_custom.get_rules
@@ -0,0 +1,15 @@
1
+ # frozen_string_literal: true
2
+
3
+ require_relative '../../lib/ai4r/classifiers/prism'
4
+ require_relative '../../lib/ai4r/data/data_set'
5
+
6
+ data_file = "#{File.dirname(__FILE__)}/zero_one_r_data.csv"
7
+ data = Ai4r::Data::DataSet.new.load_csv_with_labels(data_file)
8
+
9
+ classifier = Ai4r::Classifiers::Prism.new.build(data)
10
+
11
+ puts 'Discovered rules:'
12
+ puts classifier.get_rules
13
+ puts
14
+ sample = data.data_items.first[0...-1]
15
+ puts "Prediction for #{sample.inspect}: #{classifier.eval(sample)}"
@@ -0,0 +1,21 @@
1
+ # frozen_string_literal: true
2
+
3
+ require_relative '../../lib/ai4r/classifiers/prism'
4
+ require_relative '../../lib/ai4r/data/data_set'
5
+
6
+ items = [
7
+ [20, 70, 'N'],
8
+ [25, 80, 'N'],
9
+ [30, 60, 'Y'],
10
+ [35, 65, 'Y']
11
+ ]
12
+ labels = %w[temperature humidity play]
13
+
14
+ data = Ai4r::Data::DataSet.new(data_items: items, data_labels: labels)
15
+
16
+ classifier = Ai4r::Classifiers::Prism.new.build(data)
17
+
18
+ puts 'Rules:'
19
+ puts classifier.get_rules
20
+ puts
21
+ puts "Prediction for [30, 70]: #{classifier.eval([30, 70])}"
@@ -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,18 @@
1
+ # frozen_string_literal: true
2
+
3
+ require_relative '../../lib/ai4r/classifiers/simple_linear_regression'
4
+ require_relative '../../lib/ai4r/data/data_set'
5
+
6
+ # Load training data
7
+ file = "#{File.dirname(__FILE__)}/simple_linear_regression_example.csv"
8
+ data_set = Ai4r::Data::DataSet.new.parse_csv_with_labels file
9
+
10
+ # Build the regression model and inspect its coefficients
11
+ r = Ai4r::Classifiers::SimpleLinearRegression.new.build data_set
12
+ puts "Selected attribute: #{r.attribute}"
13
+ puts "Slope: #{r.slope}, Intercept: #{r.intercept}"
14
+
15
+ # Predict a new sample
16
+ predicted = r.eval([-1, 95, 109.1, 188.8, 68.9, 55.5, 3062, 141, 3.78, 3.15, 9.5, 114, 5400, 19,
17
+ 25])
18
+ puts "Predicted value: #{predicted}"