Octave实现一元线性回归详解及错误分析(吴恩达老师作业)

注意事项

  1. 建议使用CLI,简洁明了。
  2. 如果函数在定义期间输入错误,而运行期间才发现的话,通过修改函数名,再执行新函数。

代码如下

首先要cd到txt文件保存的路径下才可读取txt文件,这里忽略该步骤。

创建代价函数:
function J = computeCost(x, y, theta)
m = length(y)
J = 0
%当它是初始化好了
J = sum((x * theta - y).^2) / (2 * m)
end

到这里有疑问的同学,自行百度线性回归原理,也就不用往下看了

更新参数theta
function [theta, J_history] = gradientDescent(x, y, theta, alpha, num_iters)
m = length(y)
J_history = zeros(num_iters, 1)
%num_iters只做声明,在运行阶段赋值,表示迭代次数
theta_s =  theta
%相当于初始化
for iter = 1:num_iters
theta(1) = theta(1) - alpha / m * sum(x * theta_s - y)
theta(2) = theta(2) - alpha / m * sum((x * theta_s - y).* x (:,2))
% .* 是将除了x0以外的所有x都包括进去,而x0=1 不做考虑
% iter = 1:num_iters 表示从1循环到num_iters
theta_s = theta
J_history(iter) = computeCost(x, y, theta)
% 每更新一次,就替换一个J_history中的值,最后会保存下所有J的值
end
J_history
end
绘图函数
function plotData(x, y)
plot(x, y, 'rx')
% rx是有特殊意义的 不信的话可以试一下r是什么效果
end
主函数部分
data = load('文件名.拓展名')
%别忘了要先cd到文件所在目录
x = data(:,1)
y = data(:,2)
m = length(y)
plotData(x, y)
x = [ones(m, 1), data(:,1)]
% 这里不明白的再去百度一下吧,实在不行补一下吴恩达老师的视频,三言两语不太好讲,简要概括就是添加一次函数的常数项
theta =  zeros(2,1)
%有两个theta,所以初始化一个2*1维
iterations = 1500
alpha = 0.01
computeCost(x, y, theta)
theta = gradientDescent(x, y, theta, alpha, iterations)
%这里需要等待一段时间,octave没死机!!
最终结果
hold on
plot(x(:,2), x*theta, '-')

运行过程报错的话主要检查定义函数时有没有拼写错误,
大多数都是因为这个而出的问题。
亲测代码没问题,鼓励新手手打而不是复制,
本人一晚上打了五遍还是有记不住的地方。。。

  • 2
    点赞
  • 7
    收藏
    觉得还不错? 一键收藏
  • 打赏
    打赏
  • 3
    评论

“相关推荐”对你有帮助么?

  • 非常没帮助
  • 没帮助
  • 一般
  • 有帮助
  • 非常有帮助
提交
评论 3
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包

打赏作者

铃灵狗

你的鼓励将是我创作的最大动力

¥1 ¥2 ¥4 ¥6 ¥10 ¥20
扫码支付:¥1
获取中
扫码支付

您的余额不足,请更换扫码支付或充值

打赏作者

实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值