matlab-逻辑回归二分类(Logistic Regression)
逻辑回归二分类
今天尝试写了一下逻辑回归分类,把代码分享给大家,至于原理的的话请戳这里 https://blog.csdn.net/laobai1015/article/details/78113214 (在这片博客的基础上我加了一丢丢东西)。
用到的预测函数为
其中,h为预测函数(大于0.5为一类,小于等于0.5为另一类)。θ为各个特征的参数。θ=[θ1,θ2,θ3...]T
损失函数J(θ)为
利用梯度下降算法进行参数的更新公式如下:
其中,α是学习率参数,λ是正则项参数,需要自己输入。
用上述三个公式即可写出一般情况下的逻辑回归分类,经试验,其分类效果在我的测试数据下有90%以上准确度。
以下代码为了演示方面,只提供了两个特征值,然后加了一个常数项(经过实验,常数项是不可缺少的)。大家在使用自己的数据集的话只需要进行一点小改动即可。
matlab代码如下:
- clear
- clc
- %% 数据准备
- %X = xlsread('C:\Users\user01\Desktop\test.xlsx');
- %二分类 随机生成数据。 200个数据 每个数据2个特征
- data=1*rand(300,2);
- label=zeros(300,1);
- %label(sqrt(data(:,1).^2+data(:,2).^2)<8)=1;
- label((data(:,2)+data(:,1)>1))=1;
- %在data上加常数特征项;
- data=[data,ones(size(data,1),1)];
- %打乱循序
- randIndex = randperm(size(data,1));
- data_new=data(randIndex,:);
- label_new=label(randIndex,:);
- %80%训练 20%测试
- k=0.8*size(data,1);
- X1=data_new(1:k,:);
- Y1=label_new(1:k,:);
- X2=data_new(k+1:end,:);
- Y2=label_new(k+1:end,:);
- [m1,n1] = size(X1);
- [m2,n2] = size(X2);
- Features=size(data,2); %特征个数
- %% 开始训练
- %设定学习率为0.01
- delta=1;
- lamda=0.2; %正则项系数
- theta1=rand(1,Features);
- %theta1=[.5,.5];
- %%训练模型
- %梯度下降算法求解theta(每次都是对全部的数据进行训练)
- num = 300; %最大迭代次数
- L=[];
- while(num)
- dt=zeros(1,Features);
- loss=0;
- for i=1:m1
- xx=X1(i,1:Features);
- yy=Y1(i,1);
- h=1/(1+exp(-(theta1 * xx')));
- dt=dt+(h-yy) * xx;
- loss=loss+ yy*log(h)+(1-yy)*log(1-h);
- end
- loss=-loss/m1;
- L=[L,loss];
- theta2=theta1 - delta*dt/m1 - lamda*theta1/m1;
- theta1=theta2;
- num = num - 1;
- if loss<0.01
- break;
- end
- end
- figure
- subplot(1,2,1)
- plot(L)
- title('loss')
- subplot(1,2,2)
- x=0:0.1:10;
- y=(-theta1(1)*x-theta1(3))/theta1(2);
- plot(x,y,'linewidth',2)
- hold on
- plot(data(label==1,1),data(label==1,2),'ro')
- hold on
- plot(data(label==0,1),data(label==0,2),'go')
- axis([0 1 0 1])
- %测试数据
- acc=0;
- for i=1:m2
- xx=X2(i,1:Features)';
- yy=Y2(i);
- finil=1/(1+exp(-theta2 * xx));
- if finil>0.5 && yy==1
- acc=acc+1;
- end
- if finil<=0.5 && yy==0
- acc=acc+1;
- end
- end
- acc/m2
- %测试结果: 测试准确率为95%。
得到的loss曲线为:
分类图像为:
matlab-逻辑回归二分类(Logistic Regression)的更多相关文章
- 逻辑回归模型(Logistic Regression)及Python实现
逻辑回归模型(Logistic Regression)及Python实现 http://www.cnblogs.com/sumai 1.模型 在分类问题中,比如判断邮件是否为垃圾邮件,判断肿瘤是否为阳 ...
- 斯坦福CS229机器学习课程笔记 part2:分类和逻辑回归 Classificatiion and logistic regression
Logistic Regression 逻辑回归 1.模型 逻辑回归解决的是分类问题,并且是二元分类问题(binary classification),y只有0,1两个取值.对于分类问题使用线性回归不 ...
- 分类和逻辑回归(Classification and logistic regression)
分类问题和线性回归问题问题很像,只是在分类问题中,我们预测的y值包含在一个小的离散数据集里.首先,认识一下二元分类(binary classification),在二元分类中,y的取值只能是0和1.例 ...
- 机器学习算法笔记1_2:分类和逻辑回归(Classification and Logistic regression)
形式: 採用sigmoid函数: g(z)=11+e−z 其导数为g′(z)=(1−g(z))g(z) 如果: 即: 若有m个样本,则似然函数形式是: 对数形式: 採用梯度上升法求其最大值 求导: 更 ...
- 斯坦福机器学习视频笔记 Week3 逻辑回归与正则化 Logistic Regression and Regularization
我们将讨论逻辑回归. 逻辑回归是一种将数据分类为离散结果的方法. 例如,我们可以使用逻辑回归将电子邮件分类为垃圾邮件或非垃圾邮件. 在本模块中,我们介绍分类的概念,逻辑回归的损失函数(cost fun ...
- 逻辑回归原理 面试 Logistic Regression
逻辑回归是假设数据服从独立且服从伯努利分布,多用于二分类场景,应用极大似然估计构造损失函数,并使用梯度下降法对参数进行估计.
- 吴恩达深度学习:2.9逻辑回归梯度下降法(Logistic Regression Gradient descent)
1.回顾logistic回归,下式中a是逻辑回归的输出,y是样本的真值标签值 . (1)现在写出该样本的偏导数流程图.假设这个样本只有两个特征x1和x2, 为了计算z,我们需要输入参数w1.w2和b还 ...
- Tensorflow 实现稠密输入数据的逻辑回归二分类
首先 实现一个尽可能少调用tf.nn模块儿的,自己手写相关的function import tensorflow as tf import numpy as np import melt_da ...
- 吴恩达机器学习笔记22-正则化逻辑回归模型(Regularized Logistic Regression)
针对逻辑回归问题,我们在之前的课程已经学习过两种优化算法:我们首先学习了使用梯度下降法来优化代价函数
随机推荐
- 企业级LNMP分离式部署
安装MySQL数据库 安装步骤介绍 本例采用MySQL二进制安装包进行安装演示 (1) 创建mysql用户的账号 [root@mysql ~]# groupadd mysql [root@my ...
- Zend studio快捷键使用
应用场景 快捷键 功能 查看快捷键 ctrl+shift+l 显示所有快捷键列表 查看和修改快捷键 打开Window->Preferences->General->keys 修改 ...
- 基于mpvue搭建微信小程序
mpvue是美团开源的一套语法,语法与vue.js一致,快速开发小程序的前端框架.框架基于vue.js核心,修改了vue.js的runtime和compiler实现,使用此框架,开发者可以完全使用vu ...
- Ubuntu16.04 换阿里源
国内阿里源速度比较快,北京联通下载极快.更新也比较稳定 1.备份 cp /etc/apt/source.list /etc/apt/source.list.bak 2.编辑source文件 sudo ...
- http options 请求
- 在VS2013、VS2015下如何配置DirectX SDK的开发环境
在Visual Studio 2013下配置DirectX SDK可以进行基于DirectX的3D大型应用程序的开发.如果在开发DirectX程序时不配置其开发环境会引起编译器报错, 下面就与大家分享 ...
- 带查询参数 可分页 的 T-SQL 语句写法
) DECLARE @pageindex int DECLARE @pagesize int DECLARE @classid int set @keys = '' ; ; ; with temptb ...
- 基于scrapy源码实现的自定义微型异步爬虫框架
一.scrapy原理 Scrapy 使用了 Twisted异步网络库来处理网络通讯.整体架构大致如下 Scrapy主要包括了以下组件: 引擎(Scrapy)用来处理整个系统的数据流处理, 触发事务(框 ...
- DNS搭建
构建主从服务DNS 1.主服务名字:ns1.amber.com #hostname ns1.amber.com bash 刷新一下 #bash 2.Vim /etc/hosts 3.Vim /etc/ ...
- CentOS7下安装Python3并保留Python2
1. 安装make编译指令的依赖环境 # yum -y install zlib-devel bzip2-devel openssl-devel ncurses-devel sqlite-devel ...