百度360必应搜狗淘宝本站头条
当前位置:网站首页 > 编程字典 > 正文

线性代数投影法在线性回归中的应用

toyiye 2024-04-27 03:47 26 浏览 0 评论

线性回归是一种流行的监督机器学习技术。当关系本身不完善时,需要确定因变量(也称为目标变量)和一个或多个自变量(也称为预测变量)之间的关系。

最小二乘近似方法可用于确定线性回归系数。线性代数用投影很优雅地解决了这个问题。

让我们深入研究线性代数如何解决这个问题

估计的多元线性回归方程可以写成

Y = b0 + b1X1 + b2X2 + ... bnXn

  • Y:响应变量
  • X1:预测变量1
  • X2:预测变量2
  • Xn:预测变量n
  • b0:预测变量1的系数
  • b1:预测变量2的系数
  • bn:预测变量n的系数

矩阵形式

而需要解决的方程是

对于特征矩阵来说应该:m> n

方程组将有一个或零个解。只有当向量b位于由A表示的特征矩阵的列空间时,系统才有解。

通常,对于tall matrix,矩阵A的n列将跨越m维空间的一小部分。因此,大多数情况下的RHS将不在特征矩阵A的列空间中,因此没有解

由上图可知,向量b不属于矩阵A的列张成的列空间[C(A)]

从b到A的列空间的最小距离将是从误差向量e表示的从b到C(A)的垂直向量,因此e将垂直于C(A)

误差向量将表示为

  • 如果e为零,则是Ax = b的精确解
  • 如果e不是零,大多数情况都是如此,e是最小的,则x_hat是最小二乘解。

所以我们的目标是让e尽可能小。

p是b在A [C(A)]的列空间上的投影。因为p在A的列空间中,它可以用它的基向量表示

我们正在寻找C(A)中接近b的投影p,使e尽可能小,最近的点是从向量b到A的列空间的垂直向量

任何x的平方长度

最小意味着|| Ax - b ||的平方长度 最小化

最小二乘解x_hat使得||Ax - b ||的平方长度尽可能小。

因为误差e垂直于列空间,即A的所有列向量根据正交性,这两个垂直向量的点积是零。

我们可以得到

著名的线性方程和最小二乘解是

示例:

找到最接近点(0,6)(1,0)和(2,0)的线。

解:

没有一条直线能通过这三个点。然而,我们可以近似一条最接近所有点的直线,使从所有三个点到直线的误差平方和最小。

设直线方程为Y = b0 + b1 * X

  • 0 = b0 + b1 * 6
  • 1 = b0 + b1 * 0
  • 2 = b0 + b1 * 0

矩阵形式

因此,方程组没有解,因为不在A的列空间中

我们来解最小二乘方程

这些数字是最好的C和D,所以5-3t是3个点的最佳直线

向量b的投影p到A的列空间

让我们看看python的实现

from sklearn.linear_model import LinearRegression 
import numpy as np
def compute_multiple_regression_coeffs1 (X , Y):
 r,c = X.shape
 K = np.ones (shape = (r,1)) 
 # concatenate feature matrix with intercept
 A = np.concatenate ((K , X), axis = 1) 
 AT_A = (A.transpose()).dot(A) 
 AT_A_INV = np.linalg.inv (AT_A) 
 AT_B = (A.transpose()).dot (Y) 
 coeffs = AT_A_INV.dot (AT_B) 
 intercept , slope = coeffs[0][0] , coeffs[1: , 0:]
 return (slope , intercept)
def compute_multiple_regression_coeffs2 (X , Y):
 r,c = X.shape
 K = np.ones (shape = (r,1)) 
 # concatenate feature matrix with intercept
 A = np.concatenate ((K , X), axis = 1) 
 AT_A = (A.transpose()).dot(A) 
 AT_A_INV = np.linalg.inv (AT_A) 
 AT_B = (A.transpose()).dot (Y) 
 coeffs = np.linalg.solve (AT_A , AT_B)
 intercept , slope = coeffs[0][0] , coeffs[1: , 0:]
 return (slope , intercept)
 
 
X1 = np.array ([89,66,78,111,44,77,80,66,109,76])
X2 = np.array ([4,1,3,6,1,3,3,2,5,3])
X3 = np.array ([3.84,3.19,3.78,3.89,3.57,3.57,3.03,3.51,3.54,3.25])
Y = np.array ([7,5.4,6.6,7.4,4.8,6.4,7,5.6,7.3,6.4])
X1 = X1[:,np.newaxis]
X2 = X2[:,np.newaxis]
X3 = X3[:,np.newaxis]
Y = Y [:,np.newaxis]
print (“computing via method 1 \n”)
X123 = np.hstack ([X1 ,X2, X3])
slope,intercept = compute_multiple_regression_coeffs1 (X123 , Y)
print (“Slope : {} “.format(slope))
print (“Intercept : {} \n”.format(intercept))
print (“computing via method 2 \n”)
slope,intercept = compute_multiple_regression_coeffs2 (X123 , Y)
print (“Slope : {} “.format(slope))
print (“Intercept : {} \n”.format(intercept))
print (“Computing coeff via sklearn library \n”)
regressor = LinearRegression() 
regressor.fit(X123, Y) 
print(regressor.intercept_) 
print(regressor.coef_)

