Machine learning 梯度下降产生不正确的八度θ

Machine learning 梯度下降产生不正确的八度θ,machine-learning,octave,gradient-descent,Machine Learning,Octave,Gradient Descent,我正在尝试一种使用多项式回归的预测算法,其形式为h(x)=θ0+θ1*x1+θ2*x2,其中x2=x1^2 我用两种方法计算θ,比较结果:正态方程和梯度下降。然后我绘制了这两种方法的回归线,从65分到100分,看看它如何与我的数据相吻合 当使用正态方程计算θ时,一切似乎都按预期进行。在下图中,“x”是实际分数,“o”是预测分数 然而,当使用梯度下降法计算θ时,得到的回归线不适合我的数据。看起来是这样的: 在最小化代价函数的同时,我绘制了J上的梯度下降迭代,以确认值收敛。这似乎工作正常: 这

我正在尝试一种使用多项式回归的预测算法,其形式为h(x)=θ0+θ1*x1+θ2*x2,其中x2=x1^2

我用两种方法计算θ,比较结果:正态方程和梯度下降。然后我绘制了这两种方法的回归线,从65分到100分,看看它如何与我的数据相吻合

当使用正态方程计算θ时,一切似乎都按预期进行。在下图中,“x”是实际分数,“o”是预测分数

然而,当使用梯度下降法计算θ时,得到的回归线不适合我的数据。看起来是这样的:

在最小化代价函数的同时,我绘制了J上的梯度下降迭代,以确认值收敛。这似乎工作正常:

这是我的密码:

函数[theta_normalEq,theta_gradientDesc]=a1_线性回归()
清除();
%假设您想要拟合形式为h(x)=θ0+θ1*x1+θ2*x2的模型
%其中x1为期中成绩,x2为(期中成绩)^2
中期=[89;72;94;69];%期中考试成绩
中期2=中期。^2;%同上,但每个元素都是平方的。表示“每个元素”。如果“点”不存在,^2本身就意味着矩阵乘法
X=[midTerm2];%将两个向量合并为一个矩阵
y=[96;74;87;78];%的期末考试成绩
%方法A:
%使用正态方程计算θ(每个独立变量的偏差)
%这仅在某些情况下有效(参见下面相应函数中的注释)
θ_normalEq=正规方程(X,y);
%方法B:
%使用梯度下降法
θu gradientDesc=梯度下降(X,y,1.3,60);
%绘制回归线,以直观地查看它与我们的数据的吻合程度
绘制回归线(中期、y、X、θ梯度描述);
%为整洁的输出窗口清除不需要的变量
明确(“中期”、“中期2”);
端功能
%绘制回归线,以直观地查看它与我们的数据的吻合程度
函数图回归线(中期、y、X、θ)
%我们的X矩阵是n长的,但我们的θ是n+1(请记住,我们正在建模h(X)=θ0+θ1*x1+θ2*x2)
%因此,我们将引入一个X0,并将其设置为X0=1,以便对θ和X进行矩阵运算。
%这使得两个向量“θ”和x(i)在元素方面相互匹配(即,元素数相同:n+1)。
X0=一(行(X),1);
X=[x0x];%concatation;X有2列,现在有3列。第一列现在由“one”组成
清除('X0');%只清除变量
%通过计算θ,我们现在可以将它们插入原始模型中进行预测
%模型形式:h(x)=θ0+θ1*x1+θ2*x2
%矢量化版本:h(x)=x*θ
y_预测=X*θ;
%让我们计算所有可能得分的点,以绘制回归线
得分最低=65分;
最高分数=100;
阶跃=0.1;
分数=(scoreMin:step:scoreMax)';
scoresX=[一(行(分数),1)分数。^2];
scoresY_predicted=scoresX*θ;
%密谋
图2;
clf;
等等
绘图(中期,y,“x”);%绘制实际数据点
绘图(中期,y_预测,“或”);%绘制我们的预测数据点
plot(分数,scoresY_预测,“r”);%绘制了我们计算的回归线
拖延;
端功能
%执行梯度下降以学习θ。通过使用数值更新θ
%
%X=自变量矩阵(例如,房屋大小、卧室数量、浴室数量等)
%y=因变量向量(如房屋成本)
%alpha=学习速度
%尝试找到最佳θ的迭代次数
%
%首先尝试一个随机的alpha,比如0.1或1。
%如果alpha太小,将花费太长时间使J最小化,并看到值收敛(迭代次数太多)
%如果alpha太大,我们将超出函数的最小值,值将再次开始增加
%理想情况下,我们希望尽可能大的alpha获得足够的分辨率,以尽可能少的迭代发现函数的最小值,而不会超出最小值
%
%我们还希望迭代次数足够多,但不要太多。根据我们的问题和数据,这可能是30到300到3000到300万次,甚至更多。
%在实践中,我们在循环过程中根据迭代次数绘制J图,从实验上发现“alpha”和“num_iters”的最佳值
%我们正在寻找的图形看起来像是一个缩小值的hokey棒,水平变平。J不再缩小(水平部分),我们已经收敛了。
%
函数θ=梯度下降(X,y,alpha,num_iters)
%规范化特征
%我们可以通过让每个输入值在大致相同的范围内来加速梯度下降
%这是因为θ在小范围内迅速下降,在大范围内缓慢下降,因此当变量非常不均匀时,θ将低效地振荡到最佳值。
%防止这种情况的方法是修改输入变量的范围,使它们大致相同
%zscore()独立地规范化每个特征(每个列),这就是我们想要的:(值-该列值的平均值)/该列的标准偏差
X=zscore(X);
y=zscore(y);
%我们的X矩阵是n长的,但我们的θ是n+1(请记住,我们正在建模h(X)=θ0+θ1*x1+θ2*x2)
%因此,我们将引入一个X0,并将其设置为X0=1,以便对θ和X进行矩阵运算。
%这使得两个向量“θ”和x(i)在元素方面相互匹配(即,元素数相同:n+1)。
X0=一(行(X),1);
X=[x0x];%concatation;X有2列,现在有3列。第一列现在由“one”组成
清除('X0');%刚刚清除