多项式拟合——正规方程法

前言

这几天师哥给我布置多项式拟合的作业,可我只是一个大一菜鸡,只会一点点c++(T_T)胖虎好帅
在b站看了几天吴老大(吴恩达)的机器学习视频,好不容易打出了梯度下降结果
在这里插入图片描述

连我的电脑都觉得南

在这里插入图片描述

面对精度问题手足无措的我选择投向正规方程法的怀抱

正文开始 如果看不懂那就去看吴恩达机器学习的视频吧

一、一个方程

在这里插入图片描述
其中θ为参数矩阵,X为训练样本自变量的矩阵,Y为训练样本的答案矩阵
有了这个方程,我们可以直接求解出多项式拟合的参数
为了实现这个方程,我们得写出以下几个函数

  1. 矩阵乘法
  2. 矩阵转置
  3. 矩阵求逆
    我自定义了一个结构体
struct ma
{
   
 double matrix[nn][mm];
 int line,row;
};

line与row代表矩阵的行和列

二、算法实现

1、矩阵乘法

一个大小为N * U 的矩阵A与一个U * M的矩阵B相乘,会得到一个N*M的矩阵C
C内元素与A、B内元素的关系为:
在这里插入图片描述
看不懂的小同学补补线性代数就可以了
因此,可以得到

for(int i=0;i<ll;i++)
  for(int j=0;j<rr;j++)
   for(int k=0;k<uu;k++)
    C.matrix[i][j]+=A.matrix[i][k]*B.matrix[k][j];

为了方便,使用重载运算符

ma operator * (ma A,ma B)//矩阵乘法 
{
   
 int ll=A.line,rr=B.row,uu=A.row;
 ma C;memset(C.matrix
  • 2
    点赞
  • 4
    收藏
    觉得还不错? 一键收藏
  • 0
    评论

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

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

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

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

余额充值