You need to enable JavaScript to run this app.
优惠活动
大模型
产品
解决方案
定价
更多

不同坐标原点的坐标向量程序化基变换(Python/SVM超平面场景)

我有一个支持向量机(Support Vector Machine, SVM),可通过决策超平面将数据划分为两类,为方便可视化,这里采用三维样本数据集,效果如下:
SVM-Hyperplane
我现在需要执行基变换,让该超平面平整贴合x/y平面,这样每个样本点到决策超平面的距离就等于其z坐标值。

SVM的超平面由系数(三维向量)和截距(标量)定义,符合平面通用数学表达式:ax+by+cz=d,其中a、b、c为系数的三个坐标值,d为截距。将系数绘制成3D向量时,该向量与平面正交(图中为青色线条)。

接下来是基变换的实现逻辑:如果截距为0,我可以直接将系数向量作为新基的一个向量,第二个基向量取平面上的任意向量,第三个基向量为前两个向量的叉乘,得到三个正交向量作为变换矩阵的列向量。
下方代码中的z函数由平面通用公式变形推导而来:ax+by+cz=d <=> z=(d-ax-by)/c:

z_func = lambda interc, coef, x, y: (interc-coef[0]*x -coef[1]*y) / coef[2]
def generate_trafo_matrices(coefficient, z_func):
    normalize = lambda vec: vec/np.linalg.norm(vec)
    uvec2 = normalize(np.array([1, 0, z_func(1, 0)]))
    uvec3 = normalize(np.cross(uvec1, uvec2))
    back_trafo_matrix = np.array([uvec2, uvec3, coefficient]).T 
    # 调整顺序让超平面对齐xy平面而非yz平面
    trafo_matrix = np.linalg.inv(back_trafo_matrix)
    return trafo_matrix, back_trafo_matrix

该变换矩阵会被应用到所有点上,实现方式如下:

def _transform(self, points, inverse=False):
    trafo_mat = self.inverse_trafo_mat if inverse else self.trafo_mat              
    points = np.array([trafo_mat.dot(point) for point in points])        
    return points

当截距为0时,该方案运行完美,超平面会平整贴合xy轴。但只要截距不等于0,超平面就不再平整:
plane_not_flat

我知道问题原因在于这不是单纯的基变换,因为新基的坐标原点不在(0,0,0),而是在其他位置(超平面可在任意点与系数向量相交),但我尝试将截距加入变换逻辑的所有尝试都没有得到正确结果,错误代码如下:

def _transform(self, points, inverse=False):
    trafo_mat = self.inverse_trafo_mat if inverse else self.trafo_mat      
    intercept = self.intercept if inverse else -self.intercept
    ursprung_translate = trafo_mat.dot(np.array([0,0,0])+trafo_matrix[:,0]*intercept)
    points = np.array([point+trafo_matrix[:,0]*intercept for point in points])
    points = np.array([trafo_mat.dot(point) for point in points])        
    points = np.array([point-ursprung_translate for point in points])
    return points

我选择在StackOverflow而非数学类StackExchange提问,是因为我不确定如何将对应的数学原理转化为代码,能做到目前的程度我已经很满意了。

感谢任何形式的帮助!


内容的提问来源于stack exchange,提问作者Chris Stenkamp

相关产品推荐
方舟 Agent Plan

超全模态模型 × Harness 升级,最新支持 Deepseek-V4.1-Flash、GLM-5.3 系列、Doubao-Seedream-5.0-pro、Kimi-K3 (部分), 限时 9.9 元起

最近更新时间:2026.10.01 16:24:05