Load Data
数据格式依旧是每行一个样例,最后一列为标签。
fileName = 'xxx.txt';
data = load(fileName);
m = size(data, 1);
n = size(data, 2);
X = data(:, 1 : n - 1);
y = data(:, n);
Plot
这里出的图是针对二维情况的。
plotData(X, y);
hold on;
xlabel('Exam 1 score')
ylabel('Exam 2 score')
legend('Admitted', 'Not admitted')
hold off;
plotData函数,用到了一点matlab矩阵操作的小技巧。
function plotData(X, y)
figure;
hold on;
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);
hold off;
end
Compute Cost and Gradient
为之后的fminunc函数提供costFunction的计算方法。
这里,在线性情况,即低阶情况下,分类边界为低阶函数,直接加上一列1就行了。
而在分类边界明显不为直线时,可以使用mapFeature函数,将原来低次幂的特征映射为高次组合。
而在计算代价函数的时候,为了防止由于映射的次数过高产生过拟合,加入了正则化参数来限制theta。
%---低阶---%
X = [ones(m,