线性回归的cost function 3D图形分析法

原创 2018-03-04 22:31 阅读(178)次

在上文 线性回归的cost function 2D图形分析法 我们假设θ0 =  0 ,使J(θ0,θ1) 变成 J(θ1)。所以可以用2D图形来表示J(θ)函数。本文将认为θ0 !=0,cost function  将有两个自变量的函数J(θ0,θ1) ,就是需要3D图形来表示(x轴θ0,y轴θ1,z轴为J(θ0,θ1))的值。


想要得到如下图的效果,




首先我们需要样本数据,这里用andrew Ng 课程一个的数据作为绘图的样本数据。

数据共97行,每行2列,第1列是特征项x,第2列是目标值y。我截取一些如下

6.1101,17.592
5.5277,9.1302
8.5186,13.662
7.0032,11.854
5.8598,6.8233
8.3829,11.886
7.4764,4.3483
8.5781,12
6.4862,6.5987
5.0546,3.8166
5.7107,3.2522
14.164,15.505
5.734,3.1551
8.4084,7.2258
5.6407,0.71618


这里的数据是否合理并不重要。我们只是需要一个单变量的线性回归的绘图数据而已。

加载数据

clear ; close all; clc
data = load('ex1data1.txt');
切分数据

X = data(:, 1); 
y = data(:, 2);

因为  ,所以给X的矩阵数据第1列补上1,用来和θ0相乘且不会改变θ0 。

补1

m = length(y);
X = [ones(m, 1), data(:,1)]; %   m * 2

设置θ0轴数据范围

theta0_vals = linspace(-10, 10, 50);

设置θ1轴数据范围

theta1_vals = linspace(-10, 10, 50);

计算J轴的数据,因为 ,把代入


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


绘制图形

figure;
surf(theta0_vals, theta1_vals, J_vals)
xlabel('\theta_0'); ylabel('\theta_1');


创建computeCost.m文件,放在同目录下,输入cost function的计算规则

function J = computeCost(X, y, theta)

J = 0;
p = X*theta;
errors = p - y;
sqrerrors = errors.^2;
J = 1/(2*m) * sum(sqrerrors);

end


至此,可以就能完成一开始的3D图,而我们也能从3D图中看到这个cost function的最低值。



本站作品的版权皆为作品作者所有。

本站文字和内容为本站编辑或翻译,部分内容属本站原创,所以转载前务必通知本站并以超链接形式注明内容来自本站,否则以免带来不必要的麻烦。

本站内容欢迎分享,但拒绝有商业目的的转载!