train_set = create_dataset(N)
test_set = create_dataset(N)
df_ws = {}
fig = Nyaplot::Frame.new
M.each_with_index do |m, c|
f, ws = resolve(train_set, m)
df_ws["M=#{m}"] = Daru::Vector.new(ws, name: "M=#{m}")
plot = Nyaplot::Plot.new
sc = plot.add_with_df(train_set.to_nyaplotdf, :scatter, :x, :y)
sc.title("train_set")
sc.color('blue')
linex = (0..1).step(1.0 / (101 - 1)).to_a
liney = linex.map do |x|
Math.sin(2 * Math::PI * x)
end
line_answer = plot.add(:line, linex, liney)
line_answer.title('answer')
line_answer.color('green')
liney = linex.map do |x|
f.call(x)
end
line_erms = plot.add(:line, linex, liney)
line_erms.title("E(RMS#{sprintf("%.2f", rms_error(train_set, f))})")
line_erms.color('red')
plot.configure do
x_label("M=#{m}")
y_label('')
xrange([-0.05, 1.05])
yrange([-1.5, 1.5])
legend(true)
height(300)
width(490)
end
fig.add(plot)
end
puts 'Table ot the coefficients'
puts Daru::DataFrame.new(df_ws).inspect
fig.show
df = Daru::DataFrame.new({m: [], 'Training set': [], 'Test set': []})
10.times do |m|
f, ws = resolve(train_set, m)
train_error = rms_error(train_set, f)
test_error = rms_error(test_set, f)
df.add_row(Daru::Vector.new([m, train_error, test_error], index: [:m, 'Training set'.to_sym, 'Test set'.to_sym]))
end
df.plot(type: [:line, :line], x: [:m, :m], y: ['Training set'.to_sym, 'Test set'.to_sym]) do |plot, diagrams|
train_set_diagram = diagrams[0]
test_set_diagram = diagrams[1]
train_set_diagram.title('Training set')
train_set_diagram.color('blue')
test_set_diagram.title('Test set')
test_set_diagram.color('green')
plot.x_label('M')
plot.y_label('RMS Error')
plot.yrange([0, 0.9])
plot.legend(true)
end