基于矩阵求解多元线性回归

2023-11-19

多元线性回归法也是深度学习的内容之一,用java实现一下多元线性回归。

一元线性回归的公式为 y =  a*x + b, 多元线性回归的公式与一元线性回归的公式类似,不过是矩阵的形式,可以表示为Y = AX + b,其中,Y是样本输出的合集,X是样本输入的合集。

多元线性回归最终求解的内容也就是 A 和 B, 这里省去求证步骤,直接列出求解 A 和 B 矩阵的公式,公式如下:

这里的X是样本输入的合集,是二维矩阵,Y是样本输出的合集,是一维矩阵。

可以看到,这里要求解两次,先将 A 求出来,再将 b 求出来,这样会增加计算量,也增加了编程时的困难,实际上,如果我们将多元线性回归的方程展开来看:


可以看到,如果我们将 b <=> a0 , 那么线性回归方程可以表示为:



这样的话,矩阵的求解公式可以表示为:


这里的 X 是一个新的矩阵,增加了“第零列”元素,该列元素全部设置为1。

现在可以进行编程,编程过程可以分为两步,第一步,给 X 矩阵增加“第零列”, 第二步, 求解 A 矩阵。

第一步的代码如下,这里我设置了一个多元线性回归类,将传进来的 X 和 Y,赋值给类中的 X 和 Y:

	/**如果采用无参构造,则需要通过set输入相应的矩阵
	 * @param X x的矩阵
	 * @param Y y的矩阵
	 */
	public void set(double X[][], double Y[]){
		this.X = new double[X.length][X[0].length + 1];
		for(int i = 0; i < X.length; i++){
			this.X[i][0] = 1;
			for(int j = 0; j < X[0].length; j++){
				this.X[i][j + 1] = X[i][j];
			}
		}
		this.Y = Y;
	}
完成后,求解 A 矩阵, 因为公式是矩阵形式,所以直接采用设计好的矩阵计算类进行求解,这里用到的主要是矩阵的转置,求逆以及矩阵的乘法,矩阵求逆和乘法在之前的两篇博客中列出,矩阵求逆: 点击打开链接,矩阵的乘法: 点击打开链接,因为这次计算只需要用到二维矩阵的转置,所以这里只列出二维矩阵的转置:
	/**求转置矩阵
	 * @param A 要求解的矩阵
	 * @return 转置矩阵
	 */
	public double[][] matrix_transpoistion(double A[][]){
		int row = A.length; 
		int col = A[0].length;
		double A_T[][] = new double[col][row];
		for(int i = 0; i < row; i++){
			for(int j = 0; j < col; j++){
				A_T[j][i] = A[i][j];
			}
		}
		return A_T;
	}

A 矩阵的求解公式列在这里:


也就是说,整个求解过程分为五步,(1)求转置,(2)转置与原矩阵的乘积,(3)乘积的逆,(4)结果乘矩阵的转置,(5)结果乘输出矩阵,考虑到 X 的转置要用两次,可以预设一个 X_T 矩阵,保存 X 的转置,整个求解过程的实现代码如下:
	/**计算相应的系数
	 * @return 包含b的系数组
	 */
	public double[] cal_coefficient(){
		int row = X.length;
		int col = X[0].length;
		//使用矩阵计算相应结果
		Matrix_cal mc = new Matrix_cal();
		//求X的转置
		double X_T[][] = mc.matrix_transpoistion(X);
		//求XT*X;
		mc.set(X_T);
		double temp[][] = mc.matrix_multriple(X);
		//求逆矩阵
		if(temp.length > 1){
			//如果X_T*X的矩阵行列数不为1
			mc.set(temp);
			temp = mc.inverse_Matrix();
		}
		else{
			//如果矩阵行列式为1,则temp不变
			temp[0][0] = 1/temp[0][0];
		}
		//求temp*X_T;
		mc.set(temp);
		temp = mc.matrix_multriple(X_T);
		//mc.show(temp);
		//求temp*Y
		mc.set(temp);
		B = mc.matrix_multriple(Y);
		return B;
	}
}
这里的 Matrix_cal,是我之前所写的一个基本的矩阵运算类,最后返回的结果是一个一维矩阵,也就是需要计算的 A。 


