zoukankan      html  css  js  c++  java
  • 线性回归和Logistic回归


    线性回归

    • 假设存在线性相关关系:(y=a+bx)

    均方误差是回归任务中最常用的性能度量指标。因此,其损失函数为:

    [J(a,b)=frac{1}{2m}sum_{i=1}^{m}(y^{'(i)}-y^{(i)})^2=frac{1}{2m}sum_{i=1}^{m}(a+bx^{(i)}-y^{(i)})^2 ]

    其中,(y')为预测值,(y)为实际值。

    (J(a,b))中,(x^{(i)})(y^{(i)})是常量参数(为(m)个样本各自的(x)(y)值),而(a)(b)是自变量。我们要做的,就是找到最好的(a)(b),使得(J(a,b))取值最小。


    通用线性回归模型:利用线性函数对一个或多个自变量((x)((x_1,x_2,cdots,x_k)))和因变量(y)之间的关系进行拟合的模型。

    其函数形式为:

    [f(x_1,x_2,cdots,x_k)=a+b_1x_1+b_2x_2+cdots + b_kx_k ]

    (b)直观表达了各属性在预测中的重要性。因此,线性模型有很好的可解释性(comprehensibility)。

    对离散属性,若属性值间存在序关系,可通过连续化将其转化为连续值。例如,二值属性“高”、“矮”可转化为({1.0, 0.0})。三值属性“高”、“中”、“低”可转化为({1.0, 0.5, 0.0})

    若属性值间不存在序关系,假定有(k)个属性值,则通常可转化为(k)维向量。如“西瓜”、“南瓜”、“黄瓜”可转化为((0,0,1), (0,1,0), (1,0,0))。若将无序属性连续化,则会不恰当地引入序关系。


    用线性回归模型拟合非线性关系

    (x_1=x^2)(x_2=x),有:

    [f(x_1,x_2)=a+b_1x^2+b_2x=a+b_1x_1+b_2x_2 ]

    这时,就相当于拟合了一条二阶多项式对应的曲线。


    梯度下降法

    梯度下降法:从任意点开始,在该点对目标函数求导,沿着导数方向走一个给定步长,如此循环迭代,直至走到导数为0的位置,则达到极小值。

    函数(J)分别对自变量(a)(b)取偏微分:

    [frac{partial J(a,b)}{partial a}=frac{1}{m}sum_{i=1}^{m}((a+bx^{(i)})-y^{(i)}) ]

    [frac{partial J(a,b)}{partial b}=frac{1}{m}sum_{i=1}^{m}x^{(i)}((a+bx^{(i)})-y^{(i)}) ]

    1. 任意给定(a)(b)的初始值。

    [a=0; b=0 ]

    1. 用梯度下降法求解(a)(b),伪代码如下:

    [repeat until convergence { a = a - alpha frac{partial J(a,b)}{partial a}, b = b-alpha frac{partial J(a,b)}{partial b} } ]

    当下降的高度小于某个给定的阈值时,则停止下降。

    上述伪代码又可表示为:

    [repeat until convergence { \ sumA = 0, \ sumB = 0,\ for i = 1 to m { \ sumA = sumA + (a+bx^{(i)}-y^{(i)}), \ sumB = sumB + x^{(i)}(a+bx^{(i)}-y^{(i)}) }\ a = a - alpha frac{sumA}{m},\ b = b - alpha frac{sumB}{m} } ]

    • 超参数(alpha):是梯度下降算法中的步长参数,必须人来手工指定。
    • 如果训练程序是通过人工指定迭代次数来确定退出程序,则迭代次数也是一个超参数。
    • 如果训练程序以模型结果与真实结果的整体差值小于某一个阈值为退出条件,则这个阈值就是超参数。

    ( heta_0)来替代(a),用( heta_1)( heta_n)来代替(b_1)(b_n),则线性回归模型变为:

    [f(1,x_1,x_2,cdots,x_n)= heta_0 + heta_1x_1+ heta_2x_2+cdots + heta_nx_n ]

    对应的目标函数为:

    [J( heta_0, heta_1,cdots, heta_n)=frac{1}{2m}sum_{i=1}^{m}(y'^{(i)}-y^{(i)})^2 ]

    梯度下降的实现过程为:

    [repeat until convergence { Theta = Theta - alpha frac{partial J( heta)}{partial heta} } ]


    最小二乘法

    (B=(b;a)),将数据集表示为一个(m imes (k+1))大小的矩阵(X),其中每一行对应一个示例。每行的前(k)个元素对应示例的属性值,最后一个元素恒为1。则有:

    [J(B) = (Y-XB)^T(Y-XB) ]

    (B)求导,得:

    [frac{partial J}{partial B}=2X^T(XB-Y) ]

    (X^TX)为满秩矩阵时,令上式为零,可得:

    [B^*=(X^TX)^{-1}X^TY ]

    而在现实中,(X^TX)经常不是满秩的,此时可解出多个(B),都能使均方误差最小化。选择哪一个解作为输出,将由学习算法的归纳偏好决定,如引入正则化(regularization)项。


    线性回归用于分类(logistic regression,LR)

    找一个单调可微函数将分类任务的真实标记(y)与线性回归模型的预测值联系起来。引入对数几率函数(logistic function)

    [h=frac{1}{1+e^{-z}} ]

    可得到:$$h(x)=frac{1}{1+e{-wTx+b}}$$

    • 可直接对分类可能性进行建模,无需事先假设数据分布,这样就避免了假设分布不准确所带来的问题。
    • 可得到近似概率的预测。

    一般而言,当(y>0.5)时,(x)被归类为真或阳性;否则,当(y leq0.5)时,(x)被归类为假或阴性。

    因此,LR典型的应用于二分类问题上。

    该模型函数在(y=0.5)附近非常敏感,自变量取值稍有不同,因变量取值就会有很大差异,所有不用担心出现大量因细微特征差异而被归错类的情况。


    • 任何事情,上来先做个线性回归,即使无法得出结论,也不会消耗太多资源。
    • 非线性模型对于计算量的需求远大于线性模型。

    目标函数

    求解LR目标函数的过程,就是对LR模型函数进行极大似然估计的过程。

    (h(x))实际上是(x)为阳性的分布概率,所以,才会在(h(x)>0.5)时将(x)归于阳性。即(h(x)=P(y=1))。反之,样例是阴性的概率为:(P(y=0)=1-h(x))

    它们由训练数据(x)所限定,因此,

    [P(y=1|x)=h(x); \ P(y=0|x)=1-h(x) ]

    根据二项分布公式,可得:

    [P(y|x)=h(x)^y(1-h(x))^{(1-y)} ]

    假设训练集有(m)个数据,那么其联合概率为:

    [L( heta)=prod_{i=1}^mP(y^{(i)}|x^{(i)}; heta)=prod_{i=1}^m(h_{ heta}(x^{(i)}))^{y^{(i)}}(1-h_{ heta}(x^{(i)}))^{(1-y^{(i)})} ]

    求取( heta)的值,就是让(L( heta))达到最大。

    求对数,得到对数似然函数:

    [l( heta)=log(L( heta))=sum_{i=1}^m[y^{(i)}log(h_{ heta}(x^{(i)}))+(1-y^{(i)})log(1-h_{ heta}(x^{(i)}))] ]

    求出让(l( heta))最大值的( heta)

    由于,我们需要的是目标函数具有最小值,因此,设定:

    [J( heta)=-l( heta) ]

    (J( heta))为负对数似然函数,为LR的目标函数。


    如何求解( heta)

    • 通过对(J( heta))求导获得下降方向——(J'( heta))
    • 根据预设的步长(alpha),更新参数( heta:= heta-alpha J'( heta))
    • 重复以上两步直到逼近最优值,满足终止条件。

    [frac{partial J( heta)}{partial heta_j}=sum_{i=1}^{m}[h_{ heta}(x^{(i)})-y^{(i)}]x_j^{(i)}; j = 1,2,cdots,n ]


    LR处理多分类问题

    把二分类问题分成多次来做。

    假设一共有(n)个类别,就构造(n)个LR分类模型。第一个模型用来区分label_1non-label_1;第二个模型用来区分label-2non-label_2;第(n)个模型用来区分label_nnon_label_n

    使用时,每个输入数据都被这(n)个模型同时预测。最后,哪个模型得出了Positive结果,且预测值最大,就是该数据最终的结果。

  • 相关阅读:
    数据对齐
    算法面试题集——从各大博客收集
    软件工程师规划
    链栈,顺序栈,单链队列,循环队列,非循环队列的简单实现
    C,C++文件和目录操作的一些整理
    WPF使用笔记-计时器,多线程更新界面,焦点移动等
    Heap Data Structure and Heap Sort
    YUV420P像素数据编码为JPEG图片
    根据txt文件中指定的文件名进行文件分类
    MFC显示图片和写入文件
  • 原文地址:https://www.cnblogs.com/wjq-Law/p/9779651.html
Copyright © 2011-2022 走看看