# Coursera: Machine Learning (Week 3) [Assignment Solution] - Andrew NG

▸ Logistic regression and apply it to two different datasets.

I have recently completed the Machine Learning course from Coursera by Andrew NG.

While doing the course we have to go through various quiz and assignments.

Here, I am sharing my solutions for the weekly assignments throughout the course.

I tried to provide optimized solutions like

I have recently completed the Machine Learning course from Coursera by Andrew NG.

While doing the course we have to go through various quiz and assignments.

Here, I am sharing my solutions for the weekly assignments throughout the course.

**These solutions are for reference only.****> It is recommended that you should solve the assignments by yourself honestly then only it makes sense to complete the course.****>**

**But, In case you stuck in between, feel free to refer the solutions provided by me.**

**NOTE:**

Don't just copy paste the code for the sake of completion.

Even if you copy the code, make sure you understand the code first.

**Click here to check out**__week-2__assignment solutions,__Scroll down__for the solutions for__week-3__assignment.**In this exercise, you will implement logistic regression and apply it to two different datasets. Before starting on the programming exercise, we strongly recommend watching the video lectures and completing the review questions for the associated topics.**

**It consist of the following files:****ex2.m -**Octave/MATLAB script that steps you through the exercise**ex2 reg.m -**Octave/MATLAB script for the later parts of the exercise**ex2data1.txt -**Training set for the first half of the exercise**ex2data2.txt -**Training set for the second half of the exercise**submit.m -**Submission script that sends your solutions to our servers**mapFeature.m -**Function to generate polynomial features**plotDecisionBoundary.m -**Function to plot classifier's decision boundary**[*] plotData.m -**Function to plot 2D classification data**[*] sigmoid.m -**Sigmoid Function**[*] costFunction.m -**Logistic Regression Cost Function**[*] predict.m -**Logistic Regression Prediction Function**[*] costFunctionReg.m -**Regularized Logistic Regression Cost**Video -**YouTube videos featuring Free IOT/ML tutorials

*****indicates files you will need to complete

### plotData.m :

```
function plotData(X, y)
%PLOTDATA Plots the data points X and y into a new figure
% PLOTDATA(x,y) plots the data points with + for the positive examples
% and o for the negative examples. X is assumed to be a Mx2 matrix.
% ====================== YOUR CODE HERE ======================
% Instructions: Plot the positive and negative examples on a
% 2D plot, using the option 'k+' for the positive
% examples and 'ko' for the negative examples.
%
%Seperating positive and negative results
pos = find(y==1); %index of positive results
neg = find(y==0); %index of negative results
% Create New Figure
figure;
%Plotting Positive Results on
% X_axis: Exam1 Score = X(pos,1)
% Y_axis: Exam2 Score = X(pos,2)
plot(X(pos,1),X(pos,2),'g+');
%To keep above plotted graph as it is.
hold on;
%Plotting Negative Results on
% X_axis: Exam1 Score = X(neg,1)
% Y_axis: Exam2 Score = X(neg,2)
plot(X(neg,1),X(neg,2),'ro');
% =========================================================================
hold off;
end
```

### sigmoid.m :

```
function g = sigmoid(z)
%SIGMOID Compute sigmoid function
% g = SIGMOID(z) computes the sigmoid of z.
% You need to return the following variables correctly
g = zeros(size(z));
% ====================== YOUR CODE HERE ======================
% Instructions: Compute the sigmoid of each value of z (z can be a matrix,
% vector or scalar).
g = 1./(1+exp(-z));
% =============================================================
end
```

### costFunction.m :

```
function [J, grad] = costFunction(theta, X, y)
%COSTFUNCTION Compute cost and gradient for logistic regression
% J = COSTFUNCTION(theta, X, y) computes the cost of using theta as the
% parameter for logistic regression and the gradient of the cost
% w.r.t. to the parameters.
% Initialize some useful values
m = length(y); % number of training examples
% You need to return the following variables correctly
J = 0;
grad = zeros(size(theta));
% ====================== YOUR CODE HERE ======================
% Instructions: Compute the cost of a particular choice of theta.
% You should set J to the cost.
% Compute the partial derivatives and set grad to the partial
% derivatives of the cost w.r.t. each parameter in theta
%
% Note: grad should have the same dimensions as theta
%
%DIMENSIONS:
% theta = (n+1) x 1
% X = m x (n+1)
% y = m x 1
% grad = (n+1) x 1
% J = Scalar
z = X * theta; % m x 1
h_x = sigmoid(z); % m x 1
J = (1/m)*sum((-y.*log(h_x))-((1-y).*log(1-h_x))); % scalar
grad = (1/m)* (X'*(h_x-y)); % (n+1) x 1
% =============================================================
end
```

**Check-out our free tutorials on IOT (Internet of Things):**

### predict.m :

```
function p = predict(theta, X)
%PREDICT Predict whether the label is 0 or 1 using learned logistic
%regression parameters theta
% p = PREDICT(theta, X) computes the predictions for X using a
% threshold at 0.5 (i.e., if sigmoid(theta'*x) >= 0.5, predict 1)
m = size(X, 1); % Number of training examples
% You need to return the following variables correctly
p = zeros(m, 1);
% ====================== YOUR CODE HERE ======================
% Instructions: Complete the following code to make predictions using
% your learned logistic regression parameters.
% You should set p to a vector of 0's and 1's
%
% Dimentions:
% X = m x (n+1)
% theta = (n+1) x 1
h_x = sigmoid(X*theta);
p=(h_x>=0.5);
%p = double(sigmoid(X * theta)>=0.5);
% =========================================================================
end
```

