逻辑回归与线性回归
目录
- 逻辑回归与线性回归
- 逻辑回归
- 1.建立目标函数
- 2.梯度求解
- 3. 实现
- 线性回归
- 1. 建立目标函数
- 2. 求解
- 3. 实现
- 逻辑回归与交叉熵
逻辑回归与线性回归
逻辑回归 | 线性回归 | |
---|---|---|
目标函数 | $\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)}\\ &= x_i\sum y_i - \frac{exp(wx_i)}{1+exp(wx_i)}\\ &= x_i*error\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-(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