Polynomial regression: Difference between revisions
Content added Content deleted
(→{{header|Ruby}}: improved precision by using rationals, converting to floats as late as possible.) |
|||
Line 1,457: | Line 1,457: | ||
def regress x, y, degree |
def regress x, y, degree |
||
x_data = x.map { |xi| (0..degree).map { |pow| (xi**pow). |
x_data = x.map { |xi| (0..degree).map { |pow| (xi**pow).to_r } } |
||
mx = Matrix[*x_data] |
mx = Matrix[*x_data] |
||
my = Matrix.column_vector(y) |
my = Matrix.column_vector(y) |
||
((mx.t * mx).inv * mx.t * my).transpose.to_a[0] |
((mx.t * mx).inv * mx.t * my).transpose.to_a[0].map(&:to_f) |
||
end</lang> |
end</lang> |
||
'''Testing:''' |
'''Testing:''' |
||
<lang ruby> |
<lang ruby>p regress([0, 1, 2, 3, 4, 5, 6, 7, 8, 9, 10], |
||
[1, 6, 17, 34, 57, 86, 121, 162, 209, 262, 321], |
[1, 6, 17, 34, 57, 86, 121, 162, 209, 262, 321], |
||
2 |
2)</lang> |
||
p betas</lang> |
|||
{{out}} |
{{out}} |
||
<pre>[1. |
<pre>[1.0, 2.0, 3.0]</pre> |
||
=={{header|Sidef}}== |
=={{header|Sidef}}== |