警告:本文为小白入门学习笔记

网上下载的数据集链接:https://pan.baidu.com/s/1NwSXJOCzgihPFZfw3NfnfA 密码: jmwz

不知道这个数据集干什么用的,根据直观分析应该属于分类问题,有两个变量X1和X2,Y取值非零即一,用MATLAB分析发现第二列对Y的影响较为明显

大致以8为分界线,8右边Y值为0,8左边Y为1.

首先假设舍去属性X1,设数据集为(X2,Y)。然后分别用线性回归(Liner regression)和逻辑回归(logistics regression)对数据集进行分类分析比较。最后再把属性X1加上看看结果怎么样。

(1)假设函数(hypothesis function):

  参数(parameter)设为w = [w1;w2];

  hw(x) = w1 + w2x;

(2)代价函数(cost function):

  J(w) = 1/2m∑(hw(x(i)) - y(i))^2 ;  (m是数据集的个数,乘上2是为了后来求导时候方便)

  J(w) = 1/200∑(w1 + w2x(i) - y(i))^2;

(3)梯度下降算法(gradient descent algorithm)求解出参数w1和w2:

  w1 := ðJ(w1,w2)/ðw1 = 1/m∑(hw(x(i)) - y(i));

  w2 := ðJ(w1,w2)/ðw2 = 1/m∑(hw(x(i)) - y(i))x(i);

  (ð表示求偏导)

  repeat until convergence {

    w1 := w1 - α1/m∑(hw(x(i)) - y(i));

    w2 := w2 - α1/m∑(hw(x(i)) - y(i))x(i);

  };

  (α是步长,使用MATLAB/octave是自动选取)

  注意:在每次更新w1,w2时候应该注意更新的顺序,应该是先一起计算再一同更新,也就是每一次更新时,w1和w2的值都在变化。

  接下来就使用MATLAB(octave也可以)来测试整个分析过程是否正确,然后再用python代码实现。

(4)MATLAB模拟(octave同理可用)

新建一个costFunction.m文件 写入函数:

function[jval,gradient] = costFunction(w)
filename = 'testSet.txt';
A = importdata(filename);
x = A(:,2);
y = A(:,3);

m = 0;
for i = 1:100
  m = m + (w(1) + w(2) * x(i) - y(i)).^2;
end
jval = 1/200 * m;

n = 0;
for i = 1:100
  n = n + (w(1) + w(2) * x(i) - y(i));
end
gradient(1) = 1/100 * n;

n = 0;
for i = 1:100
  n = n + (w(1) + w(2) * x(i) - y(i))*x(i);
end
gradient(2) = 1/100 * n;

  命令行窗口输入:

>> options = optimset('GradObj','on','MaxIter',100);
>> initialW = zeros(2,1);
>> [optW,functionVal,exitFlag] = fminunc(@costFunction,initialW,options)

  返回结果:

optW =

1.1202
-0.0897

functionVal =

0.0385

exitFlag =

1

  结果表明:

  w1 = 1.1202   ;   w2 = -0.0897  ;  函数返回的结果是0.0385(这个值越接近零,表示拟合的越好)  ;extiFlag = 1表示收敛

(5)画出图像

既然已经得到了w1和w2的值那就可以画出假设函数(hypothesis function)看看这么样吧!!

结果是这样的,这是线性回归结果,但是对于分类为题,这样做并不是什么好主意(只是用它来作比较练练手),所以接下来选用logistics回归试一试。

因为对于这个数据集,函数值Y = 0 or 1,所以希望对于输入值x,假设函数 0<=Y<=1,这样最好不过了!

不同之处需要改变假设函数(hypothesis function):

hw(x) = g(w'x)      (这里'为转置的意思)

g(z) = 1/(1+e‾z)

那么这个时候hw(x)表示的什么意识呢?函数的输出值是对输入值x可能性的评价

例如:判断一个肿瘤(tumor)是良性还是恶性,  假如现在只取肿瘤大小x这个属性进行分析。

如果当x为一定值时 hw(x) = 0.7,可以说这个肿瘤有70%的概率是恶性肿瘤。

所以:hw(x) = P(y=1|x;w)        (表示在x,w的条件下,y=1的概率是多少)

(1)首先让表达式以矩阵的形式表示

  w = [w1;w2]  ;  x = [1;x];

  z = w1 + w2x = w'x;

  hw(z) =   1/(1+e‾z);

然后如何计算w1和w2呢?

(2)代价函数(cost function)

  J(w) = 1/m∑1/2(hw(x(i)) - y(i))^2 ;

  设:cost(hw(x),y) = 1/2(hw(x) - y)^2;

   cost(hw(x),y)= -log(hw(x)) if y=1;

   cost(hw(x),y)= -log(1 - hw(x)) if y=0;

  合并成一个连续函数:

   cost(hw(x),y)= -y*log(hw(x)) - (1-y)*log(1-hw(x));

  代入代价函数中得:

  J(w) = -1/m[∑-y(i)*log(hw(x(i))) - (1-y(i)*log(1-hw(x(i)))];

(3)梯度下降算法(gradient descent algorithm)

  repeat{

  wj :=wj - α(δJ(w)/δwj), (j = 1,2......n)

}

学习步长)

求偏导(懒得打字了):

更新过程就可以写成

repeat{

  wj := wj - α1/m∑(hw(x(i)) - y(i))xj(i) ;     (j = 1,2......n)

}

其中x0 = 1; 是不是十分眼熟,这个式子和上面的式子一样,只是假设函数hw(x)不同罢了。

