Logistic Regression and Newton's Method

2024-02-12 15:48

本文主要是介绍Logistic Regression and Newton's Method,希望对大家解决编程问题提供一定的参考价值,需要的开发者们随着小编来一起学习吧!

close all,clear,clcx = load('ex4x.dat');
y = load('ex4y.dat');% find returns the indices of the
% rows meeting the specified condition
pos = find(y == 1);  %得到被录取学生的下标序列
neg = find(y == 0);  %得到没有录取学生的下标序列% Assume the features are in the 2nd and 3rd
% columns of x
m = length(y);   %样本个数
x=[ones(m,1),x];
plot(x(pos, 2), x(pos,3), '+'); %x1作为横坐标;x2作为纵坐标
hold on
plot(x(neg, 2), x(neg, 3), 'o')
ylabel('Exam 2 score');
xlabel('Exam 1 score');
legend('Admitted','Not admitted')theta0=0;
theta1=0;
theta2=0;theta=[theta0;theta0;theta0];
iter = 15;
J = [];for t=1:itergrad = [0,0,0]';H =zeros(3); tmp = 0;for i=1:mfun = 1/(1+exp(-(theta'*x(i,:)'))) ;         %Logistic函数grad = grad + (1/m)*(fun-y(i,:))*x(i,:)';    %牛顿迭代中的梯度H = H + (1/m)*fun*(1-fun)*x(i,:)'*x(i,:);    %hession       tmp = tmp + (1/m)*(-y(i,:)*log(fun) - (1-y(i,:))*log(1-fun))  %代价函数的计算过程endJ=[J;tmp];                     %代价函数theta = theta - H^(-1)*grad;       %牛顿法迭代规则
end%绘制分解面:theta0*x0+theta1*x1+theta2*x2=0,这个时候h(theta'*x)=0.5
%所以,以x1为横坐标,x2为纵坐标:x2=-(theta0*x0+theta1*x)/theta2
hold on
plot_x = [min(x(:,2))-2,  max(x(:,2))+2];
plot_y = (-1./theta(3)).*(theta(2).*plot_x +theta(1));
plot(plot_x, plot_y)%Plot J
hold off
figure
plot(0:iter-1, J, 'o--', 'MarkerFaceColor', 'r', 'MarkerSize', 8)
xlabel('Iteration'); ylabel('J')
J
%测试数据x=[1,20,80],即学生的一门成绩20分,第二门成绩80分
x_test = [1,20,80];
predict = 1./(1+exp(-(x_test*theta)));
if predict > 0.5disp('学生的成绩为[20,80],他/她将被大学录取')
elsedisp('学生的成绩为[20,80],他/她将不被大学录取')
end

运行结果:


图1 最终分类的结果图,圆圈代码学生没被录取,加号代表学生被录取



图2 代价函数J随着,牛顿迭代次数的变化曲线,可以看到在迭代到第5次的时候就收敛了


图3 代价函数的值以及学生的成绩为第一门成绩为20,第二门成绩为80的时候,她将不会被大学录取的预测


Logistic回归和牛顿方法

一、数据准备

假设有一个数据库中,有40个学生参加高考被大学录取了,有另外40个学生参加高考没有被录取。训练样本为(x,y),其中x=(x1,x2)表示某个学生高考的两门考试的成绩,y表示及是否被大学录取的标签,其中,x1表示第一门考试的成绩,x2表示第二门考试的成绩,y为0表示被没有被大学录取,y为1表示被大学录取了。

二、方法

Logistic回归模型

Logistic回归函数

在这个例子中,逻辑回归的假设可以认为是一种概率,例如当给定特征的时候,某事件发生的可能性。求解后的结果通过与0.5进行比较,来对样本进行划分,即如果给定的值,那么把它代入到Logistic函数中(当然啦,函数中的具体参数是什么,这是需要我们根据已有的样本和相关的学习规则去确定的,如这里我们使用了牛顿法进行参数的估计,这是后面的内容了),如果它的概率大于0.5那么归为一类(1),小于0.5那么归为另外一类(0)。

牛顿方法

迭代规则,梯度,hession矩阵


改进后的代码:

close all,
clear,clcx = load('ex4x.dat');
y = load('ex4y.dat');% find returns the indices of the
% rows meeting the specified condition
pos = find(y == 1);  %得到被录取学生的下标序列
neg = find(y == 0);  %得到没有录取学生的下标序列% Assume the features are in the 2nd and 3rd
% columns of x
m = length(y);   %样本个数
x=[ones(m,1),x];
plot(x(pos, 2), x(pos,3), '+'); %x1作为横坐标;x2作为纵坐标,被录取
hold on
plot(x(neg, 2), x(neg, 3), 'o')
ylabel('Exam 2 score');
xlabel('Exam 1 score');
legend('Admitted','Not admitted')theta0=0;
theta1=0;
theta2=0;theta=[theta0;theta0;theta0];
iter = 15;
J = [];for t=1:iter%grad = [0,0,0]';%H =zeros(3); h = 1./(1+exp(-(x*theta)));tmp = 0;    gradient = (1/m).*x'* (h-y);             %梯度hession = (1/m).*x'*diag(h)*diag(1-h)*x; %hession矩阵%for i=1:m%    fun = 1/(1+exp(-(theta'*x(i,:)'))) ;%    grad = grad + (1/m)*(fun-y(i,:))*x(i,:)';    %   H = H + (1/m)*fun*(1-fun)*x(i,:)'*x(i,:); %hession       %    tmp = tmp + (1/m)*(-y(i,:)*log(fun) - (1-y(i,:))*log(1-fun))%end%   J=[J;tmp];     tmp =(1/m)*sum(-y.*log(h) - (1-y).*log(1-h)); %代价函数J=[J;tmp];    % theta = theta - H^(-1)*grad;    theta = theta - hession^(-1)*gradient;        %更新规则
end%绘制分解面
hold on
plot_x = [min(x(:,2))-2,  max(x(:,2))+2];
plot_y = (-1./theta(3)).*(theta(2).*plot_x +theta(1));
plot(plot_x, plot_y)%Plot J
hold off
figure
plot(0:iter-1, J, 'o--', 'MarkerFaceColor', 'r', 'MarkerSize', 8)
xlabel('Iteration'); ylabel('J')
J



这篇关于Logistic Regression and Newton's Method的文章就介绍到这儿,希望我们推荐的文章对编程师们有所帮助!



http://www.chinasem.cn/article/702934

相关文章

模版方法模式template method

学习笔记,原文链接 https://refactoringguru.cn/design-patterns/template-method 超类中定义了一个算法的框架, 允许子类在不修改结构的情况下重写算法的特定步骤。 上层接口有默认实现的方法和子类需要自己实现的方法

perl的学习记录——仿真regression

1 记录的背景 之前只知道有这个强大语言的存在,但一直侥幸自己应该不会用到它,所以一直没有开始学习。然而人生这么长,怎就确定自己不会用到呢? 这次要搭建一个可以自动跑完所有case并且打印每个case的pass信息到指定的文件中。从而减轻手动跑仿真,手动查看log信息的重复无效低质量的操作。下面简单记录下自己的思路并贴出自己的代码,方便自己以后使用和修正。 2 思路整理 作为一个IC d

兔子--The method setLatestEventInfo(Context, CharSequence, CharSequence, PendingIntent) from the type

notification.setLatestEventInfo(context, title, message, pendingIntent);     不建议使用 低于API Level 11版本,也就是Android 2.3.3以下的系统中,setLatestEventInfo()函数是唯一的实现方法。  Intent  intent = new Intent(

【ML--04】第四课 logistic回归

1、什么是逻辑回归? 当要预测的y值不是连续的实数(连续变量),而是定性变量(离散变量),例如某个客户是否购买某件商品,这时线性回归模型不能直接作用,我们就需要用到logistic模型。 逻辑回归是一种分类的算法,它用给定的输入变量(X)来预测二元的结果(Y)(1/0,是/不是,真/假)。我们一般用虚拟变量来表示二元/类别结果。你可以把逻辑回归看成一种特殊的线性回归,只是因为最后的结果是类别变

Windows用户取消共享文件夹密码方法(Method for Windows Users to Cancel Shared Folder Password)

Windows用户取消访问共享文件夹密码方法 💝💝💝欢迎来到我的博客,很高兴能够在这里和您见面!希望您在这里可以感受到一份轻松愉快的氛围,不仅可以获得有趣的内容和知识,也可以畅所欲言、分享您的想法和见解。 推荐:Linux运维老纪的首页,持续学习,不断总结,共同进步,活到老学到老 导航剑指大厂系列:全面总结 运维核心技术:系统基础、数据库、网路技术、系统安全、自动化运维、容器技术、监

iOS——方法交换Method Swizzing

什么是方法交换 Method Swizzing是发生在运行时的,主要用于在运行时将两个Method进行交换,我们可以将Method Swizzling代码写到任何地方,但是只有在这段Method Swilzzling代码执行完毕之后互换才起作用。 利用Objective-C Runtimee的动态绑定特性,将一个方法的实现与另一个方法的实现进行交换。交换两个方法的实现一般写在分类的load方法里

element table 表格 span-method 某一列进行相同合并 支持树结构表格

须知 这是 vue2 版本,不过理论上 vue3 也能参考使用 可以直接打开 codepen 查看代码 效果图 代码 打不开 codepen 或者codepen 失效,查看下面代码参考 <script src="//unpkg.com/vue@2/dist/vue.js"></script><script src="//unpkg.com/element-ui@2.15.14/l

A fault diagnosis method of bearings based on deep transfer learning

A fault diagnosis method of bearings based on deep transfer learning 基于深度迁移学习的轴承故障诊断方法 ABSTRACT 近年来,许多深度迁移学习方法被广泛应用于不同工况下的轴承故障诊断,以解决数据分布移位问题。然而,在源域数据差异较大、特征分布不一致的情况下,深度迁移学习方法在轴承故障诊断中的准确率较低,因此本文提出了一种

The remote endpoint was in state [TEXT_FULL_WRITING] which is an invalid state for called method 已解决

前面有个webSocket自动断开连接的问题,已解决,请见博客: webSocket java.io.EOFException: null 增加心跳机制解决 然后又报了一个错: java.lang.IllegalStateException: The remote endpoint was in state [TEXT_FULL_WRITING] which is an invalid st

Android 解决 No static method in class La/a/a/a; or its super classes

错误堆栈: Process: com.chaozh.iReader, PID: 24217java.lang.NoSuchMethodError: No static method getDrawable(Landroid/content/Context;I)Landroid/graphics/drawable/Drawable; in class La/a/a/a; or its super