吴恩达(Andrew Ng)机器学习编程作业 第三周Logistic Regression 遇到问题的思考

本文深入探讨了使用plot函数进行数据可视化的方法,详细解析了成本函数、梯度计算及正则化的数学表达,并介绍了mapFeature和plotDecisionBoundary函数在避免欠拟合和绘制决策边界中的应用。

摘要生成于 C知道 ,由 DeepSeek-R1 满血版支持, 前往体验 >

  • plot函数进行可视化

       之前没用过plot函数,都是要用到才开始学。

       plot(x,y),如果X,Y是一段向量,就会以x来画y,我的理解说白了就是画一条线段。

       会有一些其他的函数一起用   x/ylabel,legend(),axis([,,,]),hold on, hold off...

  • Cost Function/reg

         这里面我记着一个要注意的点是数据集X的形式

         吴老师课上讲的hypothesis(theta' x),之所以用这个形式,是因为课上举得例子中,X的形式是:每个X矩阵的第一行都是1,所以写作theta‘*X,而作业中X形式都是每一列都是1,相当于是课上X形式的转置。所以theta' *X  就变为了  X*theta (m*1)

这是我的损失函数和梯度,如哪位朋友有更精炼的形式,烦请在评论下告知,谢谢!

J = (1/m)*(-(y'*log(sigmoid(X*theta)))-(1-y)'*log(1-sigmoid(X*theta)));

grad = grad = (1/m)*X'*(sigmoid(X*theta)-y);

加入正则项后:

J = (1/m)*(-(y'*log(sigmoid(X*theta)))-(1-y)'*log(1-sigmoid(X*theta)))+(lambda/(2*m))*(sum(theta(2:end).^2))

grad = (1/m)*X'*(sigmoid(X*theta)-y)+(lambda/m)*[0;theta(2:end)];

  • mapFeature和plotDecisionBoundary

这两个函数看的稀里糊涂的,也没有深究,写在这里就是想让大神支出错误,更好的理解。

mapFeature函数就是增加特征值feature的数量,避免underfitting,这里的degree=6,就是将原先2-dimension,增加到了28dimension,

out = ones(size(X1(:,1)));
           for i = 1:degree
           for j = 0:i
               out(:, end+1) = (X1.^(i-j)).*(X2.^j);
          end
          end

函数差不多稀里糊涂能看懂,但我肯定写不出来,求大神讲解。   这里面是要知道end是最后一行或最后一列,所以每次循环中end+1( out(:, end+1) = (X1.^(i-j)).*(X2.^j);)都是加了一列,也就是加了一个特征值!至于为什么degree是6,我在论坛中看到Tom Mosher(Mentor)说 :It's determined by experiment.链接  那八成这是靠经验定的。

画Decision Boundary函数

if size(X, 2) <= 3
%如果X的列数小于等于3,那就是说 decision boundary就是linear的,所以可以找亮点来画直线
    
    plot_x = [min(X(:,2))-2,  max(X(:,2))+2]; 
%Tom Mosher说anything near the minimum and maximum of the training set will serve.
%就是只要找最大最小点附近的点都成,找最大最小点我感觉是为了让画出的线长一点

    % Calculate the decision boundary line
%这里画图是以X(:,1)为横轴,X(:,2)为纵轴,所以plot_y其实是对应于纵轴,也就是X(:,2)上的值
    plot_y = (-1./theta(3)).*(theta(2).*plot_x + theta(1));
因为要找边界,也就是让g(z)中的z=0时的线,所以θ0+θ1*x1+θ2*x2=0,解出x2便是plot_y

    % Plot, and adjust axes for better viewing
    plot(plot_x, plot_y)
    
    % Legend, specific for the exercise
    legend('Admitted', 'Not admitted', 'Decision Boundary')
    axis([30, 100, 30, 100])
else
    % Here is the grid range
    u = linspace(-1, 1.5, 50);
    v = linspace(-1, 1.5, 50);

    z = zeros(length(u), length(v));
    % Evaluate z = theta*x over the grid
    for i = 1:length(u)
        for j = 1:length(v)
            z(i,j) = mapFeature(u(i), v(j))*theta;
        end
    end

%每次循环算的,其实就是网格中按照预测的theta来计算出的z,每一个z值都是预测曲线上的点,一点一点连成线
    z = z'; % important to transpose z before calling contour
            % 这里讲z转置还是不懂为什么?
    % Plot z = 0
    % Notice you need to specify the range [0, 0]
    contour(u, v, z, [0, 0], 'LineWidth', 2)
end
hold off

对于这个函数的理解,我在函数的注释中都写了,另外链出Mentor的解释,还希望有完全搞懂的大神提出意见,小白瑟瑟发抖的谢谢!

 

 

 

 

 

          

评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值