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)
针对逻辑回归问题,我们在之前的课程已经学习过两种优化算法:我们首先学习了使用梯度下降法来优化代价函数
随机推荐
- webbug3.0靶场第二关
由于是新手,当看见一个图片后一脸蒙比,查了一下才知道这原来叫做隐写术 看人家说破解图片隐写术用Stegsolve非常好用,然后查了一下kali软件仓库并没有找到Steegsolve这个软件,只能另想他 ...
- hadoop MapReduce
简单介绍 官方给出的介绍是hadoop MR是一个用于轻松编写以一种可靠的.容错的方式在商业化硬件上的大型集群上并行处理大量数据的应用程序的软件框架. MR任务通常会先把输入的数据集切分成独立的块(可 ...
- PTA——字符串逆序
PTA 7-59 字符串逆序 #include<stdio.h> #include<string.h> #define N 81 int main() { int i; cha ...
- java——————基础总结2
一 程序中常见的错误: 1,语法错误 2, 逻辑错误 3,运行时错误 二 定义class类的时候,如果前面加个public 那么class的类名必须要和文件名一致,否则就会 出现编译错误 三 编译源文 ...
- HtmlUnit学习总结
HtmlUnit学习总结 转载 2016年09月13日 15:58:25 标签: htmlunit / 爬虫 7304 本文摘抄其他博客或者技术论坛,自己搜集整理如下: HtmlUnit学习总结 摘要 ...
- bootstrap研究感想1
我—>新人,特纯的新人,受到方大神的建议,开始写博客,写一些工作时敲代码时的感受,学习模仿大神时的感悟. -------------------------------------------- ...
- vue state
vuex单一状态树,直接地定位任一特定的状态片段. vuex状态存储响应式,唯一store实例,从store中读取状态: 1.在计算属性中返回某个状态 2.在根实例中注册store选项,该 store ...
- 使用Visual Studio 2017 C++17模块(module)特性
环境: win7_x64旗舰版.VS2017企业版 一.安装VS2017 1.1 安装VS2017时,必须要勾选“使用C++的modules开发”选项 1.2 安装成功后,会在VS安装目录Micros ...
- 我发起了一个 ILBC 的 子项目 EScript
ILBC 见 <ILBC 规范> https://www.cnblogs.com/KSongKing/p/10354824.html 今天装了个 VsCode , 听说 VsCode ...
- IO队列深度max_queue_depth对系统性能的影响
前段时间,发生了一个问题引起了我对IO队列深度的研究. 存储服务器中linux kernel的mpt2sas驱动模块,将max_queue_depth设置为1024时,引起系统加载驱动时卡死,而调整为 ...