-
Notifications
You must be signed in to change notification settings - Fork 0
/
Copy patherror.py
45 lines (35 loc) · 1.59 KB
/
error.py
1
2
3
4
5
6
7
8
9
10
11
12
13
14
15
16
17
18
19
20
21
22
23
24
25
26
27
28
29
30
31
32
33
34
35
36
37
38
39
40
41
42
43
44
45
from plotly import tools
def y_actual(x, x_values, y_values):
combined_values = list(zip(x_values, y_values))
point_at_x = list(filter(lambda point: point[0] == x,combined_values))[0]
return point_at_x[1]
def error(x_values, y_values, m, b, x):
expected = (m*x + b)
return (y_actual(x, x_values, y_values) - expected)
def error_line_trace(x_values, y_values, m, b, x):
y_hat = m*x + b
y = y_actual(x, x_values, y_values)
name = 'error at ' + str(x)
error_value = y - y_hat
return {'x': [x, x], 'y': [y, y_hat], 'mode': 'line', 'marker': {'color': 'red'}, 'name': name, 'text': [error_value], 'textposition':'right'}
def error_line_traces(x_values, y_values, m, b):
return list(map(lambda x_value: error_line_trace(x_values, y_values, m, b, x_value), x_values))
def squared_error(x_values, y_values, m, b, x):
return error(x_values, y_values, m, b, x)**2
def squared_errors(x_values, y_values, m, b):
return list(map(lambda x: squared_error(x_values, y_values, m, b, x), x_values))
def residual_sum_squares(x_values, y_values, m, b):
return round(sum(squared_errors(x_values, y_values, m, b)), 2)
def trace_rss(x_values, y_values, m, b):
rss_calc = residual_sum_squares(x_values, y_values, m, b)
return dict(
x=['RSS'],
y=[rss_calc],
type='bar'
)
def plot_regression_and_rss(scatter_trace, regression_trace, rss_calc_trace):
fig = tools.make_subplots(rows=1, cols=2)
fig.append_trace(scatter_trace, 1, 1)
fig.append_trace(regression_trace, 1, 1)
fig.append_trace(rss_calc_trace, 1, 2)
plotly.offline.iplot(fig)