逻辑回归与线性回归

逻辑回归 线性回归
目标函数 $\prod_{i=1}^N[\pi(x_i)^{y_i}][(1-\pi(x_i))^{(1-y_i)}] $ \(\frac{1}{2}\sum_{i=1}^N(\hat{y_i}-y_i)^2\)
输出 离散值(分类) 连续值(回归)
求解 对似然函数求导,交叉熵 最小均方差求导

联系:

  • 输出是从连续值到离散值的映射

    \(\pi(x)=p(y=1|x)=\frac{exp(wx)}{1+exp(wx)}=\frac{1}{1+exp(-wx)}\),sigmoid激活函数将输出的连续值变成了离散值,在没有sigmoid函数时,输出就是\(wx\), 和回归的输出一样。

  • 求解时都可以使用梯度下降

逻辑回归

1.建立目标函数

设 \(P(y=1|x) = \pi(x), P(y=0|x) = 1-\pi(x)\)

似然函数为:

\[\prod_{i=1}^N[\pi(x_i)^{y_i}][(1-\pi(x_i))^{(1-y_i)}]
\]

对数似然函数:

\[\begin{aligned}
L(w) &= \sum y_ilog(\pi(x_i))+(1-y_i)log(1-\pi(x_i)) \\
&= \sum y_ilog(\pi(x_i))+log(1-\pi(x_i))-y_ilog(1-\pi(x_i)) \\
&= \sum y_i(log\frac{\pi(x_i)}{1-\pi(x_i)})+log(1-\pi(x_i)) \\
&= \sum y_i(wx_i)-log(1+exp(wx_i))
\end{aligned}
\]

2. 梯度求解

\[\begin{aligned}
\nabla L(w) &= \sum y_ix_i - \frac{x_iexp(wx_i)}{1+exp(wx_i)}
\end{aligned}
\]

求极大值,用梯度上升:

\[w = w + \alpha \nabla L(w)
\]

3. 实现

"""
只写了核心部分
"""
def fit(x,y,n_iter):
cal_gradient(x,y,alpha,n_iter) def cal_grdient(x,y,alpha,n_iter):
"""sgd
"""
w = np.ones(len(x))
for i in range(n_iter):
for xi,yi in zip(x,y):
grdient = (xi*yi-xi*(np.exp(w*xi)/(1+np.exp(w*x_i))))
w = w + alpha*gradient
return w def loss(y,y_hat):
pass def predict(x):
y_hat = w*x

线性回归

1. 建立目标函数

\[J(w) = \frac{1}{2}\sum(\hat y - y)^2
\]

2. 求解

\[\begin{aligned}
\nabla J(w) &= \sum (\hat y_i - y_i) \frac{\partial\hat y}{\partial w} \\
&= \sum (\hat y_i - y)x_i
\end{aligned}
\]

求极小值,使用梯度下降:

\[w = w - \alpha \nabla J(w)
\]

3. 实现

和逻辑回归比,只改变了求梯度方法

"""
只写了核心部分
"""
def fit(x,y,n_iter):
cal_gradient(x,y,alpha,n_iter) def cal_grdient(x,y,alpha,n_iter):
"""sgd
"""
w = np.ones(len(x))
for i in range(n_iter):
for xi,yi in zip(x,y):
grdient = xi*(w*xi-yi)
w = w + alpha*gradient
return w def loss(y,y_hat):
pass def predict(x):
y_hat = w*x

逻辑回归与交叉熵

熵:

  • 信息熵:衡量信息量大小

    \[H(x) = -\sum^n_{i=1}p(x_i)log(p(x_i))
    \]

    为什么取负号?

    概率值越大,信息量越小(倾向于确定事件)

  • 相对熵(KL散度):衡量两个概率分布间差异

    \[D_{KL}(p||q) =\sum^n_{i=1}p(x_i)log(\frac{p(x_i)}{q(x_i)})
    \]

    KL散度越小,表示\(p(x)\)与\(q(x)\)的分布更加接近

  • 交叉熵

    \[H(p,q) = -\sum^n_{i=1}p(x_i)log(q(x_i))
    \]

    为什么使用交叉熵作为损失函数?

    KL散度衡量真实分布与预测之间的差异,需要最小化KL散度。KL = 交叉熵 - 信息熵,给定原样本分布 p 时,信息熵为常量,所以最小化交叉熵即为最小化KL散度。

对 0-1 分布,假设预测概率为p,交叉熵为:

\[-\sum ylog(p)+(1-y)log(1-p)
\]

而逻辑回归似然函数为

\[L(w) = \sum [y_ilog(\pi (x_i))+(1-y_i)log(1-\pi(x_i))]
\]

极大化似然函数相当于极小化交叉熵。

references:

机器学习实战

统计机器学习

https://blog.csdn.net/b1055077005/article/details/100152102

最新文章

  1. MySql数据库4【命令行赋权操作】
  2. Java面试题之weblogic相关问题
  3. LPC1788的IIC使用
  4. Codefoces 723A The New Year: Meeting Friends
  5. hi3531的pcie atu资源重映射
  6. PHP Ajax JavaScript Json 实现天气信息获取
  7. centos7下安装docker(15.7容器跨主机网络---calico)
  8. --save 与--save-dev的区别
  9. SpringDataSolr 过滤(或者叫筛选)查询
  10. ANSYS渡槽槽身动水压力的施加(2)——U型渡槽
  11. Informatica 常用组件Filter之二 过滤条件
  12. JavaScript权威指南--window对象
  13. SharePoint2007深入浅出——使用jQuery UI
  14. 4.26-python学习笔记(变量及命名、字符串、格式化字符串print,format,%...)
  15. 用C#实现对MSSqlServer数据库的增删改查---DAL层
  16. Linux -- 用户篇
  17. 刷题中熟悉Shell命令之Tenth Line和Transpose File [leetcode]
  18. java 执行 class
  19. python核心编程2 第九章 练习
  20. Java前端Rsa公钥加密,后端Rsa私钥解密(支持字符和中文)

热门文章

  1. pandas 几个重要知识点
  2. 第七章 vuex专题
  3. luogu P3645 [APIO2015]雅加达的摩天楼 分块 根号分治
  4. 4.9 省选模拟赛 圆圈游戏 树形dp set优化建图
  5. Selenium多窗口切换代码
  6. [转] Java Agent使用详解
  7. Qt 乱码
  8. xml schema杂谈
  9. C++虚函数相关内容
  10. 《Spanner: Google’s Globally-Distributed Database》论文总结