本文主要讲解在matlab中实现Linear Regression和Logistic Regression的代码,并不涉及公式推导。具体的计算公式和推导,相关的机器学习文章和视频一大堆,推荐看Andrew NG的公开课。

一、线性回归(Linear Regression)

方法一、利用公式 :

function [ theta ] = linearReg()
%线性回归。
X=[1 1;1 2;1 3;1 4]; %注意第一列全为1,即x0=1,第二列才为x1
Y=[1.1;2.2;2.7;3.8];
A=inv(X'*X);
theta=A*X'*Y; %根据公式theta=(X'*X)^(-1)*X'*Y;
end

这种方法最简单,但是公式推导过程很复杂。

方法二:使用梯度下降法迭代

function theta=linearRegression()
% 梯度下降法寻找最合适的theta,使得J最小
options=optimset('GradObj','on','MaxIter',100);
inittheta=[1 1]';
theta=fminunc(@costFunc,inittheta,options);
end %%
function [J,gradient]= costFunc(theta)
%J为代价函数。
%y=theta(0)*x0+theta(1)*x1; 找出最好的theta来拟合曲线。
%使得J最小的theta就是最好的theta
x=[1;2;3;4];
y=[1.1;2.2;2.7;3.8];
m=size(x,1);
hypothesis=theta(1)+theta(2)*x;
delta=hypothesis-y;
J=sum(delta.^2)/(2*m);
gradient(1)=sum(delta.*1)/m; %x0=1;
gradient(2)=sum(delta.*x)/m;
end

这两种方法,都采用数据:

x=[1;2;3;4];
y=[1.1;2.2;2.7;3.8];

当然,用的时候可以换成其它数据,两种方法得出的结果都是

theta =

    0.3000
0.8600

即可以学习到线性函数:
Y=0.3000+0.8600*X;

二、Logistic回归(Logistic Regression)

方法一、利用matlab自带的函数glmfit() :

function theta=logisticRegression()
% logistic regression的参数theta,可以用matlab自带函数glmfit求出
x = [0.0 0.1 0.7 1.0 1.1 1.3 1.4 1.7 2.1 2.2]';
y = [0 0 1 0 0 0 1 1 1 1]';
theta = glmfit(x, [y ones(10,1)], 'binomial', 'link', 'logit')
end

方法二:使用梯度下降法迭代

function theta =logisticReg()
% 梯度下降法寻找最合适的theta,使得代价函数J最小
options=optimset('GradObj','on','MaxIter',100);
inittheta=[0 0]';
theta=fminunc(@costFunc,inittheta,options);
end %%
function [J,gradient] = costFunc(theta)
x = [0.0 0.1 0.7 1.0 1.1 1.3 1.4 1.7 2.1 2.2]';
y = [0 0 1 0 0 0 1 1 1 1]';
m=size(x,1);
tmp=theta(1)+theta(2)*x; %theta'x
hypothesis=1./(1+exp(-tmp)); %logistic function
delta=log(hypothesis+0.01).*y+(1-y).*log(1-hypothesis+0.01); %加上0.01是为了防止x为0
J=-sum(delta)/m;
gradient(1)=sum(hypothesis-y)/m; %x0=1;
gradient(2)=sum((hypothesis-y).*x)/m; %theta=theta-a*gradient; gradient=-J'(theta)
end

两种方法都使用数据:

x = [0.0 0.1 0.7 1.0 1.1 1.3 1.4 1.7 2.1 2.2]';
y = [0 0 1 0 0 0 1 1 1 1]';

注意,Y的值只能取0和1两种。

得到结果:

theta =

   -3.4932
2.9402

即可以学习到函数:

Y=1/(1+exp(3.4932-2.9402*x));