(4)MATLAB实现

  

决策曲线:

logistics回归简单应用(二)的更多相关文章

  1. logistics回归简单应用——梯度下降,梯度上升,牛顿算法(一)

    警告:本文为小白入门学习笔记 由于之前写过详细的过程,所以接下来就简单描述,主要写实现中遇到的问题. 数据集是关于80人两门成绩来区分能否入学: 数据集: http://openclassroom.s ...

  2. 机器学习算法的Python实现 (1):logistics回归 与 线性判别分析(LDA)

    先收藏............ 本文为笔者在学习周志华老师的机器学习教材后,写的课后习题的的编程题.之前放在答案的博文中,现在重新进行整理,将需要实现代码的部分单独拿出来,慢慢积累.希望能写一个机器学 ...

  3. 机器学习实战-Logistics回归

    Logistics回归:实战,有两个特征X0,X1.100个样本,进行Logistics回归 1.导入数据 def load_data_set(): """ 加载数据集 ...

  4. Popular generalized linear models|GLMM| Zero-truncated Models|Zero-Inflated Models|matched case–control studies|多重logistics回归|ordered logistics regression

    ============================================================== Popular generalized linear models 将不同 ...

  5. iOS开发UI篇—Quartz2D简单使用(二)

    iOS开发UI篇—Quartz2D简单使用(二) 一.画文字 代码: // // YYtextview.m // 04-写文字 // // Created by 孔医己 on 14-6-10. // ...

  6. 使用C语言实现二维,三维绘图算法(3)-简单的二维分形

    使用C语言实现二维,三维绘图算法(3)-简单的二维分形 ---- 引言---- 每次使用OpenGL或DirectX写三维程序的时候, 都有一种隔靴搔痒的感觉, 对于内部的三维算法的实现不甚了解. 其 ...

  7. 【sql注入】简单实现二次注入

    [sql注入]简单实现二次注入 本文转自:i春秋社区 测试代码1:内容详情页面 [PHP] 纯文本查看 复制代码 01 02 03 04 05 06 07 08 09 10 11 12 13 14 1 ...

  8. VC6下OpenGL 开发环境的构建外加一个简单的二维网络棋盘绘制示例

    一.安装GLUT 工具包 GLUT 不是OpenGL 所必须的,但它会给我们的学习带来一定的方便,推荐安装. Windows 环境下的GLUT 本地下载地址:glut-install.zip(大小约为 ...

  9. Java秒杀简单设计二:数据库表和Dao层设计

    Java秒杀简单设计二:数据库表Dao层设计 上一篇中搭建springboot项目环境和设计数据库表  https://www.cnblogs.com/taiguyiba/p/9791431.html ...

随机推荐

  1. 初识Anrdiod SDK

    概念 SDK:(software development kit)软件开发工具包.被软件开发工程师用于为特定的软件包.软件框架.硬件平台.操作系统等建立应用软件的开发工具的集合. 因此,Android ...

  2. powerdesigner 16.5 不允许有扩展属性,或对象不存在

    创建完之后这边会出现 选择刚创建的用户 这样就可以了

  3. 了解AutoCAD对象层次结构 —— 2 ——文档

    再次想象另外一个场景:启动AutoCAD程序后,您新建了两个.dwg文件,也就是说创建了两个文档(Document)对象.将窗口进行层叠,您看到的窗口应该与下图类似: 图 4‑3 如何访问这些文档呢? ...

  4. POJ 2112-Optimal Milking-二分答案+二分图匹配

    此题有多种做法. 使用floyd算法预处理最短路,二分答案,对于每一个mid,如果距离比mid小就连边, 注意把每个机器分成m个点.这样跑一个最大匹配,如果都匹配上就可以减小mid值. 用的算法比较多 ...

  5. 进程间的通讯————IPC

    """ IPC 指的是进程间通讯 之所以开启子进程 肯定需要它帮我们完成任务 很多情况下 需要将数据返回给父进程 然而 进程内存是物理隔离的 解决方案: 1.将共享数据放 ...

  6. 解决Altera家的ROM仿真数据一直为0

    BUG现象 各种配置都正确,但ROM就是不出数据,输出一直为零. 解决方式 对于rom的仿真,要更改生成的rom文件的一个地方,主要是由于相对路径与绝对路径的问题. 所以最简单的解决方法是把mif文件 ...

  7. MT【273】2014新课标压轴题之$\ln2$的估计

    已知函数$f(x)=e^x-e^{-x}-2x$(1)讨论$f(x)$的单调性;(2)设$g(x)=f(2x)-4bf(x),$当$x>0$时,$g(x)>0,$求$b$的最大值;(3)已 ...

  8. 【CF446C】DZY Loves Fibonacci Numbers (线段树 + 斐波那契数列)

    Description ​ 看题戳我 给你一个序列,要求支持区间加斐波那契数列和区间求和.\(~n \leq 3 \times 10 ^ 5, ~fib_1 = fib_2 = 1~\). Solut ...

  9. Codeforces Round #429 (Div. 1) C. On the Bench(dp + 组合数)

    题意 一个长度为 \(n\) 的序列 \(A\) ,定义一个 \(1\) 到 \(n\) 的排列 \(p\) 是合法的,当且仅当 \(\forall i \in [1, n − 1], A_{p_i} ...

  10. 实验六 MapReduce实验:二次排序

    实验指导: 6.1 实验目的基于MapReduce思想,编写SecondarySort程序. 6.2 实验要求要能理解MapReduce编程思想,会编写MapReduce版本二次排序程序,然后将其执行 ...