机器学习与数据挖掘人工智能/模式识别/机器学习精华专题深度学习

2020机器学习GBDT 分类问题(1)

2020-03-23  本文已影响0人  zidea
machine_learning.jpg

今天用的数据集,通过训练来预测用户是否会喜欢这部电影。

喜欢爆米花电影 年龄 Favorite Color American Captial2
Yes 12 Blue Yes
Yes 87 Green Yes
No 44 Blue No

因为今天主要介绍算法,所以我们对之前数据集进行裁剪,只保留 3 条数据。

输入数据,我们现在已经学习到如何使用数据Data \{(x_i,y_i) \}_{i=1}^n,这里我还是要再啰嗦一句x_i 表示一行,也就是一个样本。y_i 表示用户是否喜欢该电影,也就是二分类问题(喜欢还是不喜欢)

可以选择不同损失函数。其实有时候借助图形可以帮助我们更好理解损失函数

定义损失函数

\sum_{i=1}^N y_i \times \log (p) + (1 - y_i) \times \log (1-p)

蓝色表示喜欢美国队长2的人,而红色则表示不喜欢的人。我们通过图来将表格表示出来。

现在,就像我们对 Logistic 回归所做的那样,会计算给定的数据的对数(似然)估计

\sum_{i=1}^N y_i \times \log (p) + (1 - y_i) \times \log (1 - p)

喜欢爆米花电影 年龄 Favorite Color American Captial2
Yes 12 Blue Yes

\begin{aligned} \sum_{i=1}^N y_i \times \log (p) + (1 - y_i) \times \log (1 - p) \\ 1 \times \log 0.67 + (1 - 1) \times \log (1 - 0.67)\\ \log (0.67) + \log(0.67) + \log(1 - 0.67) \end{aligned}

-0.57 + - 0.57 + -1.6 = -2.7

因为预测得越好,对数(似然)越大,所以进行逻辑回归时,的目标是使对数(似然)最大化,也就是最大化似然估计。

这样一来如果我们想使用对数(似然)作为损失函数,就需要将对数(似然)乘以-1,从而将求最大似然转换为求最小值来更好拟合数据。
- \sum_{i=1}^N y_i \times \log (p) + (1 - y_i) \times \log (1 - p)

现在需要进行一系列转换后将负对数(似然),使它是预测对数(似然)的函数,来代替预测概率 p。

- \left[ Observed \times \log(p) + (1 - Observed) \times \log (1 - p) \right]

Observed 就是我们观测到的y_i
- Observed \times \log(p) - (1 - Observed) \times \log (1 - p)
我们去掉外层括号,暂时只考虑单个样本的损失值。开始进行化简

- Observed \times \log(p) - \log (1-p) + Observed \times \log (1 - p)

将具有 Observed 的项进行合并,得到下面式子
- Observed \times [\log p + \log (1 -p) ] - \log (1 -p)
\log p + \log (1 -p) 这部分用对数几率来表示
\log p - \log (1-p) = \frac{\log p}{\log (1-p)} = \log (\frac{p}{1 - p}) = \log(odds)
- Observed \times \log(odds) - \log (1 -p)

p = \frac{e^{\log(odds)}}{1 + e^{\log(odds)}}
这里我还是简单推到一下,
\frac{p}{1 - p} = e^{log(odds)}

\begin{aligned} p = (1 - p) e^{log(odds)}\\ p(1 + e^{log(odds)}) = e^{log(odds)}\\ p = \frac{e^{\log(odds)}}{1 + e^{\log(odds)}} \end{aligned}

好我们继续向下进行推到

\log (1-p) = \log (1 - \frac{e^{\log(odds)}}{1 + e^{\log(odds)}})

\log(1 -p) = \log (\frac{1}{1 + e^{\log(odds)}}) = \log(1) - \log(1 + e^{\log(odds)})

\log(1) - \log(1 + e^{\log(odds)}) = -\log(1 + e^{\log(odds)})
到现在为止我们成功将概率的似然估计转换为了对数几率表示损失函数,接下来就是开始求导过程
-Observed \times \log(odds) + \log(1 + e^{\log(odds)})

然后对\log(odds)进行求导

\frac{d}{d \log(odds)} = -Observed + \frac{1}{1 + e^{\log(odds)}} \times e^{\log(odds)}

-Observed + \frac{e^{\log(odds)}}{1 + e^{\log(odds)}} = -Observed + p

这是因为我们之前已经知道p = frac{e^{\log(odds)}}{1 + e^{\log(odds)}},在实际开发中,我们到底使用概率表达损失函数还是使用对数几率的函数需要根据实际情况而定。

-Observed \times \gamma + \log(1 + e^{\gamma}) \, for\,\gamma = \log(odds)

现在我们对求和
\begin{aligned} -1 \times \log(odds) + \log(1 + e^{\log(odds)})\\ -1 \times \log(odds) + \log(1 + e^{\log(odds)})\\ -0 \times \log(odds) + \log(1 + e^{\log(odds)})\\ \end{aligned}

\gamma的均值最小值,也就是表示我们需要找到一个可以取和最小的\log(odds)最小值就需要我们对上式进行求导

\begin{aligned} -1 \times \log(odds) + \log(1 + e^{\log(odds)}) \rightarrow -1 + \frac{e^{\log(odds)}}{1 + e^{\log(odds)}}\\ -1 \times \log(odds) + \log(1 + e^{\log(odds)}) \rightarrow -1 + \frac{e^{\log(odds)}}{1 + e^{\log(odds)}}\\ -0 \times \log(odds) + \log(1 + e^{\log(odds)}) \rightarrow -0 + \frac{e^{\log(odds)}}{1 + e^{\log(odds)}} \end{aligned}

\begin{aligned} -1 \times \log(odds) + \log(1 + e^{\log(odds)}) \rightarrow -1 + p\\ -1 \times \log(odds) + \log(1 + e^{\log(odds)}) \rightarrow -1 + p\\ -0 \times \log(odds) + \log(1 + e^{\log(odds)}) \rightarrow -0 + p \end{aligned}

-1 + p + -1 + p + 0 + p = 0 \rightarrow p = \frac{2}{3}
大家感觉为什么绕这么一个圈子,最后结果就是和我们根据数据和基础概率就可以得到结论。好计算出概率后,我们就可以根据概率来计算几率

\log(odds) = \log(\frac{p}{1-p}) = \log \frac{2}{1}
F_0(x) = \log \frac{2}{1} = 0.69

最后希望大家关注我们微信公众号


wechat.jpeg
上一篇 下一篇

猜你喜欢

热点阅读