使用 matlab 缩放线性回归和分类

Scaling for linear regression and classification using matlab

我在做三件事:

我对数据的缩放感到困惑。 我的问题是我不确定我是否正确地缩放了我的数据。此外,我想在 matlab 中更改曲面图的外观。

数据是二维的(x 和 y),x 的范围从 15000 到 80000 y 从 1000 到 5500。

class 1 和 class 0 的两条回归线是使用线性回归找到的。为此,我对数据进行了缩放,计算了权重,并在图片中看到的 none 缩放数据上也使用了缩放数据的权重。我想这是正确的,因为权重只是定义斜率。 但是,只要数据从 0 缩放到 1,数据就不可分离,如下图所示。

现在我很困惑什么时候应该扩展我的数据。因为对于线性 classification 我无法缩放数据,因为它显然不可分离。 在没有缩放的情况下,我使用梯度下降算法找到了以下分离平面:

关于matlab surf plot的第一个问题:如何得到一个立体的分离平面?

对于逻辑回归,有必要再次缩放。我猜是因为回归函数的范围 1/(1 + exp(-w*x)).

我用这个

缩放了它
data = (values - repmat(min(values,[],1),size(values,1),1))*spdiags(1./(max(values,[],1)-min(values,[],1))',0,size(values,2),size(values,2))

这是从原始值中减去最小值并除以范围。缩放 x 和 y 的数据范围从 0 到 1 之后。 使用梯度上升算法计算权重,发现

w = 0.2493   33.7885  -36.0428

对于缩放数据集和

w = 0.7610  269.3073 -102.6686

对于未缩放的数据。

下图是缩放后的数据:

基本问题是我应该何时扩展数据? 以及何时使用缩放或未缩放的数据集?

scale data -> calc weights using scaled data -> plot using scaled or unscaled data?

calc weights using unscaled data -> plot using unscaled data? 

我希望逻辑函数图的范围也从 15000 到 80000 (x) 从 1000 到 5500 (y)。当我绘制未缩放版本时,它看起来像这样,因为逻辑函数的范围从 0 到 1:

有没有更好的命令来绘制曲面?网格,trisurf?

在执行线性回归、线性分类或逻辑回归之前没有必要对数据进行归一化 - 虽然它不会造成任何伤害,但最终结果应该不会因线性变换而改变。

我认为您根本不需要绘制曲面。您有二维数据 f(x,y),因此要将两者分开,您需要一条线。