博客
关于我
强烈建议你试试无所不能的chatGPT,快点击我
机器学习 线性回归 (matlab实现)
阅读量:4217 次
发布时间:2019-05-26

本文共 1369 字,大约阅读时间需要 4 分钟。

代价函数:

下降梯度:

假设函数:

x代表年龄,y代表身高

预测身高与年龄的关系

Code:

x = load('ex2x.dat'); y = load('ex2y.dat');[m,n] = size(x);x = [ones(m,1),x];%偏置项 x0 = 1figure % open a new figure windowplot(x(:,2), y, 'o');%袁术数据分布hold on;ylabel('Height in meters')xlabel('Age in years');inittheta = zeros(n+1,1);[theta J] = linearReg(x,y,inittheta);%下降梯度函数 求theta 与各步代价plot(x(:,2),x*theta,'g');%画出边界函数hold off;

linearRegression:

function [theta J] = linearReg(x,y,inittheta) % x0已经被置为1了  [m,n] = size(x);  theta = inittheta;  MAX_ITR = 1500; %迭代 1500次  alpha = 0.07;%学习率  J = zeros(MAX_ITR,1);  for i = 1:MAX_ITR    h = x*theta;//预测值    grad = (1/m).*(x'*(h-y));%梯度向量    theta = theta - alpha*grad;    J(i) = 1/(2*m)*(sum((h-y).^2));%每一步的代价  end

可以画出代价函数随着两个参数theta(1),theta(2)的取值变化情况:

执行命令:

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

测试函数

function J_vals = testJ(x,y)  [m,n] = size(x);  J_vals = zeros(100, 100);   % initialize Jvals to 100x100 matrix of 0's  theta0_vals = linspace(-3, 3, 100);  theta1_vals = linspace(-1, 1, 100);  for i = 1:length(theta0_vals)      for j = 1:length(theta1_vals)       t = [theta0_vals(i); theta1_vals(j)];       J_vals(i,j) = 1/(2*m)*(sum((x*t-y).^2));      end  end

代价随参数变化情况:

还可画出等高线:

contour(theta0_vals, theta1_vals, J_vals, logspace(-2, 2, 15))xlabel('\theta_0'); ylabel('\theta_1')

参考:(内含数据)

你可能感兴趣的文章
关于sd卡中一些概念的理解
查看>>
sd卡驱动分析之相关硬件操作和总结
查看>>
好的播文
查看>>
linux dd命令解析
查看>>
linux find命令详解
查看>>
S3C2440上touchscreen触摸屏驱动
查看>>
USB History Viewing
查看>>
怎样做可靠的分布式锁,Redlock 真的可行么?
查看>>
[图文] Seata AT 模式分布式事务源码分析
查看>>
pm 源码分析
查看>>
Sending the User to Another App
查看>>
kmsg_dump
查看>>
Getting a Result from an Activity
查看>>
Allowing Other Apps to Start Your Activity
查看>>
dev/mem
查看>>
pfn_valid 源码分析
查看>>
dev/kmem 和dev/mem的区别
查看>>
checkbox
查看>>
Sending Simple Data to Other Apps
查看>>
Receiving Simple Data from Other Apps
查看>>