【ML系列】简单的二元分类——Logistic回归
对于了解机器学习中二元分类问题的来源与分析,我认为王树义老师这篇文章讲的非常好,通俗且易懂:
http://blog.sciencenet.cn/blog-377709-1121098.html
但王树义老师的这篇文章并未详细的展开说明二元分类的具体实现方法,只是在宏观上的一个概述。在阅读这篇文章后,我便心生实现一个简单的二元分类并把前后过程记录下来的念头,所以本篇的主体以算法实现为主,略带分析,并不会涉及太多的理论知识。本篇以线性Logistic Regression为主要的模型工具来做一个简单的二元分类,关于Logistic Regression理论部分,我认为下面这篇文章讲的不错:
Logistic Regression(逻辑回归)原理及公式推导
数据生成与标记
Logistic Regression也是有监督学习中的一种,需要一定的训练样本,并且这些训练样本还需要预先进行标记分类。在本次试验中,从坐标(0, 0)到坐标(100, 100)这么一个矩形范围内随机生成100个整数坐标$(X_1, X_2)$作为训练样本,其中$ 0\leq X_1 \leq 100,\ \ 0\leq X_2 \leq 100 $。在生成样本的同时进行标记,为了使得样本分类显得不那么规整,又分布比较均匀,设定当样本坐标满足$ (X_{1}^2 + X_{2}^2) <80^2 $标记为0,否则标记为1。这么做恰好满足了刚刚提到的样本生成的两个要求,分界线为弧线,所以在样本量不大的情况下就不会显得那么规整,半径为80的1/4圆又恰好将100x100的矩形分为面积相等的两个部分。下图为生成并标记好的样本数据:
Cost Function计算
Cost Function在这里是我们判断模型准确性的主要依据,来源于单个样本Loss Function的总和平均,也就是说如果训练样本有M个,Cost Funciton可以写为:
$$ \mathrm{Cost} = \frac{1}{M} \sum \mathrm{Loss} $$
但是实际上有没有平均或者求和前的系数为多少对于后面权重参数的更新是没有影响的,所以有时为了方便后续的计算,会对这个系数做一些改变。这里需要着重提及的是Loss Function的计算。
在应用与二元分类的Logistic Regression中,常用的Loss Function主要是两种,方差$Loss_{Sq}$与交叉熵$Loss_{Lg}$,分别可以写为:
$$ Loss_{Sq} = (H(X, \theta) - y)^2 \\ Loss_{Lq} = y\ln(H(X, \theta)) + (1 - y)\ln(1 - H(X, \theta))$$
下面我们会简单的比较一下这两种Loss Fucntion计算方法的优劣,不过这里需要先提一下的是Loss Function本身,$Y$是样本标记矩阵,函数$H(X, \theta)$中的$X$为输入样本矩阵,$\theta$为权重矩阵。本质上来说,$H(X, \theta)$是训练样本关于权重$\theta$的线性回归再映射到sigmoid函数。这一部分的解释在Logistic Regression(逻辑回归)原理及公式推导 中已经被描述的很清楚了,便不再赘述。
梯度下降法
Cost Function计算出来后,这个二元分类问题就转变为了一个无约束优化问题,即找寻使得Cost尽可能小的权重矩阵$\theta$,梯度下降法便是一个常用的解决无约束优化问题的方法。关于梯度下降法的具体理论与简单实现,我认为这篇文章写的很详细,可以参考:深入浅出--梯度下降法及其实现。
梯度下降法的核心部分用Matlab描述出来实际上是很简单的:
while(True)
theta = theta - alpha * gradient
[cost, gradient] = CostFunction(theta, X, Y)
end
这算法中的gradient便是Cost Function关于权重$\theta$的梯度,如果用数学表示出来,设$J$为Cost Fucntion,则有(假设样本维度为3):
$$\mathrm{gradient} = \nabla J = \left< \frac{\partial J}{\partial \theta_1}, \frac{\partial J}{\partial \theta_2}, \frac{\partial J}{\partial \theta_3} \right>$$
这里尝试计算一下Loss Function方差形式的梯度,交叉熵形式的梯度计算较为复杂,不过原理相同,就不再展开了,这篇文章给出了详细的推导过程,可以参考:https://www.cnblogs.com/alfred2017/p/6627824.html
$$ \begin{align} \nabla Loss_{Sq}(x) & = \nabla (H(x, \theta) - y)^2 \\ & = 2(H(x, \theta) - y) \nabla H(x, \theta)\\ & = 2(H(x, \theta) - y) \frac{\exp(-\theta^T x)}{(1 + \exp(-\theta^T x))^2} \left< x^{(1)}, x^{(2)}, x^{(3)} \right> \end{align}$$
在这里关于样本x的函数$\frac{\exp(-\theta^T x)}{(1 + \exp(-\theta^T x))^2}$的存在予否实际上并不影响梯度下降的方向,这个函数在实数域上始终大于0,如在gradient的计算中考虑该项,则影响的仅仅是学习速率,最终结论并不会有太大的的变化,所以实际应用中可将其舍弃或看作为常数。
如果将这里的Loss Function以求和方式替换为Cost Function,则可以将其写为:
$$\begin{align} \nabla Cost_{Sq} & = \sum_{i = 1}^{i = M} \nabla Loss_{Sq}(x_i)\\ & =2 \sum \frac{\exp(-\theta^T x_i)}{(1 + \exp(-\theta^T x_i))^2} (H(x_i, \theta) - y_i) \left< x^{(1)}_i, x^{(2)}_i, x^{(3)}_i \right>\\& = 2K X^T (H(x_i, \theta) - Y) \end{align}$$
分类结果
中间蓝线为分界线
这条分界线是以sigmoid函数阈值为0.5计算出来的,也就是说落在分界线上的样本坐标点应当满足$H(x, \theta) = 0.5$,也意味着满足条件$\theta^TX = 0$,这里样本的特征维度皆为3,所以该条件可以写为(样本特征的第一维度皆为值为1的Bias,即$x_1 = 1$。$x_2$与$x_3$为样本坐标点),这同时也是分界线的函数表达式:
$$ \theta_1 + \theta_2 x_2 + \theta_3 x_3 = 0 $$
【ML系列】简单的二元分类——Logistic回归的更多相关文章
- SPSS数据分析—二分类Logistic回归模型
对于分类变量,我们知道通常使用卡方检验,但卡方检验仅能分析因素的作用,无法继续分析其作用大小和方向,并且当因素水平过多时,单元格被划分的越来越细,频数有可能为0,导致结果不准确,最重要的是卡方检验不能 ...
- Logistic回归分析之多分类Logistic回归
Logistic回归分析(logit回归)一般可分为3类,分别是二元Logistic回归分析.多分类Logistic回归分析和有序Logistic回归分析.logistic回归分析类型如下所示. Lo ...
- SPSS数据分析—多分类Logistic回归模型
前面我们说过二分类Logistic回归模型,但分类变量并不只是二分类一种,还有多分类,本次我们介绍当因变量为多分类时的Logistic回归模型. 多分类Logistic回归模型又分为有序多分类Logi ...
- 二分类Logistic回归模型
Logistic回归属于概率型的非线性回归,分为二分类和多分类的回归模型.这里只讲二分类. 对于二分类的Logistic回归,因变量y只有“是.否”两个取值,记为1和0.这种值为0/1的二值品质型变量 ...
- ML.NET 示例:二元分类之信用卡欺诈检测
写在前面 准备近期将微软的machinelearning-samples翻译成中文,水平有限,如有错漏,请大家多多指正. 如果有朋友对此感兴趣,可以加入我:https://github.com/fei ...
- ML.NET 示例:二元分类之用户评论的情绪分析
写在前面 准备近期将微软的machinelearning-samples翻译成中文,水平有限,如有错漏,请大家多多指正. 如果有朋友对此感兴趣,可以加入我:https://github.com/fei ...
- ML.NET 示例:二元分类之垃圾短信检测
写在前面 准备近期将微软的machinelearning-samples翻译成中文,水平有限,如有错漏,请大家多多指正. 如果有朋友对此感兴趣,可以加入我:https://github.com/fei ...
- SAS学习笔记36 二分类logistic回归
这里所拟合模型的AIC和SC统计量的值均小于只有截距的模型的相应统计量的值,说明含有自变量的模型较仅含有常数项的要好 但模型的最大重新换算 R 方为0.0993,说明模型拟合效果并不好,可能有其他危险 ...
- 过拟合/欠拟合&logistic回归等总结(Ng第二课)
昨天学习完了Ng的第二课,总结如下: 过拟合:欠拟合: 参数学习算法:非参数学习算法 局部加权回归 KD tree 最小二乘 中心极限定律 感知器算法 sigmod函数 梯度下降/梯度上升 二元分类 ...
随机推荐
- Selenium报错整理
1. driver不匹配(常见于打不开浏览器,或者浏览器能打开但是获取不了网页元素,或者无法sendKey等问题) Exception in thread "main" org.o ...
- Oracle 11g R2 RAC with ASM存储迁移--Rman copy&ASM Rebalance(一)
ASM GROUP-Rman copy迁移 0x00--环境介绍 VMware版本:VMware12pro 主机操作系统:RHEL6.5_64 共享存储使用VMWARE创建共享磁盘文件 数据库版本:O ...
- Servlet基础知识总结
Servlet是JavaWeb应用开发的核心组件.Servlet运行在Servlet容器中(例如最常用的Tomcat),它可以为各种客户请求提供相应服务.Servlet可以轻松完成以下任务: 动态生成 ...
- laravel5.5源码笔记(五、Pipeline管道模式)
Pipeline管道模式,也有人叫它装饰模式.应该说管道是装饰模式的一个变种,虽然思想都是一样的,但这个是闭包的版本,实现方式与传统装饰模式也不太一样.在laravel的源码中算是一个比较核心的设计模 ...
- Delphi 调试连接 任意Android手机/平板/盒子
Delphi有时候无法连接调试一些手机,解决方案: 1.安装Google USB Driver 2.通过设备管理器查看手机或平板USB的VID,PID 3.修改你的电脑上的android_winusb ...
- R语言学习笔记—决策树分类
一.简介 决策树分类算法(decision tree)通过树状结构对具有某特征属性的样本进行分类.其典型算法包括ID3算法.C4.5算法.C5.0算法.CART算法等.每一个决策树包括根节点(root ...
- linux 下c语言的pwd 实现
20155211实现mypwd 关于pwd 在Linux层次结构中,用户可以在被授权的任意目录下利用mkdir命令创建新目录,也可以利用cd命令从一个目录转换到另一个目录.然而,没有提示符来告知用户目 ...
- 20155307 2016-2017-2《Java程序设计》课程总结
预备作业1 预备作业1 预备作业1 第1周作业 第2周作业 第3周作业 第4周作业 第5周作业 第6周作业 第7周作业 第8周作业 第9周作业 第10周作业 自认为写得最好一篇博客是?为什么? 是这篇 ...
- CF 833 B. The Bakery
B. The Bakery http://codeforces.com/contest/833/problem/B 题意: 将一个长度为n的序列分成k份,每份的cost为不同的数的个数,求最大cost ...
- idea热部署时 编写Controller会接收不到参数
因为我是热部署启动服务器后才编写的request和getparameter 所以可能接收不到 重启一下服务器即可