本文内容由网友自发贡献,版权归原作者所有,本站不承担相应法律责任。如您发现有涉嫌抄袭侵权的内容,请联系:hwhale#tublm.com(使用前将#替换为@)

基于矩阵求解多元线性回归 的相关文章

  • 如何在 Spring Data 中选择不同的结果

    我在使用简单的 Spring Data 查询或 Query 或 QueryDSL 在 Spring Data 中构建查询时遇到问题 如何选择三列 研究 国家 登录 不同的行 并且查询结果将是用户对象类型的列表 Table User Id S
  • JDK 文档是语言规范的一部分吗?

    只有一名官员Java语言规范 https docs oracle com javase specs jls se8 html index html所有 Java 实现都必须遵守它 API文档怎么样 所有Java实现都需要遵守吗这个版本 ht
  • 如何在 Firebase 远程配置中从 JSON 获取值

    我是 Android 应用开发和 Firebase 的新手 我想知道如何获取存储在 Firebase 远程配置中的 JSONArray 文件中的值 String 和 Int 我使用 Firebase Remote Config 的最终目标是
  • 使用 GWT 读取非常大的本地 XML 文件

    我正在使用 GWT 构建我的第一个 Java 应用程序 它必须从一个非常大的 XML 文件中读取数据 当我尝试发送对文件中信息的请求时遇到问题 并且我不太确定它是否与文件的大小或我的语义有关 在我的程序中 我有以下内容 static fin
  • 打印星号的 ASCII 菱形

    我的程序打印出这样的钻石 但只有当参数或菱形的每一面为4 例如如果我输入6 底部三角形的间距是错误的 我一直在试图找出答案 当参数改变时 底部的三角形不会改变 只有顶部的三角形会改变 它只适用于输入4 public static void
  • Spring Data JPA 选择不同

    我有一个情况 我需要建立一个select distinct a address from Person a 其中地址是 Person 内的地址实体 类型的查询 我正在使用规范动态构建我的 where 子句并使用findAll Specifi
  • Spring Boot自动装配存储库始终为空[重复]

    这个问题在这里已经有答案了 每次我进入我的服务类时 存储库似乎都没有自动连接 因为它不断抛出 NullPointerException 谁能帮我检查一下我缺少什么吗 这是我的代码 演示应用程序 java package com exampl
  • 如何将 Mat (opencv) 转换为 INDArray (DL4J)?

    我希望任何人都可以帮助我解决这个任务 我正在处理一些图像分类并尝试将 OpenCv 3 2 0 和 DL4J 结合起来 我知道DL4J也包含Opencv 但我认为它没什么用 谁能帮我 如何转换成 INDArray 我尝试阅读一些问题here
  • 如何使用 Hibernate (EntityManager) 或 JPA 调用 Oracle 函数或过程

    我有一个返回 sys refcursor 的 Oracle 函数 当我使用 Hibernate 调用该函数时 出现以下异常 Hibernate call my function org hibernate exception Generic
  • 在另一个模块中使用自定义 gradle 插件模块

    我正在开发一个自定义插件 我希望能够在稍后阶段将其部署到存储库 因此我为其创建了一个独立的模块 在对其进行任何正式的 TDD 之前 我想手动进行某些探索性测试 因此 我创建了一个使用给定插件的演示模块 到目前为止 我发现执行此操作的唯一方法
  • 了解joda时间PeriodFormatter

    我以为我明白了 但显然我不明白 你能帮我通过这些单元测试吗 Test public void second assertEquals 00 00 01 OurDateTimeFormatter format 1000 Test public
  • Java实现累加器类,提供Collector

    A Collector具有三种通用类型 public interface Collector
  • Freemarker 和 Struts 2,有时它计算为序列+扩展哈希

    首先我要说的是 使用 Struts2 Freemarker 真是太棒了 然而有些事情让我发疯 因为我不明白为什么会发生这种情况 我在这里问是因为也许其他人有一个想法可以分享 我有一个动作 有一个属性 说 private String myT
  • 流中的非终结符 forEach() ?

    有时 在处理 Java Stream 时 我发现自己需要一个非终端 forEach 来触发副作用但不终止处理 我怀疑我可以用 map item gt f item 之类的方法来做到这一点 其中方法 f 执行副作用并将项目返回到流中 但这似乎
  • 在 SWT/JFace RCP 应用程序中填充巨大的表

    您将如何在 SWT 表中显示大量行 巨大是指超过 20K 行 20 列的东西 不要问我为什么需要展示那么多数据 这不是重点 关键是如何让它尽可能快地工作 这样最终用户就不会厌倦等待 每行显示某个对象的实例 列是其属性 一些 我想使用 JFa
  • 如何在 Java 中创建接受多个值的单个注释

    我有一个名为 Retention RetentionPolicy SOURCE Target ElementType METHOD public interface JIRA The Key Bug number JIRA referenc
  • Spring-ws:如何从没有“Request”元素的 xsd 创建 Wsdl

    尝试为客户端实现 SOAP Web 服务 我需要一个 wsdl 文件来通过soapUI 测试该服务 但正如您在下面看到的 这个 xsd 没有 Request 和 Response 方法 所有请求和响应都被定义为基本 ServiceProvi
  • 配置“DataSource”以使用 SSL/TLS 加密连接到 Digital Ocean 上的托管 Postgres 服务器

    我正在尝试托管数据库服务 https www digitalocean com products managed databases on 数字海洋网 https en wikipedia org wiki DigitalOcean 创建了
  • Java EE 目录结构

    我对以下教程有疑问 http www mkyong com jsf2 jsf 2 internationalization example http www mkyong com jsf2 jsf 2 internationalizatio
  • 在java中使用多个bufferedImage

    我正在 java 小程序中制作游戏 并且正在尝试优化我的代码以减少闪烁 我已经实现了双缓冲 因此我尝试使用另一个 BufferedImage 来存储不改变的游戏背景元素的图片 这是我的代码的相关部分 public class QuizApp

