机器学习(十五) ——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 条评论
登录 后参与评论

相关文章

来自专栏LhWorld哥陪你聊算法

【神经网络篇】--基于数据集cifa10的经典模型实例

最终,在cifar-10数据集上,通过一个短时间小迭代的训练,可以达到大致73%的准确率,持续增加max_steps,可以期望准确率逐渐增加 如果max_ste...

2601
来自专栏Petrichor的专栏

深度学习: Regularization (正则化)

正则化,regularization,也即 约束 。是防止过拟合的诸多手段之一,很常用。

1.3K4
来自专栏计算机视觉战队

分割算法——可以分割一切目标(各种分割总结)

周末应该是一个好好休息的时间,但是一定会有在默默努力科研的你,由于最近是开学季,很多关注的朋友一直会问“计算机视觉战队平台有基础性的内容吗?”,今天我和大家说一...

6834
来自专栏机器之心

教程 | 手把手教你可视化交叉验证代码,提高模型预测能力

选自KDNuggets 机器之心编译 参与:刘晓坤、路雪 本文介绍了如何使用K折交叉验证提高模型预测能力,并对代码进行了可视化。 我们试着利用代码可视化来提高模...

41814
来自专栏郭耀华‘s Blog

MaxPooling的作用

1342
来自专栏郭耀华‘s Blog

MaxPooling的作用

maxpooling主要有两大作用 1. invariance(不变性),这种不变性包括translation(平移),rotation(旋转),scale(尺...

2987
来自专栏机器学习之旅

R开发:协调过滤推荐

对于realRatingMatrix有六种方法:IBCF(基于物品的推荐)、UBCF(基于用户的推荐)、PCA(主成分分析)、RANDOM(随机推荐)、SVD(...

1022
来自专栏数据科学学习手札

(数据科学学习手札36)tensorflow实现MLP

  我们在前面的数据科学学习手札34中也介绍过,作为最典型的神经网络,多层感知机(MLP)结构简单且规则,并且在隐层设计的足够完善时,可以拟合任意连续函数,而除...

4694
来自专栏ATYUN订阅号

Python中的白噪声时间训练

白噪声是时间序列预测中的一个重要概念。如果一个时间序列是白噪声,它是一个随机数序列,不能预测。如果预测误差不是白噪声,它暗示了预测模型仍有改进空间。 在本教程中...

8486
来自专栏瓜大三哥

图像分割(三) 之基于FPGA的局部自适应分割

图像分割(三) 之基于FPGA的局部自适应分割 在前面讲的自适应分割的原理如下: ? 由公式可以看出,窗口的分割值是对图像进行开窗,并计算窗口内的像素均值和标准...

2657

扫码关注云+社区

领取腾讯云代金券