Skip to content

Commit 7e2ae5e

Browse files
committed
Elixir Formatter
1 parent 5ff2ebb commit 7e2ae5e

2 files changed

Lines changed: 54 additions & 12 deletions

File tree

lib/learn_kit/regression/linear.ex

Lines changed: 10 additions & 3 deletions
Original file line numberDiff line numberDiff line change
@@ -42,7 +42,8 @@ defmodule LearnKit.Regression.Linear do
4242
"""
4343
@spec new(factors, results) :: %Linear{factors: factors, results: results, coefficients: []}
4444

45-
def new(factors, results) when is_list(factors) and is_list(results), do: %Linear{factors: factors, results: results}
45+
def new(factors, results) when is_list(factors) and is_list(results),
46+
do: %Linear{factors: factors, results: results}
4647

4748
@doc """
4849
Fit train data
@@ -73,13 +74,18 @@ defmodule LearnKit.Regression.Linear do
7374
}
7475
7576
"""
76-
@spec fit(%Linear{factors: factors, results: results}) :: %Linear{factors: factors, results: results, coefficients: coefficients}
77+
@spec fit(%Linear{factors: factors, results: results}) :: %Linear{
78+
factors: factors,
79+
results: results,
80+
coefficients: coefficients
81+
}
7782

7883
def fit(%Linear{factors: factors, results: results}, options \\ []) when is_list(options) do
7984
coefficients =
8085
Keyword.merge([method: ""], options)
8186
|> define_method_for_fit()
8287
|> do_fit(factors, results)
88+
8389
%Linear{factors: factors, results: results, coefficients: coefficients}
8490
end
8591

@@ -126,7 +132,8 @@ defmodule LearnKit.Regression.Linear do
126132
{:ok, 0.9876543209876543}
127133
128134
"""
129-
@spec score(%Linear{factors: factors, results: results, coefficients: coefficients}) :: {:ok, number}
135+
@spec score(%Linear{factors: factors, results: results, coefficients: coefficients}) ::
136+
{:ok, number}
130137

131138
def score(%Linear{factors: factors, results: results, coefficients: coefficients}) do
132139
{

lib/learn_kit/regression/linear/calculations.ex

Lines changed: 44 additions & 9 deletions
Original file line numberDiff line numberDiff line change
@@ -8,11 +8,21 @@ defmodule LearnKit.Regression.Linear.Calculations do
88
defmacro __using__(_opts) do
99
quote do
1010
defp do_fit(method, factors, results) when method == "gradient descent" do
11-
gradient_descent_iteration([:rand.uniform, :rand.uniform], 0.0001, nil, 1000000, Enum.zip(factors, results), 0)
11+
gradient_descent_iteration(
12+
[:rand.uniform(), :rand.uniform()],
13+
0.0001,
14+
nil,
15+
1_000_000,
16+
Enum.zip(factors, results),
17+
0
18+
)
1219
end
1320

1421
defp do_fit(_, factors, results) do
15-
beta = Math.correlation(factors, results) * Math.standard_deviation(results) / Math.standard_deviation(factors)
22+
beta =
23+
Math.correlation(factors, results) * Math.standard_deviation(results) /
24+
Math.standard_deviation(factors)
25+
1626
alpha = Math.mean(results) - beta * Math.mean(factors)
1727
[alpha, beta]
1828
end
@@ -24,7 +34,8 @@ defmodule LearnKit.Regression.Linear.Calculations do
2434
defp calculate_score([], _, _), do: raise("There was no fit for model")
2535

2636
defp calculate_score(coefficients, factors, results) do
27-
1.0 - sum_of_squared_errors(coefficients, factors, results) / total_sum_of_squares(results)
37+
1.0 -
38+
sum_of_squared_errors(coefficients, factors, results) / total_sum_of_squares(results)
2839
end
2940

3041
defp total_sum_of_squares(list) do
@@ -34,7 +45,9 @@ defmodule LearnKit.Regression.Linear.Calculations do
3445

3546
defp sum_of_squared_errors(coefficients, factors, results) do
3647
Enum.zip(factors, results)
37-
|> Enum.reduce(0, fn {xi, yi}, acc -> acc + squared_prediction_error(coefficients, xi, yi) end)
48+
|> Enum.reduce(0, fn {xi, yi}, acc ->
49+
acc + squared_prediction_error(coefficients, xi, yi)
50+
end)
3851
end
3952

4053
defp squared_prediction_error(coefficients, x, y) do
@@ -45,6 +58,7 @@ defmodule LearnKit.Regression.Linear.Calculations do
4558

4659
defp squared_error_gradient(coefficients, x, y) do
4760
error_variable = prediction_error(coefficients, x, y)
61+
4862
[
4963
-2 * error_variable,
5064
-2 * error_variable * x
@@ -55,9 +69,18 @@ defmodule LearnKit.Regression.Linear.Calculations do
5569
y - predict_sample(x, coefficients)
5670
end
5771

58-
defp gradient_descent_iteration(_, _, min_theta, _, _, iterations_with_no_improvement) when iterations_with_no_improvement >= 100, do: min_theta
59-
60-
defp gradient_descent_iteration(theta, alpha, min_theta, min_value, data, iterations_with_no_improvement) do
72+
defp gradient_descent_iteration(_, _, min_theta, _, _, iterations_with_no_improvement)
73+
when iterations_with_no_improvement >= 100,
74+
do: min_theta
75+
76+
defp gradient_descent_iteration(
77+
theta,
78+
alpha,
79+
min_theta,
80+
min_value,
81+
data,
82+
iterations_with_no_improvement
83+
) do
6184
[
6285
min_theta,
6386
min_value,
@@ -72,11 +95,23 @@ defmodule LearnKit.Regression.Linear.Calculations do
7295
gradient_i = squared_error_gradient(acc, xi, yi)
7396
acc |> Math.vector_subtraction(alpha |> Math.scalar_multiply(gradient_i))
7497
end)
75-
gradient_descent_iteration(theta, alpha, min_theta, min_value, data, iterations_with_no_improvement)
98+
99+
gradient_descent_iteration(
100+
theta,
101+
alpha,
102+
min_theta,
103+
min_value,
104+
data,
105+
iterations_with_no_improvement
106+
)
76107
end
77108

78109
defp check_value(data, min_value, theta, min_theta, iterations_with_no_improvement, alpha) do
79-
value = Enum.reduce(data, 0, fn {xi, yi}, acc -> acc + squared_prediction_error(theta, xi, yi) end)
110+
value =
111+
Enum.reduce(data, 0, fn {xi, yi}, acc ->
112+
acc + squared_prediction_error(theta, xi, yi)
113+
end)
114+
80115
cond do
81116
value < min_value ->
82117
[theta, value, 0, 0.0001]

0 commit comments

Comments
 (0)