zoukankan      html  css  js  c++  java
  • 机器学习(九)—逻辑回归与SVM区别

     逻辑回归详细推导:http://lib.csdn.net/article/machinelearning/35119

    面试常见问题:https://www.cnblogs.com/ModifyRong/p/7739955.html

    1、LR和SVM有什么相同点

      (1)都是监督分类算法,判别模型;

      (2)LR和SVM都可以处理分类问题,且一般都用于处理线性二分类问题(在改进的情况下可以处理多分类问题);

      (3)两个方法都可以增加不同的正则化项,如L1、L2等等。所以在很多实验中,两种算法的结果是很接近的。

    2、LR和SVM有什么不同点

      (1)本质上是其loss function不同;

      区别在于逻辑回归采用的是Logistical Loss,SVM采用的是hinge loss.这两个损失函数的目的都是增加对分类影响较大的数据点的权重,减少与分类关系较小的数据点的权重。 

      逻辑回归损失函数:

      

      SVM损失函数:

      

      LR方法基于概率理论,假设样本为0或者1的概率可以用sigmoid函数来表示,然后通过极大似然估计的方法估计出参数的值,或者从信息论的角度来看,其是让模型产生的分布P(Y|X)P(Y|X)尽可能接近训练数据的分布;支持向量机​基于几何间隔最大化原理,认为存在最大几何间隔的分类面为最优分类面 。

      (2)SVM只考虑分类面上的点,而LR考虑所有点(远离的点对边界线的确定也起作用

      SVM中,在支持向量之外添加减少任何点都对结果没有影响,而LR则是每一个点都会影响决策。 
      Linear SVM不直接依赖于数据分布,分类平面不受一类点影响 ;LR则是受所有数据点的影响,所以受数据本身分布影响的,如果数据不同类别strongly unbalance,一般需要先对数据做balancing。​

      (3)在解决非线性问题时,支持向量机采用核函数的机制,而LR通常不采用核函数的方法。

      SVM转化为对偶问题后,分类只需要计算与少数几个支持向量的距离,这个在进行复杂核函数计算时优势很明显,能够大大简化模型和计算量。 而LR则每个点都需要两两计算核函数,计算量太过庞大。

      (4)SVM依赖于数据的测度,而LR则不受影响

      因为SVM是基于距离的,而LR是基于概率的,所以LR是不受数据不同维度测度不同的影响,而SVM因为要最小化12||w||212||w||2所以其依赖于不同维度测度的不同,如果差别较大需要做normalization 。当然如果LR要加上正则化时,也是需要normalization一下的 。

      使用梯度下降算法,一般都要 feature scaling,如果不归一化,各维特征的跨度差距很大,目标函数就会是“扁”的,在进行梯度下降的时候,梯度的方向就会偏离最小值的方向,走很多弯路。

      (5)SVM自带结构风险最小化,LR则是经验风险最小化

      SVM的损失函数就自带正则!!!(损失函数中的1/2||w||^2项),这就是为什么SVM是结构风险最小化算法的原因!!!而LR必须另外在损失函数上添加正则项!!!

      以前一直不理解为什么SVM叫做结构风险最小化算法,所谓结构风险最小化,意思就是在训练误差和模型复杂度之间寻求平衡,防止过拟合,从而达到真实误差的最小化。来达到结构风险最小化的目的,最常用的方法就是添加正则项,而SVM自带正则项

      (6)LR和SVM在实际应用的区别

      根据经验来看,对于小规模数据集,SVM的效果要好于LR,但是大数据中,SVM的计算复杂度受到限制,而LR因为训练简单,可以在线训练,所以经常会被大量采用【听今日头条的同学说,他们用LR用的就非常的多】

     转自:简书作者

  • 相关阅读:
    Linux连接字符串
    【aws】
    运行mlflow命令报错 The 'nose' distribution was not found and is required by nose-exclude
    【apt install】Unable to locate package python3-pip
    python package打包发布,安装
    【mlflow】mlflow打包、启动、换用mysql backend、mysql配置
    【mlflow】打包:npm run build + python setup.py sdist
    【css flex】将多个<div>放在同一行
    【react 条件渲染】在render的html中使用 三元运算符 进行条件渲染
    由于无法验证发布者 所以windows阻止此软件
  • 原文地址:https://www.cnblogs.com/eilearn/p/9026851.html
Copyright © 2011-2022 走看看