logistics回归简单应用(二)
警告:本文为小白入门学习笔记
网上下载的数据集链接: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回归简单应用(二)的更多相关文章
- logistics回归简单应用——梯度下降,梯度上升,牛顿算法(一)
警告:本文为小白入门学习笔记 由于之前写过详细的过程,所以接下来就简单描述,主要写实现中遇到的问题. 数据集是关于80人两门成绩来区分能否入学: 数据集: http://openclassroom.s ...
- 机器学习算法的Python实现 (1):logistics回归 与 线性判别分析(LDA)
先收藏............ 本文为笔者在学习周志华老师的机器学习教材后,写的课后习题的的编程题.之前放在答案的博文中,现在重新进行整理,将需要实现代码的部分单独拿出来,慢慢积累.希望能写一个机器学 ...
- 机器学习实战-Logistics回归
Logistics回归:实战,有两个特征X0,X1.100个样本,进行Logistics回归 1.导入数据 def load_data_set(): """ 加载数据集 ...
- Popular generalized linear models|GLMM| Zero-truncated Models|Zero-Inflated Models|matched case–control studies|多重logistics回归|ordered logistics regression
============================================================== Popular generalized linear models 将不同 ...
- iOS开发UI篇—Quartz2D简单使用(二)
iOS开发UI篇—Quartz2D简单使用(二) 一.画文字 代码: // // YYtextview.m // 04-写文字 // // Created by 孔医己 on 14-6-10. // ...
- 使用C语言实现二维,三维绘图算法(3)-简单的二维分形
使用C语言实现二维,三维绘图算法(3)-简单的二维分形 ---- 引言---- 每次使用OpenGL或DirectX写三维程序的时候, 都有一种隔靴搔痒的感觉, 对于内部的三维算法的实现不甚了解. 其 ...
- 【sql注入】简单实现二次注入
[sql注入]简单实现二次注入 本文转自:i春秋社区 测试代码1:内容详情页面 [PHP] 纯文本查看 复制代码 01 02 03 04 05 06 07 08 09 10 11 12 13 14 1 ...
- VC6下OpenGL 开发环境的构建外加一个简单的二维网络棋盘绘制示例
一.安装GLUT 工具包 GLUT 不是OpenGL 所必须的,但它会给我们的学习带来一定的方便,推荐安装. Windows 环境下的GLUT 本地下载地址:glut-install.zip(大小约为 ...
- Java秒杀简单设计二:数据库表和Dao层设计
Java秒杀简单设计二:数据库表Dao层设计 上一篇中搭建springboot项目环境和设计数据库表 https://www.cnblogs.com/taiguyiba/p/9791431.html ...
随机推荐
- PreparedStement 用户登录!
一.准备工作 在qy66数据库下,新建一个denglu表.添加 name password . package cn.zhouzhou; import java.sql.Connection; im ...
- CentOS 7 vi编辑命令
用vi打开一个yum文件 vi /usr/bin/yum 按 i 键后 进入insert模式,进入insert模式后才能进行修改 修改完成后 按esc键进入command模式, 然后:wq 保存文件 ...
- CSS3 flexbox 布局 ---- flex项目属性介绍
现在介绍用在flex项目上的css 属性,html结构还是用ul, li 结构,不过内容改成1,2,3, 样式的话,直接把给 ul 设display:flex 变成flex 容器,默认主轴的方向为水平 ...
- ajax 的json格式
我们平时使用ajax向后台传递数据时,通常会传递json格式的数据,当然这里还有其它格式,比如xml.html.script.text.jsonp格式. json类型的数据包含json对象和json类 ...
- kubernetes 一个服务的基本组成
1. service Service是kubernetes最核心的概念,通过创建Service,可以为一组具有相同功能的容器应用提供一个统一的入口地址,并且将请求进行负载分发到后端的各个容器应用上 k ...
- pycharm2019+破解补丁
事先声明,由于本人的pycharm已经装好,故部分图片来自网络,转载请注明地址 这篇博文以前是2018版本 后来换电脑重装时发现失效了 索性装的2019版本 具体步骤可以参考下面的删除线,新的补丁和激 ...
- 将xml文件由格式化变为压缩字符串
标签:去除xml文件的空格 有些时候解析xml文件,要求读取的字符串必须是压缩后的xml文件,不能有多余的空格.考虑到在<>标签内包含空格和大于号的情况,写了以下的转换方式. 传入的是压缩 ...
- 「UVA10766」Organising the Organisation(生成树计数)
BUPT 2017 Summer Training (for 16) #6C 题意 n个点,完全图减去m条边,求生成树个数. 题解 注意可能会给重边. 然后就是生成树计数了. 代码 #include ...
- 【HDU - 4342】History repeat itself(数学)
BUPT2017 wintertraining(15) #8C 题意 求第n(n<2^32)个非完全平方数m,以及\(\sum_{i=1}^m{\lfloor\sqrt i\rfloor}\) ...
- 【BZOJ5335】[TJOI2018]智力竞赛(二分图匹配)
[BZOJ5335][TJOI2018]智力竞赛(二分图匹配) 题面 BZOJ 洛谷 题解 假装图不是一个DAG想了半天,.发现并不会做. 于是假装图是一个DAG. 那么显然就是二分答案,然后求一个最 ...