-
Notifications
You must be signed in to change notification settings - Fork 0
Commit
This commit does not belong to any branch on this repository, and may belong to a fork outside of the repository.
- Loading branch information
0 parents
commit 95628b8
Showing
28 changed files
with
3,656 additions
and
0 deletions.
There are no files selected for viewing
Binary file not shown.
This file contains bidirectional Unicode text that may be interpreted or compiled differently than what appears below. To review, open the file in an editor that reveals hidden Unicode characters.
Learn more about bidirectional Unicode characters
Original file line number | Diff line number | Diff line change |
---|---|---|
@@ -0,0 +1,17 @@ | ||
function J = computeCost(X, y, theta) | ||
%COMPUTECOST Compute cost for linear regression | ||
% J = COMPUTECOST(X, y, theta) computes the cost of using theta as the | ||
% parameter for linear regression to fit the data points in X and y | ||
|
||
% Initialize some useful values | ||
m = length(y); % number of training examples | ||
|
||
% You need to return the following variables correctly | ||
|
||
% ====================== YOUR CODE HERE ====================== | ||
% Instructions: Compute the cost of a particular choice of theta | ||
% You should set J to the cost. | ||
J = (1/(2*m))*sum(power((X*theta - y), 2)); | ||
% ========================================================================= | ||
|
||
end |
This file contains bidirectional Unicode text that may be interpreted or compiled differently than what appears below. To review, open the file in an editor that reveals hidden Unicode characters.
Learn more about bidirectional Unicode characters
Original file line number | Diff line number | Diff line change |
---|---|---|
@@ -0,0 +1,21 @@ | ||
function J = computeCostMulti(X, y, theta) | ||
%COMPUTECOSTMULTI Compute cost for linear regression with multiple variables | ||
% J = COMPUTECOSTMULTI(X, y, theta) computes the cost of using theta as the | ||
% parameter for linear regression to fit the data points in X and y | ||
|
||
% Initialize some useful values | ||
m = length(y); % number of training examples | ||
|
||
% You need to return the following variables correctly | ||
J = 0; | ||
|
||
% ====================== YOUR CODE HERE ====================== | ||
% Instructions: Compute the cost of a particular choice of theta | ||
% You should set J to the cost. | ||
|
||
J = (1/(2*m))*sum(power((X*theta - y), 2)); | ||
|
||
|
||
% ========================================================================= | ||
|
||
end |
This file contains bidirectional Unicode text that may be interpreted or compiled differently than what appears below. To review, open the file in an editor that reveals hidden Unicode characters.
Learn more about bidirectional Unicode characters
Original file line number | Diff line number | Diff line change |
---|---|---|
@@ -0,0 +1,137 @@ | ||
%% Machine Learning Online Class - Exercise 1: Linear Regression | ||
|
||
% Instructions | ||
% ------------ | ||
% | ||
% This file contains code that helps you get started on the | ||
% linear exercise. You will need to complete the following functions | ||
% in this exericse: | ||
% | ||
% warmUpExercise.m | ||
% plotData.m | ||
% gradientDescent.m | ||
% computeCost.m | ||
% gradientDescentMulti.m | ||
% computeCostMulti.m | ||
% featureNormalize.m | ||
% normalEqn.m | ||
% | ||
% For this exercise, you will not need to change any code in this file, | ||
% or any other files other than those mentioned above. | ||
% | ||
% x refers to the population size in 10,000s | ||
% y refers to the profit in $10,000s | ||
% | ||
|
||
%% Initialization | ||
clear ; close all; clc | ||
|
||
%% ==================== Part 1: Basic Function ==================== | ||
% Complete warmUpExercise.m | ||
fprintf('Running warmUpExercise ... \n'); | ||
fprintf('5x5 Identity Matrix: \n'); | ||
warmUpExercise() | ||
|
||
fprintf('Program paused. Press enter to continue.\n'); | ||
pause; | ||
|
||
|
||
%% ======================= Part 2: Plotting ======================= | ||
fprintf('Plotting Data ...\n') | ||
data = load('ex1data1.txt'); | ||
X = data(:, 1); y = data(:, 2); | ||
m = length(y); % number of training examples | ||
|
||
% Plot Data | ||
% Note: You have to complete the code in plotData.m | ||
plotData(X, y); | ||
|
||
fprintf('Program paused. Press enter to continue.\n'); | ||
pause; | ||
|
||
%% =================== Part 3: Cost and Gradient descent =================== | ||
|
||
X = [ones(m, 1), data(:,1)]; % Add a column of ones to x | ||
theta = zeros(2, 1); % initialize fitting parameters | ||
|
||
% Some gradient descent settings | ||
iterations = 1500; | ||
alpha = 0.01; | ||
|
||
fprintf('\nTesting the cost function ...\n') | ||
% compute and display initial cost | ||
J = computeCost(X, y, theta); | ||
fprintf('With theta = [0 ; 0]\nCost computed = %f\n', J); | ||
fprintf('Expected cost value (approx) 32.07\n'); | ||
|
||
% further testing of the cost function | ||
J = computeCost(X, y, [-1 ; 2]); | ||
fprintf('\nWith theta = [-1 ; 2]\nCost computed = %f\n', J); | ||
fprintf('Expected cost value (approx) 54.24\n'); | ||
|
||
fprintf('Program paused. Press enter to continue.\n'); | ||
pause; | ||
|
||
fprintf('\nRunning Gradient Descent ...\n') | ||
% run gradient descent | ||
theta = gradientDescent(X, y, theta, alpha, iterations); | ||
|
||
% print theta to screen | ||
fprintf('Theta found by gradient descent:\n'); | ||
fprintf('%f\n', theta); | ||
fprintf('Expected theta values (approx)\n'); | ||
fprintf(' -3.6303\n 1.1664\n\n'); | ||
|
||
% Plot the linear fit | ||
hold on; % keep previous plot visible | ||
plot(X(:,2), X*theta, '-') | ||
legend('Training data', 'Linear regression') | ||
hold off % don't overlay any more plots on this figure | ||
|
||
% Predict values for population sizes of 35,000 and 70,000 | ||
predict1 = [1, 3.5] *theta; | ||
fprintf('For population = 35,000, we predict a profit of %f\n',... | ||
predict1*10000); | ||
predict2 = [1, 7] * theta; | ||
fprintf('For population = 70,000, we predict a profit of %f\n',... | ||
predict2*10000); | ||
|
||
fprintf('Program paused. Press enter to continue.\n'); | ||
pause; | ||
|
||
%% ============= Part 4: Visualizing J(theta_0, theta_1) ============= | ||
fprintf('Visualizing J(theta_0, theta_1) ...\n') | ||
|
||
% Grid over which we will calculate J | ||
theta0_vals = linspace(-10, 10, 100); | ||
theta1_vals = linspace(-1, 4, 100); | ||
|
||
% initialize J_vals to a matrix of 0's | ||
J_vals = zeros(length(theta0_vals), length(theta1_vals)); | ||
|
||
% Fill out J_vals | ||
for i = 1:length(theta0_vals) | ||
for j = 1:length(theta1_vals) | ||
t = [theta0_vals(i); theta1_vals(j)]; | ||
J_vals(i,j) = computeCost(X, y, t); | ||
end | ||
end | ||
|
||
|
||
% Because of the way meshgrids work in the surf command, we need to | ||
% transpose J_vals before calling surf, or else the axes will be flipped | ||
J_vals = J_vals'; | ||
% Surface plot | ||
figure; | ||
surf(theta0_vals, theta1_vals, J_vals) | ||
xlabel('\theta_0'); ylabel('\theta_1'); | ||
|
||
% Contour plot | ||
figure; | ||
% Plot J_vals as 15 contours spaced logarithmically between 0.01 and 100 | ||
contour(theta0_vals, theta1_vals, J_vals, logspace(-2, 3, 20)) | ||
xlabel('\theta_0'); ylabel('\theta_1'); | ||
hold on; | ||
pause; | ||
plot(theta(1), theta(2), 'rx', 'MarkerSize', 10, 'LineWidth', 2); | ||
pause; |
This file contains bidirectional Unicode text that may be interpreted or compiled differently than what appears below. To review, open the file in an editor that reveals hidden Unicode characters.
Learn more about bidirectional Unicode characters
Original file line number | Diff line number | Diff line change |
---|---|---|
@@ -0,0 +1,162 @@ | ||
%% Machine Learning Online Class | ||
% Exercise 1: Linear regression with multiple variables | ||
% | ||
% Instructions | ||
% ------------ | ||
% | ||
% This file contains code that helps you get started on the | ||
% linear regression exercise. | ||
% | ||
% You will need to complete the following functions in this | ||
% exericse: | ||
% | ||
% warmUpExercise.m | ||
% plotData.m | ||
% gradientDescent.m | ||
% computeCost.m | ||
% gradientDescentMulti.m | ||
% computeCostMulti.m | ||
% featureNormalize.m | ||
% normalEqn.m | ||
% | ||
% For this part of the exercise, you will need to change some | ||
% parts of the code below for various experiments (e.g., changing | ||
% learning rates). | ||
% | ||
|
||
%% Initialization | ||
|
||
%% ================ Part 1: Feature Normalization ================ | ||
|
||
%% Clear and Close Figures | ||
clear ; close all; clc | ||
|
||
fprintf('Loading data ...\n'); | ||
|
||
%% Load Data | ||
data = load('ex1data2.txt'); | ||
X = data(:, 1:2); | ||
y = data(:, 3); | ||
m = length(y); | ||
|
||
% Print out some data points | ||
fprintf('First 10 examples from the dataset: \n'); | ||
fprintf(' x = [%.0f %.0f], y = %.0f \n', [X(1:10,:) y(1:10,:)]'); | ||
|
||
fprintf('Program paused. Press enter to continue.\n'); | ||
pause; | ||
|
||
% Scale features and set them to zero mean | ||
fprintf('Normalizing Features ...\n'); | ||
|
||
[X mu sigma] = featureNormalize(X); | ||
|
||
% Add intercept term to X | ||
X = [ones(m, 1) X]; | ||
|
||
|
||
%% ================ Part 2: Gradient Descent ================ | ||
|
||
% ====================== YOUR CODE HERE ====================== | ||
% Instructions: We have provided you with the following starter | ||
% code that runs gradient descent with a particular | ||
% learning rate (alpha). | ||
% | ||
% Your task is to first make sure that your functions - | ||
% computeCost and gradientDescent already work with | ||
% this starter code and support multiple variables. | ||
% | ||
% After that, try running gradient descent with | ||
% different values of alpha and see which one gives | ||
% you the best result. | ||
% | ||
% Finally, you should complete the code at the end | ||
% to predict the price of a 1650 sq-ft, 3 br house. | ||
% | ||
% Hint: By using the 'hold on' command, you can plot multiple | ||
% graphs on the same figure. | ||
% | ||
% Hint: At prediction, make sure you do the same feature normalization. | ||
% | ||
|
||
fprintf('Running gradient descent ...\n'); | ||
|
||
% Choose some alpha value | ||
alpha = 0.01; | ||
num_iters = 400; | ||
|
||
% Init Theta and Run Gradient Descent | ||
theta = zeros(3, 1); | ||
[theta, J_history] = gradientDescentMulti(X, y, theta, alpha, num_iters); | ||
|
||
% Plot the convergence graph | ||
figure; | ||
plot(1:numel(J_history), J_history, '-b', 'LineWidth', 2); | ||
xlabel('Number of iterations'); | ||
ylabel('Cost J'); | ||
|
||
% Display gradient descent's result | ||
fprintf('Theta computed from gradient descent: \n'); | ||
fprintf(' %f \n', theta); | ||
fprintf('\n'); | ||
|
||
% Estimate the price of a 1650 sq-ft, 3 br house | ||
% ====================== YOUR CODE HERE ====================== | ||
% Recall that the first column of X is all-ones. Thus, it does | ||
% not need to be normalized. | ||
|
||
data = [1650 3]; | ||
data = (data - mu); | ||
data = data./sigma; | ||
price = [1 data] *theta; | ||
|
||
|
||
% ============================================================ | ||
|
||
fprintf(['Predicted price of a 1650 sq-ft, 3 br house ' ... | ||
'(using gradient descent):\n $%f\n'], price); | ||
|
||
fprintf('Program paused. Press enter to continue.\n'); | ||
pause; | ||
|
||
%% ================ Part 3: Normal Equations ================ | ||
|
||
fprintf('Solving with normal equations...\n'); | ||
|
||
% ====================== YOUR CODE HERE ====================== | ||
% Instructions: The following code computes the closed form | ||
% solution for linear regression using the normal | ||
% equations. You should complete the code in | ||
% normalEqn.m | ||
% | ||
% After doing so, you should complete this code | ||
% to predict the price of a 1650 sq-ft, 3 br house. | ||
% | ||
|
||
%% Load Data | ||
data = csvread('ex1data2.txt'); | ||
X = data(:, 1:2); | ||
y = data(:, 3); | ||
m = length(y); | ||
|
||
% Add intercept term to X | ||
X = [ones(m, 1) X]; | ||
|
||
% Calculate the parameters from the normal equation | ||
theta = normalEqn(X, y); | ||
|
||
% Display normal equation's result | ||
fprintf('Theta computed from the normal equations: \n'); | ||
fprintf(' %f \n', theta); | ||
fprintf('\n'); | ||
|
||
% Estimate the price of a 1650 sq-ft, 3 br house | ||
% ====================== YOUR CODE HERE ====================== | ||
price = 0; % You should change this | ||
price = [1 1650 3]*theta; | ||
|
||
% ============================================================ | ||
|
||
fprintf(['Predicted price of a 1650 sq-ft, 3 br house ' ... | ||
'(using normal equations):\n $%f\n'], price); | ||
|
Oops, something went wrong.