Coursera_Stanford_ML_ex2_Logistic Regression 作业记录

本文介绍了一次Logistic回归的应用实践,包括数据可视化、Sigmoid函数的实现、误差及梯度函数编写等内容,并探讨了正则化对避免过拟合的作用。

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

ProgrammingExercise 2: Logistic Regression

        这周总结一下Week3的作业,使用Logstic回归对数据集中的两个类别进行分类并画出决策边界。总体来说并没有太大的难度,但是要在细节上面多留心。首先看一下作业要求:

        除了打星号的以外,我还建议大家再看一下不带星号的文件,可以更好的帮助我们更好的理解Logstic算法的实现,现在先开始主要部分的实现。

一.Ex2

        plotData.m目的是将不同类别的数据找出来,用plot进行数据可视化。让我们先观察一下数据,类别已经给出,所以直接找到对应的Score就行。

Exam1_Score

Exam2_Score

Class

35.84740876993872

72.90219802708364

0

60.1825993862097

86.30855209546826


pos = find(y==1); neg = find(y == 0);% Find Indices of Positive and Negative Examples
plot(X(pos, 1), X(pos, 2), 'k+','LineWidth', 2, 'MarkerSize', 7);
plot(X(neg, 1), X(neg, 2), 'ko', 'MarkerFaceColor', 'y', 'MarkerSize', 7);

       效果如下:

        Sigmoid.m要求给出Sigmoid函数:

g=1./(1+exp(-z));


        现在的我只能理解用这个函数目的在于把通过拟合得到的方程的值控制在[0,1]这个范围内,可能还有别的含义我没有领悟,让我们看一下函数图像:

       CostFunction.m要求写出误差函数和梯度函数

       误差函数:

            

       用矩阵运算实现:

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

       梯度函数

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

      效果如下(误差0.693147): 

二.Ex2_reg

        数据可视化

        可以看到无法用线性的决策边界将两类别完全分开,所以我们尝试加入更多的多项式项。mapFeature.m中使用了x1,x2构成的六次多项式 :                  

                                                                                    

        为了避免过拟合,需要在误差函数和梯度函数中加入正则化项:

        利用矩阵运算实现时注意不要引入正则化项,原因视频中有讲:

J=(-log(sigmoid(theta'*X'))*y-log(1-sigmoid(theta'*X'))*(1-y))/m+...lambda*(theta(2:size(theta,1),1)'*theta(2:size(theta,1),1))/2/m;
 
grad(1,1)=X(:,1)'*(sigmoid(theta'*X')'-y)/m;
 
grad(2:size(theta,1),1)=X(:,2:size(theta,1))'*(sigmoid(theta'*X')'-y)/m+theta(2:size(theta,1),1)*lambda/m;

        效果如下(误差0.693147

        决策边界是Sigmoid函数值为0时对应x1,x2形成的曲线。

评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

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

抵扣说明:

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

余额充值