机器学习 Week2 Exercise 1: Linear Regression
part 4: Visualizing J
目的:绘制cost function J(θ\theta θ 0 , θ\theta θ 1 )随自变量θ\theta θ 0 ,θ\theta θ 1 的变化情况。
整体思路:
先生成坐标向量theta0_vals、theta1_vals,代表θ\theta θ 0 、θ\theta θ 1 的取值 然后由坐标向量theta0_vals、theta1_vals中的θ\theta θ 0 ,θ\theta θ 1 ,由computeCost(X, y, t)函数计算出对应的cost function J(θ\theta θ 0 , θ\theta θ 1 )的值 最后绘制出图象
代码详解:
% ============= Part 4: Visualizing J(theta_0, theta_1) =============
theta0_vals = linspace(-10, 10, 100);
theta1_vals = linspace(-1, 4, 100);
y = linspace(x1,x2,n) 生成 n 个点。这些点的间距为 (x2-x1)/(n-1)。n默认为100。 比如y1 = linspace(-5,5,7) y1 = 1×7
-5.0000 -3.3333 -1.6667 0 1.6667 3.3333 5.0000**
J_vals = zeros(length(theta0_vals), length(theta1_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
注意matlab数组下标从1开始,而不是0 由computeCost(X, y, t)函数计算出对应的cost function J(θ\theta θ 0 , θ\theta θ 1 )的值
J_vals = J_vals';
figure;
surf(theta0_vals, theta1_vals, J_vals)
xlabel('\theta_0'); ylabel('\theta_1');
由于surf函数的特性,需要将J_vals转置。 figure 创建一个新的图窗窗口 figure 相关用法:
figure(‘Color’,‘white’) 将背景色设置为白色。 figure(‘Name’,‘Measured Data’);创建一个图窗并指定 Name 属性。默认情况下,生成的标题包含图窗编号。 figure(‘Name’,‘Measured Data’,‘NumberTitle’,‘off’);生成的标题不包含图窗编号.
surf(X,Y,Z) 创建一个三维曲面图。该函数将矩阵 Z 中的值绘制为由 X 和 Y 定义的 x-y 平面中的网格上方的高度。函数还对颜色数据使用 Z,因此颜色与高度成比例。
figure;
contour(theta0_vals, theta1_vals, J_vals, logspace(-2, 3, 20))
xlabel('\theta_0'); ylabel('\theta_1');
hold on;
plot(theta(1), theta(2), 'rx', 'MarkerSize', 10, 'LineWidth', 2)
前面J_vals已将转置过了 logspace函数将区间[10-2 ,103 ]分成20等份,返回1*20矩阵
用法:y = logspace(a,b,n) 在 10 的幂 10^a 和 10^b之间生成 n 个点。 contour(X,Y,Z,levels) 将 levels 指定为单调递增值的向量时,可在某些特定高度绘制等高线。要在一个高度 (k) 绘制等高线,要将 levels 指定为二元素行向量 [k k]。 ‘\theta_0’和’\theta_1’ 用了转义字符 hold on 当前轴及图形不被刷新,准备接受后续图形绘制 hold off 结束当前图形不被刷新的性质 MarkSize指定符号大小,LineWidth指定线宽