在matlab中实现线性回归和logistic回归的更多相关文章

  1. 回归——线性回归,Logistic回归,范数,最大似然,梯度,最小二乘……

    写在前面:在本篇博客中,旨在对线性回归从新的角度考虑,然后引入解决线性回归中会用到的最大似然近似(Maximum Likelihood Appropriation-MLA) 求解模型中的参数,以及梯度 ...

  2. 对线性回归,logistic回归和一般回归的认识

    原文:http://www.cnblogs.com/jerrylead/archive/2011/03/05/1971867.html#3281650 对线性回归,logistic回归和一般回归的认识 ...

  3. 对线性回归,logistic回归和一般回归

    对线性回归,logistic回归和一般回归 [转自]:http://www.cnblogs.com/jerrylead JerryLead 2011年2月27日 作为一个机器学习初学者,认识有限,表述 ...

  4. 机器学习算法(优化)之一:梯度下降算法、随机梯度下降(应用于线性回归、Logistic回归等等)

    本文介绍了机器学习中基本的优化算法—梯度下降算法和随机梯度下降算法,以及实际应用到线性回归.Logistic回归.矩阵分解推荐算法等ML中. 梯度下降算法基本公式 常见的符号说明和损失函数 X :所有 ...

  5. 线性回归,logistic回归和一般回归

    1 摘要 本报告是在学习斯坦福大学机器学习课程前四节加上配套的讲义后的总结与认识.前四节主要讲述了回归问题,回归属于有监督学习中的一种方法.该方法的核心思想是从连续型统计数据中得到数学模型,然后将该数 ...

  6. 线性回归、Logistic回归、Softmax回归

    线性回归(Linear Regression) 什么是回归? 给定一些数据,{(x1,y1),(x2,y2)…(xn,yn) },x的值来预测y的值,通常地,y的值是连续的就是回归问题,y的值是离散的 ...

  7. 1.线性回归、Logistic回归、Softmax回归

    本次回归章节的思维导图版总结已经总结完毕,但自我感觉不甚理想.不知道是模型太简单还是由于自己本身的原因,总结出来的东西感觉很少,好像知识点都覆盖上了,但乍一看,好像又什么都没有.不管怎样,算是一次尝试 ...

  8. 线性回归,logistic回归分类

    学习过程 下面是一个典型的机器学习的过程,首先给出一个输入数据,我们的算法会通过一系列的过程得到一个估计的函数,这个函数有能力对没有见过的新数据给出一个新的估计,也被称为构建一个模型.就如同上面的线性 ...

  9. 机器学习之线性回归以及Logistic回归

    1.线性回归 回归的目的是预测数值型数据的目标值.目标值的计算是通过一个线性方程得到的,这个方程称为回归方程,各未知量(特征)前的系数为回归系数,求这些系数的过程就是回归. 对于普通线性回归使用的损失 ...

随机推荐

  1. 第02章:MongoDB安装

    ①下载 https://www.mongodb.com/  下载所需版本的tar.gz ②解压安装 tar -zxvf mongodb-3.2.12.tar.gz mv -r mongodb-3.2. ...

  2. java -help

    Usage: java [-options] class [args...] (to execute a class) or java [-options] -jar jarfile [args... ...

  3. MyBatis(一)helloWorld程序

    一.准备两个jar包,第一个:下载myBatis-3.3.1.jar,这里是在CSDN网站处下载的,因为官网打不开.第二个:mysql-connector-java-5.0.8-bin.jar,这个j ...

  4. ibatis.net之我的调整:Update语句的动态set字段

    动态Update语句 如果Map中指定多个字段 <update id="UpdateStaff"> update Staff set Name=#Name#,InDat ...

  5. 基于udp协议的套接字,socketserver模块,多道技术,进程理论

    进程指的是一个正在进行/运行的程序,进程是用来描述程序执行过程的虚拟概念 进程vs程序 程序:一堆的代码 进程:程序执行的过程 进程的概念起源于操作系统,进程是操作系统最核心的概念,操作系统的其他所有 ...

  6. classmethod,staticmethod

    '''1 绑定方法: 在类内部定义的函数,默认就是给对象来用,而且是绑定给对象用的,称为对象的绑定方法 绑定对象的方法特殊之处: 应该由对象来调用,对象来调用,会自动将对象当作第一个参数传入 绑定到类 ...

  7. (转).net面试题(老赵)

    转自:http://www.cnblogs.com/chenxiaoran/archive/2012/05/27/2519988.html 1.什么是CLR 公共语言运行时(Comman langua ...

  8. la3890(半平面交)

    蓝书半平面交例题 #include<iostream> #include<cstring> #include<cmath> #include<cstdio&g ...

  9. Hdu2068 RPG的错排 2017-06-27 15:27 30人阅读 评论(0) 收藏

    RPG的错排 Time Limit : 1000/1000ms (Java/Other)   Memory Limit : 32768/32768K (Java/Other) Total Submis ...

  10. 加密算法比较3DES AES RSA ECC MD5 SHA1等

    加 密算法通常分为对称性加密算法和非对称性加密算法,对于对称性加密算法,信息接收双方都需事先知道密匙和加解密算法且其密匙是相同的,之后便是对数据进行 加解密了.非对称算法与之不同,发送双方A,B事先均 ...