随机推荐

  • JavaFX打包为exe文件

    JavaFX打包为exe文件 传统的Java打包为exe文件是先打包成 jar的可执行文件 再用exe4j打包为exe文件 可以参考Java项目打包成exe的详细教程 Jepson6669 博客园 cnblogs com 该方法较为繁琐 而
  • 机器学习之集成学习(实验记录)

    集成学习实验任务 一 实验目标 二 实验内容 三 实验任务及步骤 四 实验总结 一 实验目标 了解集成学习的基本结构 训练方法 实现方法 并通过随机森林与Adaboost算法加深理解 二 实验内容 概念 集成学习 Ensemble lear
  • C++ 一个类访问另一个类的私有成员和保护成员

    友元类 class A friend class B private int aa class B public void output cout lt lt a aa lt lt endl private A a 使用友元类时注意 1 友
  • 前端开发行业真的会被AI取代吗?

    作者 殷圣魁 来源 58架构师 ID architects 58 前言 相信不少人看过一篇人工智能已经能实现自动编写HTML CSS的文章 人工智能开始取代前端的一部分工作 前端开发行业真的被人工智能取代吗 人工智能发展确实速度惊人 但是前
  • 微信开工具报getLocation:fail, the permission value is offline verifying

    解决办法是 部署到服务器就能获取到了
  • 知道用户画像标签有哪些维度、应用场景体系?是种什么样的体验

    相关文章 用户画像 3种标签类型 8大系统模块 用户运营 怎么分析用户活跃 指标波动 用户分析 店铺数据分析 小程序数据分析 思维导图 数据分析全知识 思维导图 Xmind思维导图 常用快捷键使用 本文参考 本文仅作学习分享 侵删 作者 赵
  • 非递归算法——快速排序、归并排序

    哈喽大家好 我是保护小周 本期为大家带来的是常见排序算法中的快速排序 归并排序 非递归算法 分享所有源代码 粘贴即可运行 保姆级讲述 包您一看就会 快来试试吧 目录 一 递归的缺陷 1 1 栈是什么 数据结构 栈 又是什么 他们之间有什么区
  • Python保存数据到已存在的excel文件中【openpyxl / pandas】复制表格中的所有sheet到另一个表格

    大家早上好 本人姓吴 如果觉得文章写得还行的话也可以叫我吴老师 欢迎大家跟我一起走进数据分析的世界 一起学习 感兴趣的朋友可以关注我的数据分析专栏 里面有许多优质的文章跟大家分享哦 前段时间在工作的时候遇到了一个问题 如何将数据保存到已存在
  • 资深架构师分享:10个 Javascript 小技巧帮你提升代码质量

    主要介绍以下几点 提炼函数 合并重复的条件片段 把条件分支语句提炼成函数 合理使用循环 提前让函数退出代替嵌套条件分支 传递对象参数代替过长的参数列表 少用三目运算符 合理使用链式调用 分解大型类 本文会不断更新 不足之处欢迎评论区补充 1
  • 如果我是java面试官,会对面试者提问哪些问题

    作为一名Java面试官 可能会问面试者有关Java的基础知识 比如Java的可扩展性 可重用性和安全性 以及Java的技术和工具 如Java虚拟机 Java类库和Java开发工具 此外 还可以就面试者的个人背景和Java经验提问 比如他们在
  • linux安装ffmpeg

    1 下载解压 wget http www ffmpeg org releases ffmpeg 3 1 tar gz tar zxvf ffmpeg 3 1 tar gz 2 进入解压后目录 输入如下命令 usr local ffmpeg为
  • 微软七届MVP桂素伟:移动互联网与职业规划

    原文地址 http student csdn net mcd topic 163587 955481 2014年10月19日在哈尔滨工业大学举办了CSDN高校俱乐部全国巡讲 此次邀请到了微软七届MVP和山西 Net俱乐部创始人桂素伟 他擅长
  • lua调用不同lua文件中的函数

    a lua和b lua在同一个目录下 a lua调用b lua中的test方法 注意b中test的写法 M 和 a中调用方法 b lua local M function M test ngx say hello test end retu
  • 要面试了,写写小程序练练手,顺便记录一下

    1 大数相乘 int i 0 j 0 tmp 0 define MAX A 12 define MAX B 10 void main int i 0 j 0 tmp 0 int a MAX A 1 2 3 4 5 6 7 8 9 1 2 3
  • 【DockerCE】使用Docker安装运行性能测试工具-RunnerGo

    一 安装环境 CentOS 7 9 Docker CE 23 0 1 Docker compose 2 17 2 二 资源配置 4核8G 官方建议8核16GB 三 安装运行 从Github下载安装所需的文件包 版本1 0 3 这里选择的是t
  • 《MySQL实战45讲》读后感 06

    收获到的知识点 MySQL里面的锁大致可以分成全局锁 表级锁和行锁三类 全局锁 加全局锁的方法一 flush tables with read lock FTWRL 当你需要整个库处于只读状态的时候 可以使用这个命令 之后其它的线程会被阻塞
  • 智能检测与控制

    智能检测与控制在智能工厂各层次中的应用 智能工厂各层次定义的功能以及各种系统 设备在不同层次上的分配如下 1 计划层 实现面向企业的经营管理 如接收订单 建立基本生产计划 如原料使用 交货 运输 确定库存等级 保证原料及时到达正确的生产地点
  • MATLAB金融工具箱(二)--执行常见的金融任务

    二 执行常见的金融任务 1 简介 金融工具箱包含了可以执行许多常见的金融任务的函数 包括 l 处理和转换日期 2 4页 日历功能可以将日期在不同格式之间进行转换 包括Excel格式 并决定未来和过去的日期 分辨假期和工作日 计算日期之间的时
  • 【Qt开发】编译时报"undefined reference to"问题的解决方案

    1 出现原因分析 Undefined reference to 错误 这类错误是在连接过程中出现的 可能有两种原因 1 是使用者自己定义的函数或者全局变量所在源代码文件 没有被编译 连接 2 干脆还没有定义 这需要使用者根据实际情况修改源程
  • 基于矩阵求解多元线性回归

    多元线性回归法也是深度学习的内容之一 用java实现一下多元线性回归 一元线性回归的公式为 y a x b 多元线性回归的公式与一元线性回归的公式类似 不过是矩阵的形式 可以表示为Y AX b 其中 Y是样本输出的合集 X是样本输入的合集