Warning: file_get_contents(/data/phpspider/zhask/data//catemap/8/vim/5.json): failed to open stream: No such file or directory in /data/phpspider/zhask/libs/function.php on line 167

Warning: Invalid argument supplied for foreach() in /data/phpspider/zhask/libs/tag.function.php on line 1116

Notice: Undefined index: in /data/phpspider/zhask/libs/function.php on line 180

Warning: array_chunk() expects parameter 1 to be array, null given in /data/phpspider/zhask/libs/function.php on line 181
Matlab 使用批处理梯度下降的错误权重_Matlab_Machine Learning_Linear Regression_Gradient Descent - Fatal编程技术网

Matlab 使用批处理梯度下降的错误权重

Matlab 使用批处理梯度下降的错误权重,matlab,machine-learning,linear-regression,gradient-descent,Matlab,Machine Learning,Linear Regression,Gradient Descent,我正在使用二维数据进行线性回归,但我无法获得回归线的正确权重。 以下代码似乎有问题,因为 回归线的计算权重不正确。 使用过大的数据值(x约为80000)会导致权重为NaN。将数据从0缩放到1会导致错误的权重,因为 回归线与数据不匹配 function [w, epoch_batch, error_batch] = batch_gradient_descent(x, y) % number of examples q = size(x,1); % learning rate alpha = 1

我正在使用二维数据进行线性回归,但我无法获得回归线的正确权重。 以下代码似乎有问题,因为 回归线的计算权重不正确。 使用过大的数据值(x约为80000)会导致权重为NaN。将数据从0缩放到1会导致错误的权重,因为 回归线与数据不匹配

function [w, epoch_batch, error_batch] = batch_gradient_descent(x, y)

% number of examples
q = size(x,1);

% learning rate
alpha = 1e-10;

w0 = rand(1);
w1 = rand(1);

curr_error = inf;
eps = 1e-7;

epochs = 1e100;
epoch_batch = 1;
error_batch = inf;
for epoch = 1:epochs
    prev_error = curr_error;
    curr_error = sum((y - (w1.*x + w0)).^2);
    w0 = w0 + alpha/q * sum(y - (w1.*x + w0));
    w1 = w1 + alpha/q * sum((y - (w1.*x + w0)).*x);
    if ((abs(prev_error - curr_error) < eps))
        epoch_batch = epoch;
        error_batch = abs(prev_error - curr_error);
        break;
    end
end

w = [w0, w1];
以下是绘制数据的代码:

figure(1)
% plot data points
plot(x, y, 'ro');
hold on;
xlabel('x value');
ylabel('y value');
grid on;

% x vector from min to max data point
x = min(x):max(x);
% calculate y with weights from batch gradient descent
y = (w(1) + w(2)*x);
% plot the regression line
plot(x,y,'r');

可以使用较小的学习率
alpha=1e-10
找到未标度数据集的权重。 但是,当将数据从0缩放到1时,我仍然很难获得匹配的权重

标度=

0.4735
0.5642
0.2012
0.4684
0.3955
0.5342
0.9891
0.4972
0.4118
0.3297
0.4800
0.5249
0.9627
1.0000
0.2393
有刻度的=

0.0294
0.0366
0.0131
0.0302
0.0248
0.0346
0.0638
0.0318
0.0264
0.0216
0.0315
0.0340
0.0610
0.0646
0.0149

问题在于
w1
,因为您给它的权重太大了。你不应该给
w0
w1
相同的学习步骤,因为一个步骤不会乘以
x

如果我用
alpha^4/q
替换
alpha/q
(因为随机选择),那么它收敛:


你能给出一些调用函数的样本数据吗?我添加了未标度的数据,这会导致权重的NaN值。从0缩放到1,通过除以最大值,返回与数据不匹配的错误权重。您正在进行三次运算以精确地最小化wich函数?最有可能的错误是
w1=w1+alpha/q*sum((y-(w1.*x+w0))*x),因为这一行不会使
和(y-(w1.*x+w0))
变小,所以它朝着最小化的方向发展。我想最小化所有样本的成本函数
J(w)=和(yj-h_w(xj))^2
(J=1到q)
。其中
h_w(xj)=w1*x+w0
0.01
不够小。@不一定,不。您给出的是用户指定的任意学习率,其取决于数据的规模。这就是大多数算法使用规范化数据的原因。@yeah。。。事实上,这里没有魔法发生。一般来说,如果标准化,值
[0.01-0.5]
是好的,但您只需要尝试一下……我还建议使用零均值和单位方差对数据进行标准化,以便算法能够更快地收敛。但是,权重将与标准化数据相关,因此如果要执行任何预测,必须获取该数据并使用训练数据的均值和方差对其进行标准化。这篇文章可能会提供更多的见解:-然而,这是逻辑回归,不是线性的,但更新规则几乎是一样的。@evolved检查ray说了什么,他知道这些东西。
0.0294
0.0366
0.0131
0.0302
0.0248
0.0346
0.0638
0.0318
0.0264
0.0216
0.0315
0.0340
0.0610
0.0646
0.0149