社区所有版块导航
Python
python开源   Django   Python   DjangoApp   pycharm  
DATA
docker   Elasticsearch  
aigc
aigc   chatgpt  
WEB开发
linux   MongoDB   Redis   DATABASE   NGINX   其他Web框架   web工具   zookeeper   tornado   NoSql   Bootstrap   js   peewee   Git   bottle   IE   MQ   Jquery  
机器学习
机器学习算法  
Python88.com
反馈   公告   社区推广  
产品
短视频  
印度
印度  
Py学习  »  机器学习算法

机器学习|刘博士谈机器学习--机器的“是非观”(二)

数据魔术师 • 7 年前 • 735 次点击  


小编代表 魔术师祝大家端午节快乐!




不知不觉,已经到了第4篇。我最近在整理一些有趣的话题,如果可以,这个夏天,希望能多写一些。希望看文章的你也开始动笔,写作是记忆的最好方式。


1

上周六,我讲了用来判断是非的逻辑回归。其基本思想,是把数据里每个样本,根据其属于正例还是反例(是非题,无非两个结果),给其标签,比如正例为标记为1,反例标记为0。然后,把每个样本的标签为1看做一个随机事件,令该事件发生的概率p是样本特征的一个函数(这个函数与sigmoid函数形式一样)。具体来说,即,

log(p(1-p))=xb。其中,x是样本特征,b是参数。


紧接着,我介绍了极大似然估计来估计参数b。也即,对于任何一个样本,其标签记为y,那么该样本发生的边际概率为p^y(1-p)^(1-y)。这个概率实际上只有p里的参数b是未知的,因此可以看做是b的一个函数,称之为似然函数(详细讲解看上一篇)。最大化这个似然函数,就可以得到参数b。当然,通常的做法是去最大化似然函数的自然对数。具体如何优化,这属于另外一块内容,本篇不再讲述。


现代机器学习里,极大似然估计的方法很少见了,但这不代表逻辑回归不常用。实际上,在许多判断是非的数据挖掘问题上,逻辑回归依然很流行,但是在参数估计上有许多变化,值得深入分析。这篇公众号,我们接着聊逻辑回归。




2

如果不用极大似然估计,我们应该如何估计逻辑回归的参数呢?

损失(loss),有时称为成本(cost),是现代机器学习里常用的目标函数。换句话说,对于机器的教学,是试错然后减少犯错概率的过程。

这里其实引出两个话题。第一,机器学习参数,是以减少损失函数为目的,损失函数的形式就很重要。第二,损失是一定存在的,而且,通常,我们允许它存在。


3

如果我们是在对产品销量做预测,那么很显然,我们会立刻想到采用预测值与真实值之间的距离来作为损失。但是,销量是一个连续变量,可分类问题里的标签,只能是0或者1,用距离可以么?


在早些年,距离还是会被经常采用。也就是说,对于一个样本,便签是y,采用逻辑回归计算的y=1的概率是p。那么,该样本的预测损失即为(y_p)^2。这里,因为y只能是0或者1,你可以把p看做是预测出来的y的期望值,这样想,似乎这个损失函数就有了些意义。参数的估计即是最小化所有样本真实标签和期望标签之间的评论距离。


但是,不管怎么看,这种基于距离的损失总是让人感觉不舒服。首先,这个损失太容易饱和,无论预测出来的p是多少,距离最大不过是1。其次,根据马宁同学的汇报,这种损失函数是非凸的。所以,又有了其他的损失类型,比如交叉熵。


4

在讲交叉熵之前,需要先讲一下信息熵。关于信息熵的概念,论述起来过于复杂,我仅在二分类的问题下介绍我对它的理解。


信息熵,实际上是在表达你所获得的信息含有多大的信息量。举个简单的例子,我拿一个外观和吹风机一模一样的机器问你,这是不是刮胡刀(希望小编可以看懂这个梗并配对图)。你看,这是一个是非题,而且答案似乎也不难。你一定会认为这不是刮胡刀。换句话说,你会觉得这是刮胡刀的概率很低。


如果我告诉你,这的确不是刮胡刀,你会意外么?不会,因为大概率事件发生了。可是如果,我告诉你这是刮胡刀,你一定很意外,用网络术语,叫做这里信息量很大。总而言之,当小概率事件出现时,会带给我们较大的信息量。用p表示事件A发生的概率,那么,在看到A发生时,p越大,信息量越小;相反,p越小,信息量越大。


那怎么去衡量这个信息量的大小呢?你是不是想到了对数?log(p)的负数,即-log(p)表示概率p所对应的事件发生所带来的信息量,即熵。你瞧,当p=1时,信息量为零;当p=1时,信息量为无穷大。

5

那么,交叉熵是什么?比较理论的定义是,当你用一个概率分布去描述另一个概率分布时,会有多大不(yi)同(wai)。

在是非题中,事件的结果无非“是”与“不是”。用p表示参数b下事件结果为“是”的概率,用q表示结果为“是”的真实概率。那么,用p代表q所产生的交叉熵即为

-qlog(p)-(1-p)log(1-p)

这个交叉熵就是参数为b时的损失。


然而,我们无法知道事件结果为“是”的真实概率,仅仅是观测了训练集里样本的标签。在这种情况下,只能用这个观测到的标签去代表真实分布。当标签是1时,就令q=1,否则,令q=0。这时,概率q和标签y是一样的取值,最终,对任一样本的取值为

-ylog(p)-(1-y)log(1-p)


以上是关于交叉熵的常见解释,我不是特别喜欢这个解释,特别是用样本的标签来代表真实概率。我一般用另一个方法去思考交叉熵的形式。你可以考虑一个样本,如果其标签为0,给你的信息量是多大?参见第4节,信息量是-log(1-p),也就等于

-0log(p)-1log(1-p),这不正是交叉熵的式子么?

6

熵是可以累加的。给定一个参数b,对训练集里的每一个样本都可以计算一个交叉熵。假设有N个样本,最小化交叉熵的和,就可以得到参数b。


以上就是本篇公众号的内容,主要介绍了机器学习里的损失函数,在以后的文章中,我会经常用到它。


附录

附言1:请你们写下交叉熵的公式,看看最小化交叉熵和最大化似然函数,有区别么?


附言2:感谢朱同学的编辑和帮助,我总是拖延,这不是个好习惯。(没错...小编正在偷笑中)





欢迎大家在下方留言呐

来说说你跟机器学习的二三事!!!

扫描下面二维码关注数据魔术师

你会有更多惊喜!!

连载文章推荐

机器学习|刘博士谈机器学习--开篇

机器学习|刘博士谈机器学习--起手式

机器学习|刘博士谈机器学习--机器的“是非观”



今天看啥 - 高品质阅读平台
本文地址:http://www.jintiankansha.me/t/Ti4kc5hfiS
Python社区是高质量的Python/Django开发社区
本文地址:http://www.python88.com/topic/13723
 
735 次点击