首页 > 代码库 > Linear regression with one variable算法实例讲解(绘制图像,cost_Function ,Gradient Desent, 拟合曲线, 轮廓图绘制)_矩阵操作

Linear regression with one variable算法实例讲解(绘制图像,cost_Function ,Gradient Desent, 拟合曲线, 轮廓图绘制)_矩阵操作

%测试数据 ‘ex1data1.txt‘, 第一列为 population of City in 10,000s, 第二列为 Profit in $10,000s
1
6.1101,17.592 2 5.5277,9.1302 3 8.5186,13.662 4 7.0032,11.854 5 5.8598,6.8233 6 8.3829,11.886 7 7.4764,4.3483 8 8.5781,12 9 6.4862,6.598710 5.0546,3.816611 5.7107,3.252212 14.164,15.50513 5.734,3.155114 8.4084,7.225815 5.6407,0.7161816 5.3794,3.512917 6.3654,5.304818 5.1301,0.5607719 6.4296,3.651820 7.0708,5.389321 6.1891,3.138622 20.27,21.76723 5.4901,4.26324 6.3261,5.187525 5.5649,3.082526 18.945,22.63827 12.828,13.50128 10.957,7.046729 13.176,14.69230 22.203,24.14731 5.2524,-1.2232 6.5894,5.996633 9.2482,12.13434 5.8918,1.849535 8.2111,6.542636 7.9334,4.562337 8.0959,4.116438 5.6063,3.392839 12.836,10.11740 6.3534,5.497441 5.4069,0.5565742 6.8825,3.911543 11.708,5.385444 5.7737,2.440645 7.8247,6.731846 7.0931,1.046347 5.0702,5.133748 5.8014,1.84449 11.7,8.004350 5.5416,1.017951 7.5402,6.750452 5.3077,1.839653 7.4239,4.288554 7.6031,4.998155 6.3328,1.423356 6.3589,-1.421157 6.2742,2.475658 5.6397,4.604259 9.3102,3.962460 9.4536,5.414161 8.8254,5.169462 5.1793,-0.7427963 21.279,17.92964 14.908,12.05465 18.959,17.05466 7.2182,4.885267 8.2951,5.744268 10.236,7.775469 5.4994,1.017370 20.341,20.99271 10.136,6.679972 7.3345,4.025973 6.0062,1.278474 7.2259,3.341175 5.0269,-2.680776 6.5479,0.2967877 7.5386,3.884578 5.0365,5.701479 10.274,6.752680 5.1077,2.057681 5.7292,0.4795382 5.1884,0.2042183 6.3557,0.6786184 9.7687,7.543585 6.5159,5.343686 8.5172,4.241587 9.1802,6.798188 6.002,0.9269589 5.5204,0.15290 5.0594,2.821491 5.7077,1.845192 7.6366,4.295993 5.8707,7.202994 5.3054,1.986995 8.2934,0.1445496 13.394,9.055197 5.4369,0.61705
%绘制实际数据图像——人口和利润的关系图fprintf(Plotting Data ...\n)data = load(ex1data1.txt);X = data(:, 1); y = data(:, 2);m = length(y); % number of training examples% Plot Data% Note: You have to complete the code in plotData.mplotData(X, y);fprintf(Program paused. Press enter to continue.\n);pause;
 1 %plotData()函数实现 2  3 function plotData(x, y) 4  5 figure;                                           % open a new figure window 6 plot(x, y, rx, MarkerSize, 10);     %Set the size of Points(MarkerSize, 10) 7 ylabel(profit in $10,1000s); 8 xlabel(population of City in 10,000s); 9 10 end
 1 %% =================== Part 3: Gradient descent  2  3 fprintf(Running Gradient Descent ...\n) 4  5 X = [ones(m, 1), data(:,1)]; % Add a column of ones to x 6  7 theta = zeros(2, 1); % initialize fitting parameters 8  9 % Some gradient descent settings10 iterations = 1500;       %迭代次数11 alpha = 0.01;              %learning rate12 13 % compute and display initial cost14 computeCost(X, y, theta)      %y是真实的值
 1 % Compute Cost for linear regression 2 % cost Function函数实现___利用矩阵操作进行!! 3 function J = computeCost(X, y, theta) 4  5 % Initialize some useful values 6 m = length(y); % number of training examples 7 J = 0; 8  9 % Instructions: Compute the cost of a particular choice of theta10 %               You should set J to the cost.11 12 % X = [ ones(m, 1), data(:, 1) ], theta = [ th1; th2]13 predictions = X * theta;             %矩阵操作--预测函数 14 sqrError = (predictions - y).^2;  15 J = sum(sqrError) / (2*m);16 17 end

 

