中南大学 机器学习实验报告
班级: 计 科 1202
学号:
姓名:
时间: 2014.10.29
目 录
Programming Exercise 1: Linear Regression
1 .Simple octave function …………………………………………02
2.Linear regression with one variable……………………………02
3 Linear regression with multiple variables………………………05
Programming Exercise 2: Logistic Regression
1. Logistic Regression ……………………………………………07
2. Regularized logistic regression ………………………………08
Programming Exercise 1: Linear Regression
1 .Simple octave function
warmUpExercise.m中增添代码:
A = eye(5);
执行结果如下:
2.Linear regression with one variable
2.1 Plotting the Data
plotData.m中增添代码:
plot(x, y, 'rx', 'MarkerSize', 10); % Plot the data
ylabel('Profit in $10,000s'); % Set the y_axis label
xlabel('Population of City in 10,000s'); % Set the x_axis label
执行结果如下:
2.2 Gradient Descent
computeCost.m中增添代码:
J = ((X*theta-y)'*(X*theta-y))/2/m;
执行结果如下:
gradientDescent.m中增添代码:
theta(1)=theta(1)-alpha*sum((X*theta-y).*X(:,1))/m;
theta(2)=theta(2)-alpha*sum((X*theta-y).*X(:,2))/m;
执行结果如下:
2.3 Debugging
2.4 Visualizing J (theta)
执行结果如下:
3 Linear regression with multiple variables
3.1 Feature Normalization
featureNormalize.m中增添代码:
mu = mean(X,1);
sigma = std(X);
i = 1;
while i <= size(X, 2);,
X_norm(:,i) = (X(:,i) - mu(1,i))/sigma(1,i);
i = i + 1;
end;
3.2 Normal Equations
normalEqn.m中增添代码:
theta = pinv(X'*X)*X'*y;
执行结果如下:
Programming Exercise 2: Logistic Regression
1. Logistic Regression
1.1 Visualizing the data
plotData.m中增添代码:
pos = find(y==1); neg = find(y == 0);
plot(X(pos, 1), X(pos, 2), 'k+','LineWidth', 2, ...
'MarkerSize', 7);
plot(X(neg, 1), X(neg, 2), 'ko', 'MarkerFaceColor', 'y', ...
'MarkerSize', 7);
执行结果如下:
1.2 Implementation
sigmoid.m中增添代码:
g=1./(1+exp(-z));
costFunction.m中增添代码:
J= -(y'*log(sigmoid(X*theta)) + (1-y)'*log(1-sigmoid(X*theta)))/m;
grad= (((sigmoid(X*theta)-y)'*X)/m)';
执行结果如下:
2. Regularized logistic regression
2.1 Visualizing the data
执行结果如下:
2.2Visualizing the data
degree = 6;
out = ones(size(X1(:,1)));
for i = 1:degree
for j = 0:i
out(:, end+1) = (X1.^(i-j)).*(X2.^j);
end
end
2.3 Cost function and gradient
costFunctionReg.m中增添代码:
J= -(y'*log(sigmoid(X*theta))+ (1-y)'*log(1-sigmoid(X*theta)))/m+ (lambda/2/m)*(theta'*theta-theta(1)*theta(1)-theta(2)*theta(2))
grad= (((sigmoid(X*theta)-y)'*X)/m)';
tmp=grad;
tmp=tmp+(lambda*theta/m);
grad = [grad(1,1);tmp(2:length(theta),1)];
执行结果如下:
2.4 Plotting the decision boundary
执行结果如下: