线性回归算法 php实现,PHP实现多元线性回归模拟曲线算法步骤详解

article/2025/9/21 15:08:40

这次给大家带来PHP实现多元线性回归模拟曲线算法步骤详解,PHP实现多元线性回归模拟曲线算法的注意事项有哪些,下面就是实战案例,一起来看一下。

多元线性回归模型: y = b1x1 + b2x2 + b3x3 +...... +bnxn;

我们根据一组数据: 类似 arr_x = [[1, 2, 3, 4, 5], [6, 7, 8, 9, 10], [11, 12, 13, 14, 15]]; arr_y = [5, 10, 15]; 我们最后要求出的是一个数组,包含了从b1 到bn;

方法:利用最小二乘法

公式:

92e372c47d0b91c4143acfc5e30013f0.png我们只用公式的前半部分,也就是用矩阵来计算

式中的X就是arr_x,二维数组我们可以把它看成是一个矩阵,式中的y就是arr_y,也把它看成一个矩阵(5, 10, 15) ,不过应该是竖着写的。

然后可以根据公式我们会发现要用到矩阵的相乘,转置,求逆;所以下面的代码一一给出:public function get_complement($data, $i, $j) {

/* x和y为矩阵data的行数和列数 */

$x = count($data);

$y = count($data[0]);

/* data2为所求剩余矩阵 */

$data2 =[];

for ($k = 0; $k < $x -1; $k++) {

if ($k < $i) {

for ($kk = 0; $kk < $y -1; $kk++) {

if ($kk < $j) {

$data2[$k][$kk] = $data[$k][$kk];

} else {

$data2[$k][$kk] = $data[$k][$kk +1];

}

}

} else {

for ($kk = 0; $kk < $y -1; $kk++) {

if ($kk < $j) {

$data2[$k][$kk] = $data[$k +1][$kk];

} else {

$data2[$k][$kk] = $data[$k +1][$kk +1];

}

}

}

}

return $data2;

}

/* 计算矩阵行列式 */

public function cal_det($data) {

$ans = 0;

if (count($data[0]) === 2) {

$ans = $data[0][0] * $data[1][1] - $data[0][1] * $data[1][0];

} else {

for ($i = 0; $i < count($data[0]); $i++) {

$data_temp = $this->get_complement($data, 0, $i);

if ($i % 2 === 0) {

$ans = $ans + $data[0][$i] * ($this->cal_det($data_temp));

} else {

$ans = $ans - $data[0][$i] * ($this->cal_det($data_temp));

}

}

}

return $ans;

}

/*计算矩阵的伴随矩阵*/

public function ajoint($data) {

$m = count($data);

$n = count($data[0]);

$data2 =[];

for ($i = 0; $i < $m; $i++) {

for ($j = 0; $j < $n; $j++) {

if (($i + $j) % 2 === 0) {

$data2[$i][$j] = $this->cal_det($this->get_complement($data, $i, $j));

} else {

$data2[$i][$j] = - $this->cal_det($this->get_complement($data, $i, $j));

}

}

}

return $this->trans($data2);

}

/*转置矩阵*/

public function trans($data) {

$i = count($data);

$j = count($data[0]);

$data2 =[];

for ($k2 = 0; $k2 < $j; $k2++) {

for ($k1 = 0; $k1 < $i; $k1++) {

$data2[$k2][$k1] = $data[$k1][$k2];

}

}

/*将矩阵转置便可得到伴随矩阵*/

return $data2;

}

/*求矩阵的逆,输入参数为原矩阵*/

public function inv($data) {

$m = count($data);

$n = count($data[0]);

$data2 =[];

$det_val = $this->cal_det($data);

$data2 = $this->ajoint($data);

for ($i = 0; $i < $m; $i++) {

for ($j = 0; $j < $n; $j++) {

$data2[$i][$j] = $data2[$i][$j] / $det_val;

}

}

return $data2;

}

/*求两矩阵的乘积*/

public function getProduct($data1, $data2) {

/*$data1 为左乘矩阵*/

$m1 = count($data1);

$n1 = count($data1[0]);

$m2 = count($data2);

$n2 = count($data2[0]);

$data_new =[];

if ($n1 !== $m2) {

return false;

} else {

for ($i = 0; $i <= $m1 -1; $i++) {

for ($k = 0; $k <= $n2 -1; $k++) {

$data_new[$i][$k] = 0;

for ($j = 0; $j <= $n1 -1; $j++) {

$data_new[$i][$k] += $data1[$i][$j] * $data2[$j][$k];

}

}

}

}

return $data_new;

}

/*多元线性方程*/

public function getParams($arr_x, $arr_y) {

$final =[];

$arr_x_t = $this->trans($arr_x);

$result = $this->getProduct($this->getProduct($this->inv($this->getProduct($arr_x_t, $arr_x)), $arr_x_t), $arr_y);

foreach ($result as $key => $val) {

foreach ($val as $_k => $_v) {

$final[] = $_v;

}

}

return $final;

}

最后的getParams()方法就是最后求b参数数组的方法,传入一个二维数组arr_x, 和一个一维数组arr_y就可以了。

相信看了本文案例你已经掌握了方法,更多精彩请关注php中文网其它相关文章!

推荐阅读:


http://chatgpt.dhexx.cn/article/SMIsUHU5.shtml

相关文章

统计学考研笔记:回归方程计算题

题1: 利用某公司的年销售额Y与个人支配收入&#xff0c;商品价格&#xff0c;广告费的历年统计数据&#xff0c;研究Y关于&#xff0c;&#xff0c;的回归关系&#xff0c;得到回归方程为: Y 3573.879 6.687-25.051 9.316 (1981.741) (1.192) (24.515) (2.73…

一元一次线性回归详解

一元一次线性回归 作为机器学习的入门课程&#xff0c;线性回归是我们必须要学习的第一个算法。今天我们就来详细的讲解一下线性回归。 在讲解之前&#xff0c;我们先来解释以下几个问题。 可为线性&#xff1f;线性是指自变量x和因变量y之间是线性的关系&#xff0c;即图像…

线性回归之梯度下降详解

在了解梯度下降&#xff08;Gradient Descent&#xff09;之前&#xff0c;我们先要知道有关线性回归的基本知识&#xff0c;这样可以进一步的加深对梯度下降的理解&#xff0c;当然梯度下降&#xff08;Gradient Descent&#xff09;并不单单只能进行回归预测&#xff0c;它还…

【机器学习】线性回归——最小二乘法(理论+图解+公式推导)

&#x1f320; 『精品学习专栏导航帖』 &#x1f433;最适合入门的100个深度学习实战项目&#x1f433;&#x1f419;【PyTorch深度学习项目实战100例目录】项目详解 数据集 完整源码&#x1f419;&#x1f436;【机器学习入门项目10例目录】项目详解 数据集 完整源码&…

线性回归例题解析

前往我的主页以获得更好的阅读体验线性回归例题解析 - DearXuan的主页https://blog.dearxuan.com/2022/03/23/%E7%BA%BF%E6%80%A7%E5%9B%9E%E5%BD%92%E4%BE%8B%E9%A2%98%E8%A7%A3%E6%9E%90/ 例题 调查某市出租车使用年限和该年支出维修费用&#xff08;万元&#xff09;&#…

windows计算机管理快捷键,windows系统常见快捷键大全

熟练电脑键盘快捷键有助于提供办公效率&#xff0c;但是对于一些职场的电脑小白来说&#xff0c;什么都不会&#xff0c;几分钟的工作需要几个小时来完成&#xff0c;如何在职场上立足呢&#xff1f;下面小编给您整理了常见的windows快捷键大全&#xff0c;让你的高效办公&…

桌面计算机休眠快捷键,电脑休眠唤醒快捷键

设置电脑休眠唤醒快捷键的方法 1、在电脑桌面空白处点击右键。 2、在新建列表中选择新建快捷方式。 3、在键入对象的位置栏中&#xff0c;输入rundll32.exe? powrprof.dll,SetSuspendState Hibernate。创建一个休眠命令。 4、把快捷方式的名字改为休眠即可。 设置电脑休眠键的…

修改PyCharm的快捷键

有的电脑系统中&#xff0c;按下一些PyCharm组合键可能会无法起作用&#xff0c;这是因为可能和当前系统的其他软件快捷键发生了冲突。 大家有需要可以更改下默认的快捷键&#xff0c;下面以Ctrl空格的自动代码补齐快捷键为例&#xff0c;方法是选择File——Settings&#xff…

调整计算机屏幕亮度快捷键,笔记本亮度调节的快捷键

现在小伙伴们使用电脑的时间越来越多&#xff0c;长时间使用电脑&#xff0c;对我们的眼睛伤害很大。建议大家使用一两个小时的电脑就要停下来休息10分钟&#xff0c;眺望远方。除此之外&#xff0c;电脑屏幕亮度的控制也是很有必要的。但是笔记本亮度调节的快捷键怎么使用呢&a…