1 %运行梯度下降算法2 % run gradient descent3 4 theta = gradientDescent(X, y, theta, alpha, iterations);5 6 % print theta to screen7 fprintf(Theta found by gradient descent: );8 fprintf(%f %f \n, theta(1), theta(2));
 1 %梯度下降算法实现 gradientDescent(X, y, theta, alpha, iterations)  
%X-training example,y-实际数值,alpha-learning rate
2 function [theta, J_history] = gradientDescent(X, y, theta, alpha, num_iters) 3 4 % theta = GRADIENTDESENT(X, y, theta, alpha, num_iters) updates theta by 5 % taking num_iters gradient steps with learning rate alpha 6 7 % Initialize some useful values 8 m = length(y); % number of training examples 9 J_history = zeros(num_iters, 1);10 11 for iter = 1:num_iters12 predictions = X * theta; %预测值h(xi)--利用了矩阵运算13 sqrError = (predictions - y); %预测值 - 实际值14 15 % Simultaneously update(同时更新thetaj) thetaj for all j.16 % alpha - learning rate, .*---是内积(矩阵对应元素相乘)17 theta1 = theta(1) - alpha * (1/m) * sum(sqrError .* X(:,1));18 theta2 = theta(2) - alpha * (1/m) * sum(sqrError .* X(:,2));19 theta(1) = theta1;20 theta(2) = theta2;21 22 23 % Save the cost J in every iteration 24 J_history(iter) = computeCost(X, y, theta);25 26 %disp(J_history); %增加输出语句,方便调试27 28 end29 30 end
1 %绘制拟合曲线2 % Plot the linear fit3 hold on;              % keep previous plot visible4 plot(X(:,2), X*theta, -)5 legend(Training data, Linear regression)    %添加图例6 hold off              % dont overlay any more plots on this figure
 1 % Predict values for population sizes of 35,000 and 70,000 2 %利用求出的拟合参数--预测新值,利用矩阵运算 3 predict1 = [1, 3.5] *theta; 4 fprintf(For population = 35,000, we predict a profit of %f\n,... 5     predict1*10000);    6  7 predict2 = [1, 7] * theta; 8 fprintf(For population = 70,000, we predict a profit of %f\n,... 9     predict2*10000);10 11 fprintf(Program paused. Press enter to continue.\n);12 pause;
 1 %计算不同 theta参数下, J(θ)值的变化, 绘制图像 2 %% ============= Part 4: Visualizing J(theta_0, theta_1) ============= 3  4 fprintf(Visualizing J(theta_0, theta_1) ...\n) 5  6 % Grid over which we will calculate J 7 %linspace(x, y, n)--在(x,y)区间内均匀生成n个数 8 theta0_vals = linspace(-10, 10, 100); 9 theta1_vals = linspace(-1, 4, 100);10 11 % initialize J_vals to a matrix of 0s12 J_vals = zeros(length(theta0_vals), length(theta1_vals));13 14 % Fill out J_vals15 for i = 1:length(theta0_vals)16     for j = 1:length(theta1_vals)17       t = [theta0_vals(i); theta1_vals(j)];    18       J_vals(i,j) = computeCost(X, y, t);19     end20 end21 22 23 % Because of the way meshgrids work in the surf command, we need to 24 % transpose J_vals before calling surf, or else the axes will be flipped25 26 J_vals = J_vals;27 % Surface plot28 figure;29 30 %surf(X,Y,Z)--creates the surface plot from corresponding(对应值) value in X, Y,Z (default: color is proportional(成正比) to surface height.)31 32 surf(theta0_vals, theta1_vals, J_vals)33 xlabel(\theta_0); ylabel(\theta_1);
1 % Contour plot----轮廓图的绘制2 figure;3 4 % Plot J_vals as 15 contours spaced logarithmically between 0.01 and 1005 6 contour(theta0_vals, theta1_vals, J_vals, logspace(-2, 3, 20))7 xlabel(\theta_0); ylabel(\theta_1);8 hold on;9 plot(theta(1), theta(2), rx, MarkerSize, 10, LineWidth, 2);

 技术分享技术分享技术分享绘图效果如上。

Linear regression with one variable算法实例讲解(绘制图像,cost_Function ,Gradient Desent, 拟合曲线, 轮廓图绘制)_矩阵操作