当前位置: 首页 > 知识库问答 >
问题:

三维线性回归

阎智
2023-03-14

我想写一个程序,给定三维空间中的点列表,用浮点表示为x,y,z坐标的数组,在这个空间中输出一条最佳拟合线。直线可以/应该是单位向量和直线上的点的形式。

问题是我不知道这是怎么做的。我发现的最接近的东西是这种联系,尽管老实说,我不明白他是如何从一个方程到另一个方程的,当我们到达矩阵时,我已经迷失了。

有没有一个简单的二维线性回归的泛化,我可以使用/有人可以(数学上)解释上面的链接到方法是否/如何工作(以及如何使用它来计算最佳拟合线)?

共有3个答案

商绍元
2023-03-14

这可以通过NPM ml矩阵一衬板实现:

const { Matrix, solve } = require('ml-matrix');

solve(this.DataX, Matrix.columnVector(this.DataY[0]));
乔宏峻
2023-03-14

伟大的答案@WaTeim

下面是我在python中为那些需要它的人所做的贡献。与提供的数值示例一起使用

def regr(X):
    y= np.average(X, axis=0)
    Xm = X-y
    u, s, v = np.linalg.svd((1./X.shape[0])*np.matmul(Xm.T,Xm))

    # Extra Credit: Going back
    z= np.matmul(u[:,0].T, Xm.T)
    c = np.array([z*n for n in u[:,0]])
    d = np.array(y.tolist()*c.shape[1]).reshape(c.shape[1],-1).T
    e = (c+d).T
    return u,s,v

regr(np.array([[6, 4, 11],[8,5,15],[12,9,25],[2,1,3]]))

顺便问一下,谁能告诉我为什么numpy是np。cov()给出的结果与1不同/X.shape[0])*np。matmul(Xm.T,Xm)???

燕正德
2023-03-14

N维线性回归有一个标准公式,由

假设数据点(6,4,11)=20,(8,5,15)=30,(12,9,25)=50,(2,1,3)=7。那样的话

julia> X = [1 6 4 11; 1 8 5 15; 1 12 9 25; 1 2 1 3]
4x4 Array{Int64,2}:
 1   6  4  11
 1   8  5  15
 1  12  9  25
 1   2  1   3

julia> y = [20;30;50;7]
4-element Array{Int64,1}:
 20
 30
 50
  7

