• 逻辑回归与线性回归


    逻辑回归与线性回归

    逻辑回归 线性回归
    目标函数 $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)}] ]

    对数似然函数:

    [egin{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(logfrac{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.梯度求解

    [egin{aligned} abla L(w) &= sum y_ix_i - frac{x_iexp(wx_i)}{1+exp(wx_i)}\ &= x_isum y_i - frac{exp(wx_i)}{1+exp(wx_i)}\ &= x_i*errorend{aligned} ]

    求极大值,用梯度上升:

    [w = w + alpha abla 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. 求解

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

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

    [w = w - alpha abla 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

  • 相关阅读:
    Linux上Blogilo连接博客园账户
    字符串模式匹配KMP算法
    回溯法之n皇后问题
    回溯法之k着色问题
    动态规划之最短路径(Floyd算法)
    动态规划之最长公共子序列
    动态规划之矩阵链乘
    New home
    POJ 2478:Farey Sequence
    Codeforces Round #416 (Div. 2)
  • 原文地址:https://www.cnblogs.com/gongyanzh/p/13570338.html
Copyright © 2020-2023  润新知