机器学习(十五) ——logistic回归实践

机器学习(十五)——logistic回归实践

(原创内容,转载请注明来源,谢谢)

一、概述

logistic回归的核心是sigmoid函数,以及分类方式。当sigmoid值大于0.5时,判断结果为1,小于0.5时判断结果为0。公式为g(z)=1/(1+e-z)。其中,z=w0x0+w1x1…+wnxn,w为x的权重,其中x0=1。

决策边界是用于区分分类结果的一条线,线的两边代表分类的两种结果。

之前提到logistic,是使用梯度下降算法,用于获取代价函数J最小值时的参数。现在使用梯度上升算法,直接进行训练,不计算代价函数。

logistic的本质,就是计算出sigmoid的最佳参数。

二、梯度上升与决策边界

下面是一个用梯度上升算法进行分类的例子。

1、获取数据源

数据是存在txt文件中,需要读取出来。其中每一行的前面的列都是特征值,最后一列是分类结果。

需要注意的是,由于x0默认是1,在获取的内容中没有记录,因此需要手动把其加上。

2、定义sigmoid

3、梯度上升算法

和梯度下降,区别在于梯度下降的时候,weights是要减去α乘以偏导数,而梯度上升是采用加的方式。

这里训练500次,每次都是矩阵直接相乘的计算。

4、梯度上升的简化—随机梯度上升

梯度上升算法,每次都要进行矩阵的计算,当数据量很大时,这个矩阵的计算量非常大,因此可以改成随机梯度上升。

这里和梯度上升的区别,就是在于把矩阵运算改成了数值运算,按照顺序遍历样本,每次仅取一个样本进行梯度上升计算。

5、随机梯度上升优化

随机梯度上升,还有优化的空间。主要在于两点:

1)α

α表示的是每次改动的单位步长。由于随机梯度上升算法,在高频的地方会出现波动非常大的情况,这里让α在训练次数多的情况下略微递减,但又加上一个0.01,保证其不会减到0。这样可以改善高频抖动剧烈的现象。

2)随机样本

样本每次随机取一个,这样避免上下相关的数据出现问题,导致结果周期性波动。

随机梯度上升,是一种在线学习算法,其可以根据每次的输入,实时进行学习,而不用一次性读取全部的内容。相比之下,一次性读取全部内容的算法,称为批处理算法。

6、绘制结果

这个用到matplotlib,对里面的语法没有太多的研究。

7、绘制结果

下面三行weights分别是三种梯度上升,其在500次训练的情况下,基本上结果是一样的,因此图没有一一放出来。随机梯度的有点就是在于速度快,当特征值非常多或者样本非常大的时候,用随机梯度上升可以显著加快运算速度。

根据绘制出来的决策边界,可以看出只有两个红点和一个绿点存在误差,整体来说效果还是很好的。

三、实战-给定数据集进行预测

1、需求

下面进行一个实战。根据给定的数据量大的样本,进行分类。其是通过马的各种身体特征,预测马的身体情况。

2、分类函数

logistic回归,其分类就是根据sigmoid函数的计算结果,大于0.5时判断为1,否则是0。

3、读取数据并训练

整个过程和上面类似,不赘述。

4、测试训练结果

用训练出来的weights,配合测试数据进行测试,并比对实际结果,计算误差率。

5、执行测试

四、样本数据缺失情况下的处理

当采样存在问题,导致部分数据的特征值没有采集完全,或者分类结果没有采集到时,往往并不能重新采集,因为代价太大,因此可以用下面的方式来处理。

1、总体方式

用特征均值弥补、用特殊值如-1来弥补、忽略有缺失值的样本、使用相似样本的均值来弥补、用其他的机器学习算法预测缺失值等。

2、对于logistic回归

1)特征值缺失

特征值缺失的情况下,对于logistic,可以直接将缺失的特征值设置成0,这是因为在计算weights时,特征值为0的不会影响到最终的结果;另外结果是0的在sigmoid中也是正中间,没有趋向性。

2)分类结果缺失

分类结果缺失的,在logistic中,通常会抛弃,因为结果缺失的不太好知道实际的结果。

五、总结

logistic回归算法,总体来说还算好理解,理解好sigmoid和梯度下降/梯度上升算法,基本上就可以用logistic来解决问题了。

——written by linhxx 2018.01.16

原文发布于微信公众号 - 决胜机器学习(phpthinker)

原文发表时间:2018-01-16

本文参与腾讯云自媒体分享计划,欢迎正在阅读的你也加入,一起分享。

发表于

我来说两句

0 条评论
登录 后参与评论

相关文章

来自专栏null的专栏

利用Theano理解深度学习——Multilayer Perceptron

一、多层感知机MLP 1、MLP概述 对于含有单个隐含层的多层感知机(single-hidden-layer Multi-Layer Perceptron, M...

2886
来自专栏张俊红

Sklearn参数详解—LR模型

4566
来自专栏闪电gogogo的专栏

IEEE Trans 2006 使用K-SVD构造超完备字典以进行稀疏表示(稀疏分解)

K-SVD可以看做K-means的一种泛化形式,K-means算法总每个信号量只能用一个原子来近似表示,而K-SVD中每个信号是用多个原子的线性组合来表示的。 ...

4009
来自专栏机器学习算法原理与实践

scikit-learn 逻辑回归类库使用小结

    之前在逻辑回归原理小结这篇文章中,对逻辑回归的原理做了小结。这里接着对scikit-learn中逻辑回归类库的我的使用经验做一个总结。重点讲述调参中要注...

745
来自专栏机器学习之旅

总结:机器学习面试之常见决策树异同

历史回顾:1984年提出的cart,1986年提出的ID3,1993年提出的c4.5

361
来自专栏云时之间

深度学习与TensorFlow:实现卷积神经网络

1644
来自专栏杂七杂八

神经网络训练细节part1(下)

学习率的选择通过先用少部分数据来进行测试,选择一个较好的学习速率。选择的方式可以为在某个范围内随机取值,观察样本的准确率

522
来自专栏企鹅号快讯

Python数据建模-回归分析

主题 数据建模 我还是一次性将一些理论的知识整理完呗,大家可以选择性地看看就好,后续会找一些实例来练练。 一、分类与预测 分类与预测是预测问题的2种主要实...

2719
来自专栏智能算法

KNN最近邻算法及其Python实现

k-NN是一种基本的分类和回归方法,用于分类时,算法思路较简单:通过计算不同特征之间的距离方法来得到最近的k个训练实例,根据k个实例的类别采用多数表决等方式进...

4837
来自专栏ATYUN订阅号

利用协方差,Pearson相关系数和Spearman相关系数确定变量间的关系

数据集中的变量之间可能存在复杂且未知的关系。重要的是发现和量化数据集的变量相关的程度。这些知识可以帮你更好地准备数据,以满足机器学习算法的预期,例如线性回归,其...

1343

扫描关注云+社区