梯度下降值不正确

我尝试使用以下代码实现梯度下降:

在Octave中实现梯度下降

我修改了代码如下:

X = [1; 1; 1;] y = [1; 0; 1;]m = length(y);X = [ones(m, 1), data(:,1)]; theta = zeros(2, 1);        iterations = 2000;alpha = 0.001;for iter = 1:iterations     theta = theta -((1/m) * ((X * theta) - y)' * X)' * alpha;endtheta

这给出了以下输出:

X =   1   1   1y =   1   0   1theta =   0.32725   0.32725

theta 是一个 1×2 的矩阵,但由于输出(y)是 3×1 的,它不应该是 1×3 吗?

所以我应该能够将 theta 乘以训练样本来进行预测,但不能将 x 乘以 theta,因为 x 是 1×3 而 theta 是 1×2?

更新:

%X = [1 1; 1 1; 1 1;] %y = [1 1; 0 1; 1 1;]X = [1 1 1; 1 1 1; 0 0 0;] y = [1 1 1; 0 0 0; 1 1 1;]m = length(y);X = [ones(m, 1), X]; theta = zeros(4, 1);     thetaiterations = 2000;alpha = 0.001;for iter = 1:iterations     theta = theta -((1/m) * ((X * theta) - y)' * X)' * alpha;end%to make predictionm = size(X, 1); % Number of training examplesp = zeros(m, 1);htheta = sigmoid(X * theta);p = htheta >= 0.5;

回答:

你在这里误解了维度。你的数据包含3个点,每个点只有一个维度。此外,你添加了一个虚拟维度,全是1

X = [ones(m, 1), data(:,1)]; 

因此

octave:1> data = [1;2;3]data =   1   2   3octave:2> [ones(m, 1), data(:,1)]ans =   1   1   1   2   1   3

theta是你的参数化,你应该能够通过(这不是代码,而是数学符号)

h(x) = x1 * theta1 + theta0

因此你的 theta 应该有两个维度。一个是你的虚拟维度的权重(所谓的偏置),另一个是实际的 X 维度。如果你的 X 有 K 个维度,那么 theta 将有 K+1 个。因此,在添加虚拟维度后,矩阵的形状如下:

X 是 3x2y 是 3x1theta 是 2x1

所以

X * theta 是 3x1 

y相同

Related Posts

L1-L2正则化的不同系数

我想对网络的权重同时应用L1和L2正则化。然而,我找不…

使用scikit-learn的无监督方法将列表分类成不同组别,有没有办法?

我有一系列实例,每个实例都有一份列表,代表它所遵循的不…

f1_score metric in lightgbm

我想使用自定义指标f1_score来训练一个lgb模型…

通过相关系数矩阵进行特征选择

我在测试不同的算法时,如逻辑回归、高斯朴素贝叶斯、随机…

可以将机器学习库用于流式输入和输出吗?

已关闭。此问题需要更加聚焦。目前不接受回答。 想要改进…

在TensorFlow中,queue.dequeue_up_to()方法的用途是什么?

我对这个方法感到非常困惑,特别是当我发现这个令人费解的…

发表回复

您的邮箱地址不会被公开。 必填项已用 * 标注