立创eda快捷键

默认的快捷键列表如下。共用快捷键文档类型快捷键功能所有Space(空格键)旋转所选图形所有鼠标右键长按右键拖动画布&#xff1b;操作过程中按一下右键释放操作’所有Left向左滚动或左移所选图形所有Right向右滚动或右移所选图形所有Up向上滚动或上移所选图形所有Down向下滚动或…

Pycharm 常用快捷键 for Mac

格式化代码&#xff1a; command option L多行合并一行&#xff1a;control shift J快速注释/取消注释&#xff1a;crtl /鼠标指针上方插入空行&#xff1a;command option enter鼠标指针下方插入空行&#xff1a;shift enter上下移动选中代码&#xff1a; shift opti…

常用Windows快捷键大全

0. 简要 要将电脑玩的溜&#xff0c;快捷键是必须要掌握的技能&#xff0c;本文汇总了一些常用的快捷键&#xff0c;相信加以练习&#xff0c;一定能提高你的工作效率。 笔者将常用快捷键分为四个系列&#xff0c;如下所示&#xff1a; Win 系列Ctrl 系列Alt 系列F 系列 本…

vscode 快捷键 删除当前行

vscode 快捷键删除当前行默认的是 ctrlshiftk 但是会与搜狗输入法的快捷键冲突 解决办法 1.更换其他输入法 2.修改搜狗输入法的快捷键 3.修改vscode 快捷键 &#xff0c;改成自己舒服的 修改vscode快捷键方法

计算机删除行快捷键,删除快捷键是什么?电脑删除快捷键有哪些?

在使用电脑的时候&#xff0c;除了鼠标之外&#xff0c;就是键盘最常用了。而在我们的日常操作中&#xff0c;为了操作更加方便&#xff0c;就有了快捷键。快捷键又称热键&#xff0c;指可以通过某些特定的按键和按键顺序及其组合来完成一项操作&#xff0c;多和Ctrl、Shift、A…

如何理解矩阵特征值

&#xff08;下面的回答只涉及实数范围&#xff09;。 关于特征值、特征向量可以讲的确实很多&#xff0c;我这里希望可以给大家建立一个直观的印象。 先给一个简短的回答&#xff0c;如果把矩阵看作是运动&#xff0c;对于运动而言&#xff0c;最重要的当然就是运动的速度和方…

矩阵特征值的求解例子

请点击上面公众号&#xff0c;免费订阅。  《实例》阐述算法&#xff0c;通俗易懂&#xff0c;助您对算法的理解达到一个新高度。包含但不限于&#xff1a;经典算法&#xff0c;机器学习&#xff0c;深度学习&#xff0c;LeetCode 题解&#xff0c;Kaggle 实战。期待您的到来&…

矩阵和特征值的本质

理解矩阵和特征向量的本质 原文地址 最近复习矩阵论中&#xff0c;又是一堆定理和证明突然发现学了这么常时间的矩阵论、线性代数&#xff0c;记住的只是一堆莫名其妙的定理而已&#xff0c;一些本质的东西都没有搞清楚。 比如&#xff0c;为什么要有矩阵&#xff0c;它仅仅是…

MATLAB矩阵的特征值与特征向量

1.矩阵特征值的数学定义 设A是n阶方阵&#xff0c;如果存在常数λ和n维非零列向量x&#xff0c;使得等式Ax λx 成立&#xff0c;则称λ为A的特征值&#xff0c;x是对应特征值λ的特征向量。 2.求矩阵的特征值与特征向量 在MATLAB中&#xff0c;计算矩阵的特征值与特征向量的…

线性代数教程 矩阵的特征值

CSDN 的文档显示有一些问题&#xff0c;一些数学符号显示不正确&#xff0c;想看 word文档 的可以移步到 github &#xff1a; LearningDocuments/学习资料/平台无关/线性代数 at master IceEmblem/LearningDocuments GitHub 矩阵的特征值与特征向量 特征值与特征向量 对于…

矩阵的特征值与特征向量 求解

矩阵特征值 定义1&#xff1a;设A是n阶矩阵&#xff0c;如果数和n维非零列向量使关系式成立&#xff0c;则称这样的数成为方阵A的特征值&#xff0c;非零向量成为A对应于特征值的特征向量。 说明&#xff1a;1、特征向量&#xff0c;特征值问题是对方阵而言的。 2、n阶方阵A的…