julia> T = pinv(X'*X)*X'*y
4-element Array{Float64,1}:
  4.0
 -5.5
 -7.0
  7.0

验证。。。

julia> 12*(-5.5) + 9*(-7.0) + 25*(7) + 4
50.0

在Julia、Matlab和倍频程矩阵中,只需使用*即可相乘,而转置运算符为“”。请注意,我在这里使用了pinv(伪逆),当数据太冗余并导致不可逆的X-XTTranspose时,这是必要的(这次不是),如果您选择自己实现矩阵逆,请记住这一点。

主成分分析(PCA)是一种降维技术,其目标是从n维空间中找到一个k维空间,从而使投影误差最小化。在一般情况下,n和k是任意的,但在这种情况下,n=3和k=1。有4个主要步骤。

要使标准方法发挥作用,必须首先执行均值归一化,并可能对数据进行缩放,以便算法不会因浮点错误而失败。在后一种情况下,这意味着如果一个维度的值相对于另一个维度的范围很大,那么可能会出现问题(比如一个维度中的-1000到1000,而不是-0.1到0.2)。但通常他们离得很近。平均值标准化简单地说,对于每个维度,从每个数据点减去平均值,以便生成的数据集以原点为中心。获取结果并将每个数据点(x1,x2,…xn)作为一行存储在一个大矩阵X中。

X = [ 6 4 11; 8 5 15; 12 9 25; 2 1 3]
4x3 Array{Int64,2}:
  6  4  11
  8  5  15
 12  9  25
  2  1   3

找出平均数

y = convert(Array{Float64,1},([sum(X[1:4,x]) for x = 1:3])/4')
3-element Array{Float64,1}:
  7.0 
 4.75
 13.5 

正常化...

julia> Xm = X .- y'
4x3 Array{Float64,2}:
 -1.0  -0.75   -2.5
  1.0   0.25    1.5
  5.0   4.25   11.5
 -5.0  -3.75  -10.5

协方差矩阵σ是简单的

其中m是数据点的数量。

在这里,最好只找到一个库,它取协方差矩阵并吐出答案。有很多,这里是其中的一些;在Python中,在R中,在Java中,当然在Octave,Julia,Matlab(像R)中,这是另一个线性svd。

对协方差矩阵进行SVD

(U,S,V) = svd((1/4)*Xm'*Xm);

获取第一个组件(对于k个维度,您将获取第一个k个组件)

Ureduce = U[:,1]
3-element Array{Float64,1}:
 -0.393041
 -0.311878
 -0.865015

这是使投影误差最小的线

您甚至可以恢复原始值的近似值,但它们将全部排列并投影在同一条线上。将这些点连接起来,得到一条线段。

获得X中每个数据点的缩减维数(因为1-D将每个值为1):

z= Ureduce' * Xm'
1x4 Array{Float64,2}:
2.78949  -1.76853  -13.2384  12.2174

往回走;原始值,但都位于同一条(最佳)线上

julia> (Ureduce .* z .+ y)'
4x3 Array{Float64,2}:
  5.90362  3.88002   11.0871                         6  4  11
  7.69511  5.30157   15.0298      versus             8  5  15
 12.2032   8.87875   24.9514                        12  9  25
  2.19806  0.939664   2.93176                        2  1   3
 类似资料:
  • 一个表示三维线段的曲线。 构造函数 LineCurve3( v1 : Vector3, v2 : Vector3 ) v1 – 起点 v2 - 终点 属性 共有属性请参见其基类Curve。 .v1 : Vector3 起点 .v2 : Vector3 终点 方法 共有方法请参见其基类Curve。 源代码 src/extras/curves/LineCurve3.js

  • 本文向大家介绍PyTorch搭建一维线性回归模型(二),包括了PyTorch搭建一维线性回归模型(二)的使用技巧和注意事项,需要的朋友参考一下 PyTorch基础入门二:PyTorch搭建一维线性回归模型 1)一维线性回归模型的理论基础 给定数据集,线性回归希望能够优化出一个好的函数,使得能够和尽可能接近。 如何才能学习到参数和呢?很简单,只需要确定如何衡量与之间的差别,我们一般通过损失函数(Lo

  • 用起点和终点表示的几何线段。 构造器(Constructor) Line3( start : Vector3, end : Vector3 ) start - 线段的起始点。默认值为 (0, 0, 0)。 end - 线段的终点。默认值为 (0, 0, 0)。 创建一个三维几何线段 Line3。 属性(Properties) .start : Vector3 Vector3 表示线段的起点。 .e

  •   回归问题的条件或者说前提是 1) 收集的数据 2) 假设的模型,即一个函数,这个函数里含有未知的参数,通过学习,可以估计出参数。然后利用这个模型去预测/分类新的数据。 1 线性回归的概念   线性回归假设特征和结果都满足线性。即不大于一次方。收集的数据中,每一个分量,就可以看做一个特征数据。每个特征至少对应一个未知的参数。这样就形成了一个线性模型函数,向量表示形式:   这个就是一个组合问题,

  • 创建一条平滑的三维 三次贝塞尔曲线, 由起点、终点和两个控制点所定义。 代码示例 const curve = new THREE.CubicBezierCurve3( new THREE.Vector3( -10, 0, 0 ), new THREE.Vector3( -5, 15, 0 ), new THREE.Vector3( 20, 15, 0 ), new THREE.Ve

  • 线性回归是最简单的回归方法,它的目标是使用超平面拟合数据集,即学习一个线性模型以尽可能准确的预测实值输出标记。 单变量模型 模型 $$f(x)=w^Tx+b$$ 在线性回归问题中,一般使用最小二乘参数估计($$L_2$$损失),定义目标函数为 $$J={\arg min}{(w,b)}\sum{i=1}^{m}(y_i-wx_i-b)^2$$ 均方误差(MSE) $$MSE = \frac{1}{