在Octave中正则化的正确实现是什么?

我目前正在学习吴恩达的机器学习课程,并且在学习过程中尝试实现这些内容以防忘记,我刚完成正则化(第七章)。我知道theta 0是正常更新的,与其他参数分开更新,但我并不确定这两种实现中哪一种是正确的实现。

实现1:在我的梯度函数中,计算完正则化向量后,将theta 0部分改为0,这样当它被加到总和中时,就好像theta 0从未被正则化过一样。

实现2:将theta存储在一个临时变量中:_theta,用0的正则化步长更新它(因此就好像没有正则化),将新的theta 0存储在一个临时变量中:t1,然后用我想要的正则化步长更新原始的theta值,并用t1(来自非正则化更新的值)替换theta 0。

下面是我的第一种实现的代码,这并不是为了高级用途,我只是在练习:我在使用Octave,它是1-index的,所以theta(1)是theta(0)

function ret = gradient(X,Y,theta,reg_step),  H = theta' * X;  dif = H-Y;  mul = dif .* X;  total = sum(mul,2);  m=(size(Y)(1,1));  regular = (reg_step/m)*theta;  regular(1)=0;  ret = (total/m)+regular,endfunction

提前感谢。


回答:

对第一种实现进行了一点小的调整对我来说是有效的。

首先,计算每个theta的正则化。然后继续执行梯度步骤,之后你可以手动更改包含梯度的矩阵的第一项,以忽略theta_0的正则化。

% 计算正则化regularization = (reg_step / m) * theta;% 梯度步骤gradients = (1 / m) * (X' * (predictions - y)) + regularization;% 忽略theta_0的正则化gradients(1) = (1 / m) * (X(:, 1)' * (predictions - y));

Related Posts

使用LSTM在Python中预测未来值

这段代码可以预测指定股票的当前日期之前的值,但不能预测…

如何在gensim的word2vec模型中查找双词组的相似性

我有一个word2vec模型,假设我使用的是googl…

dask_xgboost.predict 可以工作但无法显示 – 数据必须是一维的

我试图使用 XGBoost 创建模型。 看起来我成功地…

ML Tuning – Cross Validation in Spark

我在https://spark.apache.org/…

如何在React JS中使用fetch从REST API获取预测

我正在开发一个应用程序,其中Flask REST AP…

如何分析ML.NET中多类分类预测得分数组?

我在ML.NET中创建了一个多类分类项目。该项目可以对…

发表回复

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