输出 :

结论:

该方法既适用于单线性回归,也适用于多元线性回归。与梯度下降法不同,该方法不需要迭代和微调学习参数。但是当特征数变大时,由于公式中出现的倒数项,计算速度变慢

相关推荐

为何越来越多的编程语言使用JSON(为什么编程)

JSON是JavascriptObjectNotation的缩写,意思是Javascript对象表示法,是一种易于人类阅读和对编程友好的文本数据传递方法,是JavaScript语言规范定义的一个子...

何时在数据库中使用 JSON(数据库用json格式存储)

在本文中,您将了解何时应考虑将JSON数据类型添加到表中以及何时应避免使用它们。每天?分享?最新?软件?开发?,Devops,敏捷?,测试?以及?项目?管理?最新?,最热门?的?文章?,每天?花?...

MySQL 从零开始:05 数据类型(mysql数据类型有哪些,并举例)

前面的讲解中已经接触到了表的创建,表的创建是对字段的声明,比如:上述语句声明了字段的名称、类型、所占空间、默认值和是否可以为空等信息。其中的int、varchar、char和decimal都...

JSON对象花样进阶(json格式对象)

一、引言在现代Web开发中,JSON(JavaScriptObjectNotation)已经成为数据交换的标准格式。无论是从前端向后端发送数据,还是从后端接收数据,JSON都是不可或缺的一部分。...

深入理解 JSON 和 Form-data(json和formdata提交区别)

在讨论现代网络开发与API设计的语境下,理解客户端和服务器间如何有效且可靠地交换数据变得尤为关键。这里,特别值得关注的是两种主流数据格式:...

JSON 语法(json 语法 priority)

JSON语法是JavaScript语法的子集。JSON语法规则JSON语法是JavaScript对象表示法语法的子集。数据在名称/值对中数据由逗号分隔花括号保存对象方括号保存数组JS...

JSON语法详解(json的语法规则)

JSON语法规则JSON语法是JavaScript对象表示法语法的子集。数据在名称/值对中数据由逗号分隔大括号保存对象中括号保存数组注意:json的key是字符串,且必须是双引号,不能是单引号...

MySQL JSON数据类型操作(mysql的json)

概述mysql自5.7.8版本开始,就支持了json结构的数据存储和查询,这表明了mysql也在不断的学习和增加nosql数据库的有点。但mysql毕竟是关系型数据库,在处理json这种非结构化的数据...

JSON的数据模式(json数据格式示例)

像XML模式一样,JSON数据格式也有Schema,这是一个基于JSON格式的规范。JSON模式也以JSON格式编写。它用于验证JSON数据。JSON模式示例以下代码显示了基本的JSON模式。{"...

前端学习——JSON格式详解(后端json格式)

JSON(JavaScriptObjectNotation)是一种轻量级的数据交换格式。易于人阅读和编写。同时也易于机器解析和生成。它基于JavaScriptProgrammingLa...

什么是 JSON:详解 JSON 及其优势(什么叫json)

现在程序员还有谁不知道JSON吗?无论对于前端还是后端,JSON都是一种常见的数据格式。那么JSON到底是什么呢?JSON的定义...

PostgreSQL JSON 类型:处理结构化数据

PostgreSQL提供JSON类型,以存储结构化数据。JSON是一种开放的数据格式,可用于存储各种类型的值。什么是JSON类型?JSON类型表示JSON(JavaScriptO...

JavaScript:JSON、三种包装类(javascript 包)

JOSN:我们希望可以将一个对象在不同的语言中进行传递,以达到通信的目的,最佳方式就是将一个对象转换为字符串的形式JSON(JavaScriptObjectNotation)-JS的对象表示法...

Python数据分析 只要1分钟 教你玩转JSON 全程干货

Json简介:Json,全名JavaScriptObjectNotation,JSON(JavaScriptObjectNotation(记号、标记))是一种轻量级的数据交换格式。它基于J...

比较一下JSON与XML两种数据格式?(json和xml哪个好)

JSON(JavaScriptObjectNotation)和XML(eXtensibleMarkupLanguage)是在日常开发中比较常用的两种数据格式,它们主要的作用就是用来进行数据的传...

取消回复欢迎 发表评论:

请填写验证码