使用 matlab 缩放线性回归和分类
Scaling for linear regression and classification using matlab
我在做三件事:
- 二维数据中的线性回归
- class使用线性class化
化
- class使用逻辑回归进行化验
我对数据的缩放感到困惑。
我的问题是我不确定我是否正确地缩放了我的数据。此外,我想在 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)
,因此要将两者分开,您需要一条线。
我在做三件事:
- 二维数据中的线性回归
- class使用线性class化 化
- class使用逻辑回归进行化验
我对数据的缩放感到困惑。 我的问题是我不确定我是否正确地缩放了我的数据。此外,我想在 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)
,因此要将两者分开,您需要一条线。