Skip to content

Commit 4b5a7c3

Browse files
committed
Added Linear Regression
1 parent 8818015 commit 4b5a7c3

File tree

5 files changed

+205
-0
lines changed

5 files changed

+205
-0
lines changed
Lines changed: 9 additions & 0 deletions
Original file line numberDiff line numberDiff line change
@@ -0,0 +1,9 @@
1+
function j = computecost(x, Y, Theta)
2+
3+
n = length(Y); % Number of training examples.
4+
5+
j = 0;
6+
7+
j = (1 / (2 * n)) * sum(((x * Theta) - Y).^2);
8+
9+
end
Lines changed: 97 additions & 0 deletions
Original file line numberDiff line numberDiff line change
@@ -0,0 +1,97 @@
1+
6.1101,17.592
2+
5.5277,9.1302
3+
8.5186,13.662
4+
7.0032,11.854
5+
5.8598,6.8233
6+
8.3829,11.886
7+
7.4764,4.3483
8+
8.5781,12
9+
6.4862,6.5987
10+
5.0546,3.8166
11+
5.7107,3.2522
12+
14.164,15.505
13+
5.734,3.1551
14+
8.4084,7.2258
15+
5.6407,0.71618
16+
5.3794,3.5129
17+
6.3654,5.3048
18+
5.1301,0.56077
19+
6.4296,3.6518
20+
7.0708,5.3893
21+
6.1891,3.1386
22+
20.27,21.767
23+
5.4901,4.263
24+
6.3261,5.1875
25+
5.5649,3.0825
26+
18.945,22.638
27+
12.828,13.501
28+
10.957,7.0467
29+
13.176,14.692
30+
22.203,24.147
31+
5.2524,-1.22
32+
6.5894,5.9966
33+
9.2482,12.134
34+
5.8918,1.8495
35+
8.2111,6.5426
36+
7.9334,4.5623
37+
8.0959,4.1164
38+
5.6063,3.3928
39+
12.836,10.117
40+
6.3534,5.4974
41+
5.4069,0.55657
42+
6.8825,3.9115
43+
11.708,5.3854
44+
5.7737,2.4406
45+
7.8247,6.7318
46+
7.0931,1.0463
47+
5.0702,5.1337
48+
5.8014,1.844
49+
11.7,8.0043
50+
5.5416,1.0179
51+
7.5402,6.7504
52+
5.3077,1.8396
53+
7.4239,4.2885
54+
7.6031,4.9981
55+
6.3328,1.4233
56+
6.3589,-1.4211
57+
6.2742,2.4756
58+
5.6397,4.6042
59+
9.3102,3.9624
60+
9.4536,5.4141
61+
8.8254,5.1694
62+
5.1793,-0.74279
63+
21.279,17.929
64+
14.908,12.054
65+
18.959,17.054
66+
7.2182,4.8852
67+
8.2951,5.7442
68+
10.236,7.7754
69+
5.4994,1.0173
70+
20.341,20.992
71+
10.136,6.6799
72+
7.3345,4.0259
73+
6.0062,1.2784
74+
7.2259,3.3411
75+
5.0269,-2.6807
76+
6.5479,0.29678
77+
7.5386,3.8845
78+
5.0365,5.7014
79+
10.274,6.7526
80+
5.1077,2.0576
81+
5.7292,0.47953
82+
5.1884,0.20421
83+
6.3557,0.67861
84+
9.7687,7.5435
85+
6.5159,5.3436
86+
8.5172,4.2415
87+
9.1802,6.7981
88+
6.002,0.92695
89+
5.5204,0.152
90+
5.0594,2.8214
91+
5.7077,1.8451
92+
7.6366,4.2959
93+
5.8707,7.2029
94+
5.3054,1.9869
95+
8.2934,0.14454
96+
13.394,9.0551
97+
5.4369,0.61705
Lines changed: 29 additions & 0 deletions
Original file line numberDiff line numberDiff line change
@@ -0,0 +1,29 @@
1+
% This function demonstrates gradient descent in case of linear regression with one variable.
2+
3+
% Theta is a column vector with two elements which this function returns after modifying it.
4+
5+
% This function receives the feature vector x, vector of actual target variables Y, Theta
6+
7+
% containing initial values of theta_0 and theta_1, learning rate Alpha, number of iterations
8+
9+
% noi.
10+
11+
function Theta = gradientdescent(x, Y, Theta, Alpha, noi)
12+
13+
n = length(Y); % Number of training examples.
14+
15+
for i = 1:noi
16+
17+
theta_1 = Theta(1) - Alpha * (1 / n) * sum(((x * Theta) - Y) .* x(:, 1)); % Temporary variable to simultaneously update theta_0 but i have used 1 to
18+
19+
% avoid confusion since indexing in MATLAB/Octave starts from 1.
20+
21+
theta_2 = Theta(2) - Alpha * (1 / n) * sum(((x * Theta) - Y) .* x(:, 2)); % Temporary variable to simultaneously update theta_1.
22+
23+
Theta(1) = theta_1; % Assigning first temporary value to update first actual value simultaneously.
24+
25+
Theta(2) = theta_2; % Assigning second temporary value to update second actual value simultaneously.
26+
27+
end
28+
29+
end
Lines changed: 11 additions & 0 deletions
Original file line numberDiff line numberDiff line change
@@ -0,0 +1,11 @@
1+
function plotdata(x, Y)
2+
3+
figure;
4+
5+
plot(x, Y, 'rx', 'MarkerSize', 10); % rx means red coloured x.
6+
7+
ylabel('Profit in $10,000s');
8+
9+
xlabel('Population of city in 10,000s');
10+
11+
end
Lines changed: 59 additions & 0 deletions
Original file line numberDiff line numberDiff line change
@@ -0,0 +1,59 @@
1+
% This file runs univariate linear regression to predict profits of food trucks based on previous
2+
3+
% actual values of profits in $10,000s in various cities with populations in 10,000s respectively.
4+
5+
clear ; close all; clc ;
6+
7+
fprintf('Plotting data\n');
8+
9+
data = load('data_.txt');
10+
x = data(:, 1); Y = data(:, 2);
11+
n = length(Y); % Number of training examples.
12+
13+
plotdata(x, Y);
14+
15+
fprintf('Program paused, press enter to continue\n');
16+
17+
pause;
18+
19+
x = [ones(n, 1), data(:,1)];
20+
Theta = zeros(2, 1);
21+
22+
noi = 1500; % Number of iterations in gradient descent.
23+
Alpha = 0.01; % Learning rate.
24+
25+
fprintf('Testing the cost function\n')
26+
27+
j = computecost(x, Y, Theta);
28+
fprintf('With Theta = [0 ; 0]\nCost computed = %f\n', j);
29+
fprintf('Expected cost value (approx) 32.07\n');
30+
31+
j = computecost(x, Y, [-1 ; 2]);
32+
fprintf('With theta = [-1 ; 2]\nCost computed = %f\n', j);
33+
fprintf('Expected cost value (approx) 54.24\n');
34+
35+
fprintf('Program paused, press enter to continue\n');
36+
37+
pause;
38+
39+
fprintf('Running gradient descent\n');
40+
41+
Theta = gradientdescent(x, Y, Theta, Alpha, noi);
42+
43+
fprintf('Theta found by gradient descent\n');
44+
fprintf('%f\n', Theta);
45+
fprintf('Expected Theta vector (approx)\n');
46+
fprintf(' -3.6303\n 1.1664\n\n');
47+
48+
hold on; % To plot hypothesis on data.
49+
50+
plot(x(:, 2), x * Theta, '-');
51+
legend('Training data', 'Linear regression');
52+
53+
predict1 = [1, 3.5] * Theta;
54+
fprintf('For population = 35,000, we predict a profit of %f\n',...
55+
predict1*10000);
56+
57+
predict2 = [1, 7] * Theta;
58+
fprintf('For population = 70,000, we predict a profit of %f\n',...
59+
predict2*10000);

0 commit comments

Comments
 (0)