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)
针对逻辑回归问题,我们在之前的课程已经学习过两种优化算法:我们首先学习了使用梯度下降法来优化代价函数
随机推荐
- CSS 字体交互特效
一.鼠标悬浮时,字体颜色从左到右依次变化<!DOCTYPE html> <html> <head> <meta charset="utf-8&quo ...
- Python练习十
1.生成随机整数,从1-5取出来然后输入一个数字,来猜,如果大于,则打印bigger小了,则打印less如果相等,则打印equal. import random num1 = random.randi ...
- 学习笔记DL002:AI、机器学习、表示学习、深度学习,第一次大衰退
AI早期成就,相对朴素形式化环境,不要求世界知识.如IBM深蓝(Deep Blue)国际象棋系统,1997,击败世界冠军Garry Kasparov(Hsu,2002).国际象棋,简单领域,64个位置 ...
- 谈一谈java中的Canves机制
0--写在前面: 很多初学java的童鞋,常常很苦恼,一天天的都跟命令行较劲,好像很无聊的样子,如果能跳出命令行做出界面甚至一个画图界面,那将是一件很兴奋的事情:也可以让编程变的有趣:有脑洞的同学还可 ...
- 最新版SEMCMS_PHP_3.5 过滤不严导致sql注入
一.漏洞分析 在分析过程中看到网上已经有人发现semcms V2.4存在过滤不严导致sql注入的漏洞,不知道咋还没改,而且最新版过滤的关键字更少了. 首先查看首页文件index.php的代码 < ...
- 查看当前mysql使用的配置文件是哪个
my.cnf是mysql启动时加载的配置文件,一般会放在mysql的安装目录中,用户也可以放在其他目录加载.安装mysql后,系统中会有多个my.cnf文件,有些是用于测试的.使用locate my. ...
- 咱家自己的vim配置
" 四个空格设置 set tabstop=4 set softtabstop=4 set shiftwidth=4 set autoindent set smartindent set ex ...
- QQ聊天框变成方框口口口口的解决办法
QQ聊天框变成方框口口口口的解决办法 安装了QQ拼音输入法6.0之后,发现 QQ聊天对话框好友名称变成框口口口口口,网上没有找到办法,卸载轻聊版,安装完整版9.03之后,再次启动就好了.
- (转)配置、安装Apache24免装版
去过官网下载的应该都知道现在apache已经不提供.exe的一键安装程序的形式了,下载到的都只有免安装版本的. 首先下载,不在叙述.下载解压之后会得到如下的目录:. 1.进入:apache24le-- ...
- Oracle中rownum的基本用法
Oracle中rownum的基本用法 对于rownum来说它是oracle系统顺序分配为从查询返回的行的编号,返回的第一行分配的是1,第二行是2,依此类推,这个伪字段可以用于限制查询返回的总行数,且r ...