机器学习之一:logistic回归分析(含Matlab代码)
来源:互联网 发布:如何获取网站数据库 编辑:程序博客网 时间:2024/05/21 12:08
logistic回归是回归分析的一种,函数表达式为
y = 1/(1+exp(-x))
在matlab中可以画出其graph:
x = -10:0.1:10;y = 1./(exp(-x)+1);plot(x,y,'g-x');title('logistic function');xlabel('x');ylabel('y');
以上是一维的情况。对于多维变量,可以定义一个超平面 代入原来的变量x中,得到:
对于任意变量x,可以代入上式计算出y值并与0.5比较进行分类, 分类式为:
其中sgn(x) 为符号函数。
为了演示logistic函数是版怎样用于分类的, 假定我们有一组数据,分别对应的类别为。 定义平方和(或L2-norm)代价函数为:
通过最小化代价函数可以得到模型的参数w和b 。最小化的方法有很多种, 在下面的代码中给出一个最简单的梯度下降法。其基本思想是利用代价函数对w和b的一阶导数。 由于CSDN输入公式太不方便了,关于导数如何求得请大家参考下面的Matlab代码。
%% generate random datashift = 2;n = 2;%2 dimN = 200;x = [randn(n,N/2)-shift, randn(n,N/2)*2+shift];y = [zeros(N/2,1);ones(N/2,1)];%show the datafigure;plot(x(1,1:N/2),x(2,1:N/2),'rs');hold on;plot(x(1,1+N/2:N),x(2,1+N/2:N),'go');title('2d training data');
上述code segment运行结果得到:
有了数据和模型,下面的代码将进行模型参数(即w和b)估计:
function [w,b,cost] = logistic_train(x,y,tol,max_iter)fprintf('training started...\n');n = size(x,1);N = size(x,2);w = ones(n,1)/n;b = 1;cost = [];count = 1;while 1 %find gradient partial_w = zeros(n,1); partial_b = 0; for i=1:N a = exp(w'*x(:,i)+b); partial_w = partial_w + (1/(a+1)-y(i))*(-1)/((1+a)*(1+a))*a*x(:,i); partial_b = partial_b + (1/(a+1)-y(i))*(-1)/((1+a)*(1+a))*a; end %find step size old_cost = logistic_cost(x,y,w,b); step = 1; while step > 1e-12 w1 = w - step*partial_w; b1 = b - step*partial_b; new_cost = logistic_cost(x,y,w1,b1); if new_cost < old_cost break; end step = step * 0.1; end if step <= 1e-12 fprintf('finished seraching the step size\n'); break; end w = w1; b = b1; cost = [cost,new_cost]; if new_cost < tol fprintf('converged after %d iterates!',count); break; end if count > max_iter fprintf('training stoped after %d iterates, not converged to desired precision!',count); break; end count = count + 1;end
调用上面logistic_train函数就能得到w,b。 如前述,训练方法为梯度下降法。
%%%training..[w,b,cost] = logistic_train(x,y,1e-6,100);%%show convergence curevedisp('training ended');figure;plot(cost,'g-s');xlabel('iterate');ylabel('cost');set(gca,'YScale','log');title('convergence curve');
返回值中的cost为每一步迭代后的代价值,其曲线图如下:
训练结束后,得到的w = [ -30.1994, -30.4356], b = [2.7303]. (由于样本是随机人工生成的,每次得到的w,b都会有些不同。)
最后,有了模型(即logistic function)和模型参数w,b, 就能进行分类了。下面的代码演示训练样本进行分类
%% plot the training datafigure;plot(x(1,1:N/2),x(2,1:N/2),'rs');hold on;plot(x(1,N/2+1:N),x(2,N/2+1:N),'go');%% visualize the classification areahold on;for x = -shift*5:0.5:shift*5 for y=-shift*5:0.5:shift*5 if 1/(1+exp(w(1:2)'*[x;y]+b)) > 0.5 plot(x,y,'g.'); else plot(x,y,'r.'); end endendtitle('classification result on training data');
0 0
- 机器学习之一:logistic回归分析(含Matlab代码)
- 分类器设计之logistic回归分析(含Matlab代码)
- 机器学习代码分析之一线性回归
- logistic 回归Matlab代码
- 机器学习-Logistic回归
- 机器学习-logistic回归
- 【机器学习】Logistic回归
- 机器学习-Logistic回归
- 机器学习-Logistic回归
- 机器学习--logistic回归
- 机器学习算法之一-logistic回归、softmax模型
- 《机器学习实战》代码片段学习4 Logistic回归
- 机器学习-- Logistic回归 Logistic Regression
- 机器学习/逻辑回归(logistic regression)/--附python代码
- 机器学习实战代码详解(五)Logistic回归
- 机器学习之回归分析——Logistic regression
- 机器学习4logistic回归
- 机器学习实战-Logistic回归
- EL表达式 choose的用法
- PHP--反射
- Snort - manual 笔记(三)
- Android应用程序访问linux驱动第四步:实现android应用程序
- Snort - manual 笔记(四)
- 机器学习之一:logistic回归分析(含Matlab代码)
- Snort - manual 笔记(五)
- TextView常用属性
- 设置导航栏颜色为透明色
- bool类型
- ubuntu 修改/etc/fstab文件,取消ubuntu开机硬盘自检
- Xcode7升级到Xcode8之后遇到文件冲突
- 嵌入式开源用到的一些库
- Linux命令之远程文件传输-scp