### costFunctionReg.m :

```
function [J, grad] = costFunctionReg(theta, X, y, lambda)
%COSTFUNCTIONREG Compute cost and gradient for logistic regression with regularization
% J = COSTFUNCTIONREG(theta, X, y, lambda) computes the cost of using
% theta as the parameter for regularized logistic regression and the
% gradient of the cost w.r.t. to the parameters.
% Initialize some useful values
m = length(y); % number of training examples
% You need to return the following variables correctly
J = 0;
grad = zeros(size(theta));
% ====================== YOUR CODE HERE ======================
% Instructions: Compute the cost of a particular choice of theta.
% You should set J to the cost.
% Compute the partial derivatives and set grad to the partial
% derivatives of the cost w.r.t. each parameter in theta
%DIMENSIONS:
% theta = (n+1) x 1
% X = m x (n+1)
% y = m x 1
% grad = (n+1) x 1
% J = Scalar
z = X * theta; % m x 1
h_x = sigmoid(z); % m x 1
reg_term = (lambda/(2*m)) * sum(theta(2:end).^2);
J = (1/m)*sum((-y.*log(h_x))-((1-y).*log(1-h_x))) + reg_term; % scalar
grad(1) = (1/m)* (X(:,1)'*(h_x-y)); % 1 x 1
grad(2:end) = (1/m)* (X(:,2:end)'*(h_x-y))+(lambda/m)*theta(2:end); % n x 1
% =============================================================
end
```

I tried to provide optimized solutions like

**vectorized implementation**for each assignment. If you think that more optimization can be done, then put suggest the corrections / improvements.--------------------------------------------------------------------------------

Click here to see solutions for all **Machine Learning**Coursera Assignments.

&

Click here to see more codes for **Raspberry Pi 3**and similar Family.

&

Click here to see more codes for **NodeMCU ESP8266**and similar Family.

&

Click here to see more codes for **Arduino Mega (ATMega 2560)**and similar Family.

Feel free to ask doubts in the comment section. I will try my best to solve it.

If you find this helpful by any mean like, comment and share the post.

This is the simplest way to encourage me to keep doing such work.

Thanks and Regards,

**-Akshay P. Daga**

how could you do this please explain me...

ReplyDeleteWhat explanation you want?

DeletePlease be more specific.

How can i download these files?

ReplyDeleteYou can copy the the code from above code sections.

DeleteHi Akshay, Please may I have theses files as well:

ReplyDeleteex2.m

ex2 reg.m

ex2data1.txt

ex2data2.txt

submit.m

mapFeature.m

plotDecisionBoundary.m

You can get those files from Coursera assignments. I don't have those with me now.

Deletecan you please tell me what you did by this

ReplyDeletegrad = (1/m)* (X'*(h_x-y));

this means:- take the transpose of feature matrix X(i.e X') and multiply it with the difference of matrices h_x and y i.e the matrix with sigmoid outputs and the result matrix(y). Finally multiply the end product with 1/m , where m is the number of training examples.

ReplyDeleteThis is the vectorized implementation of the code that's actually way more lengthier to implement using loops.

Hi, can you please explain the predict function?

ReplyDeleteIn this gradient decent the number of iteration are not specified so how is the gradient decent working? can someone please explain?

ReplyDeleteI used the exact code at the end but I'm still getting 65/100 not able to figure out the reason

ReplyDeleteDid you figure out the reason yet?

DeleteHi !! why didn't you use sum() function for grad even why formula contains that ?

ReplyDeletesum() is used for the summation in the formula.

DeleteBut here while coding for grad computation: grad = (1/m)* (X'*(h_x-y));

Here We are doing matrix multiplication which itself consist of "sum of product". So, no need of external sum function.

Please try to do it on paper by yourself, you will get clear idea.

Thanks

we have learned that Z= theta transpose X then why are using Z=X multiplied by theta in the above codes ?

ReplyDeleteWhen we are calculating z(small z) for a single sample, then it is z=theta' * x. (here small x)

DeleteBut When you do the same computation for all the samples at the same time then we call it as Z (Capital Z).

Z = X * theta. (Here Capital X)

Try to do it using pen-paper, you will get clear understanding.

Hii, thanks for your help mr. Akshay. I had this one doubt about predict.m function:

ReplyDeleteI tried coding for predict function in the following way:

h_x = sigmoid(X*theta);

if (0<=h_x<0.5)

p=0;

elseif (0.5<=h_x<=1)

p=1;

endif

I know I did it in a long way but the accuracy that I am getting 60.00. Your code gave me the accuracy 89.00. Can you please help me understand what's wrong with this and what's the exact difference between your code and mines'?

P is a matrix with dimensions m x 1.

DeleteSolution:

You can put your code in a "for" loop and check the value of each element in h_x and accordingly set the value of each element in p.

It will work.

hey bro it says z not defined why???

ReplyDeleteHi, I think you are doing this assignment in Octave and that's why you are facing this issue.

DeleteChethan Bhandarkar has provided solution for it. Please check it out: https://www.apdaga.com/2018/06/coursera-machine-learning-week-2.html?showComment=1563986935868#c4682866656714070064

Thanks