吴恩达机器学习练习一

吴恩达机器学习练习一

1.     最前面是一些octave的基本操作

照着pdf文档练习就好。

2.     Linear regression with onevariable

从文件获取数据以及呈现在ex1中已经自动做好。个人所要做的最重要的是编写代价函数以及梯度下降算法。

1)线性回归的目的就是最小化代价函数,因此首先要会根据公司计算出代价函数。

 其中

 由于x的每一行代表一个样本,而theta是初始化成列向量,因此实际编写程序计算时实际上是h的计算要变成X*theta。代价函数的计算可以写成向量计算的方式:

predictions = X*theta;

sigma=predictions-y;

J= sigma'*sigma/(2*m);

最后一行利用了线性代数中矩阵的计算特点(自己把右边展开下就知道):(X-Y)2=(X-Y)T*(X-Y)

2)梯度下降公式如下:

编程时可以采用向量计算:

for iter = 1:num_iters %迭代次数

    h_theta=X*theta;   

      delta=(h_theta-y)'*X;  %注意转置,画出矩阵就知道为什么这么写。

        delta=delta./m;

        theta=theta-alpha.*delta'; % alpha.是学习速率,可以认为是模型的一个超参数。

J_history(iter) = computeCost(X, y, theta);

3.     Linear regression with multiplevariables

1)当样本的特征x1,x2…取值范围相差很大时,需要做特征缩放,目的是减少迭代次数。

计算时一样采用向量的方式进行计算。尽量不要用循环

mu=mean(X);  %求均值

sigma=std(X);  %求标准差

X_norm=(X_norm-mu)./sigma;  %样本进行特征缩放

2)代价函数的计算及梯度下降

         由于单变量的编程中已经写成向量形式,因此基本上代码不用变可以直接使用。

       注意:由于之前的样本是经过特征缩放并用于学习,因此模型以后如果用于预测,必须把用于预测的特征X进行特征缩放,然后再进行预测。

3)可以调整超参数alpha,并打印出代价函数与alpha的关系(同样的迭代次数)

   可以直观的看到学习速率alpha与代价函数收敛快慢的关系。

综上所述:alpha与特征缩放都会影响到模型的学习收敛速率。

练习的原始材料可以上coursea注册一个账号,加入课程就可以下载。



猜你喜欢

转载自blog.csdn.net/weixin_38712697/article/details/80382326