2019. 2. 4. 18:21ㆍArtificial Intelligence
Programming Exercise 2 : Logistic Regression
이번 프로그래밍 과제에서는 Octave를 이용하여 Logistic Regression을 모델링하고
실제 데이터를 이용해서 결과를 분석해야 했다.
구현해야 할 함수들은 다음과 같았다.
<미리 구현되어 실행한 결과를 시각적으로 활용할 수 있도록 도와주는 파일>
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
1. plotData.m
주어진 X벡터와 y벡터값을 가지고 그래프를 그려 GUI를 사용해 시각적으로 보여주는 함수이다.
plot이라는 function이 이미 Octave 내에 구현되어 있으므로, 이 함수를 실행하고, 함수의 legend와 labeling을 해주고
plotting 할 데이터를 올바르게 집어넣어주면 간단하게 구현할 수 있다.
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.
% Create New Figure
figure; hold on;
% ====================== 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.
%
% Find indices of Positive and Negative examples
pos = find(y == 1); neg = find(y == 0);
% Plot examples
plot(X(pos, 1), X(pos, 2), 'k+', 'LineWidth', 2,'MarkerSize',7);
plot(X(neg, 1), X(neg, 2), 'ko', 'MarkerFaceColor', 'y', 'MarkerSize', 7);
xlabel('Exam 1 score')
ylabel('Exam 2 score')
legend('Admitted', 'Not amitted')
hold off;
% =========================================================================
hold off;
end
2. sigmoid.m
sigmoid 함수는 정의 그대로 적어주기만 하면 되기 때문에 그리 구현하는데 어려움을 느끼진 않을 부분이였다.
Octave는 exp() 함수를 통해 exponential 값을 바로 구할 수 있으니 이를 응용하면 된다.
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(-1*z));
% =============================================================
end
3. costFunction.m
costFunction의 정의에 맞추어 함수를 정의해주기만 하면 된다. 행렬의 곱셈이 아니라 원소끼리의 곱셈이므로 곱할때에 .을 반드시 붙여주어야 한다.
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
%
J = (-1/m) * sum(y.*log(sigmoid(X*theta)) + (1-y).*log(1-sigmoid(X*theta)));
temp = sigmoid(X*theta);
error = temp - y;
grad = (1/m) * (X' * error);
% =============================================================
end
4. predict.m
predict 함수는 Regularized 된 theta의 값을 X에 대입하여 가설 함수의 값을 구한 다음, 그 값이 0.5 이상이면 1이라 예측하고, 0.5 이하이면 0이라 예측하는 함수이다. 따라서 round()함수를 이용하여 sigmoid 함수의 결과값을 반올림 해주면 조건문의 사용없이 간단하게 구현할 수 있다.
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
%
p = round(sigmoid(X*theta));
% =========================================================================
end
5. costFunctionReg.m
costFunctionReg 함수는 cost와 gradient를 logistic regression과 Regularization을 이용하여 구하는 함수이다.
Regularization은 costFunction이 지나치게 복잡해져서 Overfitting이 일어나는 것을 막기 위해 차수가 높은 파라미터의 theta값에 대해서 lambda만큼의 제약을 걸어 그 영향력을 조절하는 방식이다. 구하는 식은 아래와 같다.
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
tempTheta = theta;
tempTheta(1) = 0;
J = (-1/m) * sum(y.*log(sigmoid(X*theta))+(1-y).*log(1-sigmoid(X*theta)));
J = J + ((lambda)/(2*m))*(sum(tempTheta.^2));
temp = sigmoid(X*theta);
error = temp - y;
grad = (1/m) * (X' * error) +(lambda/m)*tempTheta;
% =============================================================
end
'Artificial Intelligence' 카테고리의 다른 글
Neural Networks(2) (0) | 2019.02.07 |
---|---|
Neural Networks (1) (0) | 2019.02.07 |
MachineLearning - The Problem of OverFitting (0) | 2019.02.03 |
MachineLearning - Classification(3) (0) | 2019.02.03 |
MachineLearning - Classification(2) (0) | 2019.02.01 |