【逻辑回归】使用逻辑回归进行实际操练

数据源采集吴恩达教授第6课的练习数据(ex6data3.mat):
1、在Ocatve中导入数据;
L1=load(‘ex6data3.mat’);
2、构建相关的记录集,并使用Plot观察数据:

x=ones(size(L1.X)(1),3);
x(:[2,3])=L1.X;
y=L1.y
y0=find(y0);
y1=find(y
1);
plot(x1(y1,2),x1(y1,3),’+’);
hold on
plot(x1(y0,2),x1(y0,3),‘o’,‘MarkerFaceColor’,‘r’);
在这里插入图片描述

根据以上模型分析还是比较线性的,暂定使用模型:
y=theta0+theta1X1+theta2X2
3、使用逻辑回归进行训练(逻辑回归的代码参见:《【逻辑回归】逻辑回归函数在Octave中的实现》)
这一步比较意外:
[T1,bRst,Thsl1]=LogisticRegression(0.15,0.01,20,x,y,theta)
使用以上参数进行训练,但是没有想到第一步就训练出结果了,简直不可意义,一度以为是代码有问题,反复把吴恩达的课件拿出来看了几次,在确认实现代码没有问题的情况下,对数据进行分析:
3.1、设置的误差太大,因为我们的X参数都是0后面五六位的;
3.2、将误差设置小,重现进行训练:
[T1,bRst,Thsl1]=LogisticRegression(0.15,0.001,2000,x,y,theta)
在61次回归的时候得出结论:

T1 =
0.27017
0.48933
1.53755

OK,将y=theta0+theta1X1+theta2X2的曲线画出来,看看是否能够满足我们题目中的要求:
在这里插入图片描述
回忆一下课程中判断最终有多少机率是0还是1,应该是这样一条曲线。横轴是:theta’X’(使用f(x)来表达),也就是theta0+theta1X1+theta2X2。纵轴是机率,也就是G(f(x))=1/(1+e^(-f(x))。也就是说如果f(x)>0,则最终的结果y=1;
所以我们画出的线也应该是theta0+theta1
X1+theta2*X2=0,在这条线之上的,我认为预测结果应该是为1的,而在这个线之下的,我们认为预测结果应该是为0的。

画线:我们在上面的(X1,X2)点线图上取两点
XPlot=[1,-0.8;1,0.5]
然后需要计算这两点的X1坐标对应于X2的坐标,代入上面点线即可:
theta0+theta1X1+theta2X2=0
X2=-(theta0/theta2+theta1X1/theta2)
这里将-theta0/theta2,-theta1/theta2看成两个参数,也就是P0,P1。我们可以把X2表达式重写:X2=P0+P1
X1

TPlot(1,1)=-T1(1,1)/T1(3,1);
TPlot(2,1)=-T1(2,1)/T1(3,1);

所以代码如下:

plot(XPlot(:,2),TPlot’*XPlot’);

结果如下:
在这里插入图片描述
可见上图也不是一个合适的结果集,继续缩小误差试试从0.001调到到0.0001
在这里插入图片描述
这就看上去比较接近我们的结果集了,当然我们也可以进一步降低误差,看看是否有更好的表现。
这个是误差调整到0.00001后结结果

猜你喜欢

转载自blog.csdn.net/wx0628/article/details/86519563
今日推荐