exercise5

这次习题的目的在最一开始并没有搞清楚。根据ex5这个函数对所有函数的调用,走一步看一步,

首先就是对只有一维的简单的X进行建模。在这次建模过程中,又复习了损失函数和梯度的计算式。一切直接拿一个式子就可以计算出来。以后会遇到很多很多不同维度的计算,在计算的时候想一下式子的物理意义就比较容易计算出来了。

theta_temp = [zeros(size(theta,2));theta(2:end)];
J = sum(sum((X*theta - y).^2)) / (2*m) + lambda / (2*m) * sum(sum(theta_temp.^2));
grad = X'* (X*theta - y) / m + lambda / m * theta_temp;


具体进行训练模型的步骤如下:

initial_theta=zeros(size(X,2),1);
costFunction = @(t) linearRegCostFunction(X,y,t,lambda);
options = optimet('MaxIter',200,'GradObj','on');
theta = fmincg(costFunction, initial_theta, options);
首先初始化theta,然后定义costfunction函数,进行损失和梯度的具体计算。之后设定使用fmincg的具体选项。最大迭代次数为200,需要自己选定参数。最后将之前设定的三个类似于参数的参数传入到fmincg函数中进行具体的建模过程。


part5是learningCurve函数,意思就是表示出样本的个数对训练效果的影响。很显然,样本越多,训练效果越好。

在一开始使用线性回归的时候,效果并不是很好,所以接下来选择多项式回归进行拟合。

首先需要对数据X进行处理。分别变成平方,三次方,……。

之后对得到的值进行正规化。就是减去平均数,然后除以标准差。

代码是值得学习一下的。

mu = mean(X);%求X的各列均值
X_norm = bsxfun(@minus, X, mu);%X和mu的二值操作,minus代表的意思是减法

sigma = std(X_norm);%计算标准差
X_norm = bsxfun(@rdivide, X_norm, sigma);%X和mu的二值操作,rdivide代表的意思是左除

具体里面的参数代表的含义:点击打开链接
之后就没什么了,就是用处理过的X矩阵重新构建模型,流程一样,所以忽略。

OK,练习结束。

源代码链接地址:http://download.csdn.net/detail/yinyanting1/9910170












































發表評論
所有評論
還沒有人評論,想成為第一個評論的人麼? 請在上方評論欄輸入並且點擊發布.
相關文章