首先回顾了几个Linear Model的共性:都是算出来一个score,然后做某种变化处理。

既然Linear Model有各种好处(训练时间,公式简单),那如何把Linear Regression给应用到Classification的问题上呢?到底能不能迁移呢?

总结了如下的集中Linear Model的error functions的表达式:

这里都提炼出来了ys这一项,y表示需要更正的方向{+1,-1},s表示需要更正的幅度(score)

三种error function可以这么理解:

(1)0/1 error : 幅度s固定,y表示方向

(2)square error : y很正或很负,error都非常大(注意这里只需要y很大或很下,error就收不住了);只有当ys很接近1的时候,error才可能接近0

(3)cross-entropy error : 如果ys很负的话,那么error就无穷大;如果ys很正的话,那么error无限接近0

再画出几种model的error function,可以看到:

(1)square error是不太合适的,ys>>1的时候,error衡量的过了,不合适。

(2)cross-entropy error也不太合适,因为在0到-1之间位于0/1 error下面了

如果想合适的话,可以对cross-entropy进行放缩:把ln换成log2,就OK了。

这里有个Point值得关注,为啥要放缩呢?错误率低不是更好么?

其实这跟目的有关:

(1)首先我们的目的是要用regression来代替classification(为啥要替代?因为PLA/Pocket是NP-hard的问题,不好整;而Linear Model在最优化之后,求解比较容易了),如果regression和classification在性能上差不多,那就可以替代了。

(2)因此,我们把cross-entropy error来scale成0/1 error的upper bound,目的就是让cross-entropy error低的时候,0/1error也低,放缩一下是为了说bound住这个事情。

再简单些就是说,如果实际中linear model用regression给出来的方法分类效果好,那么PLA/Pocket分类效果也好。

接下来对比了PLA、Linear Regression 和 Logistic Regression的方法优缺点:

(1)PLA:线性可分时候很犀利;如果不可分,那就只好Pocket

(2)Linear Regression:最优化可以求出来analytics close solution;但是当|ys|很大的时候,positive direction和negative direction的bound都太松太松了

(3)Logistic Regression:gradient descent可以求解;但是negatvie direction方向bound比较松

总结一些实际经验:linear regression可以作为PLA/Pocket/Logistic Regression的初始值设置。

接下来讲了一种Stochastic Gradient Descent的方法:

(1)原来是所有点在算梯度,然后取平均,再更新w;随机梯度下降,是不用每次算所有点了,每次算一个点,用这个点代替所有点的平均。

(2)敢这么做的原因:是因为 stochastic gradient = true gradient + zero-mean 'noise' directions;因为是zero-mean的noise,所以可以得到average true gradient ≈ average stochastic gradient

(3)SGD方法在logistic regression的应用公式,非常像PLA的公式

(4)从实际情况出发,一般迭代次数达到一定,可以认为SGD已经获得了最佳的结果;ita在实际经验中,一般取值为0.1左右合适。

随后,由binary classification问题延伸到了multiclass的问题,总体来说有两种方法:

1. One-Versus-ALL (OVA) Decomposition

意思就是

(1)每次把一个class和非这个class的当成目标两类,用logistic regression分这两类

(2)分类时输入某个点,然后看这个点上取哪一类的概率最大

这里有一点点儿问题:(2)点中不一定所有类别的概率和是1,虽然实际中影响不大,但是统计学的还是有严谨的方法(multinomial logistic regression)

当类别很多的时候(比如,K=100)那么,每次用logistic regression的时候,正样本和负样本的差别非常大,这样不容易得出正确结果。

为了解决OVA的unbalance问题:每次只取两个类,一共有K类,做C(K,2)次logistic regression就OK了;当给一个输入点的时候,用这C(K,2)个分类器给所有K个类别投票,取票数大的作为输出结果。

这种方法的缺点是:可能效率会低一些(K次变成C(K,2)次)。

但是,如果类别很多,每一类的样本量都差不多的时候,其实OVO的方法不一定比OVA方法效率低。

最新文章

  1. [WinForm]WinForm跨线程UI操作常用控件类大全
  2. 使用sublime遇到的问题汇总
  3. easy ui 框架
  4. Bubble Sort_树状数组
  5. Gradle basic
  6. RectAnimation用于在DrawingVisual画进度条
  7. UTF-8
  8. 数列F[19] + F[13]的值
  9. Magento模板Paypal付款不成功返回清空购物车产品【解决方案】
  10. java中四种引用类型(转)
  11. Struts2中的session、request、respsonse获取方法
  12. 通过WebApi取出XML数据
  13. Esper系列(九)NamedWindow语法create、Insert、select
  14. Sqlserver2012数据库乱码的解决方法
  15. Redmine开启服务
  16. JavaScript的DOM编程--11--插入节点
  17. java通过数据库连接池链接oracle
  18. MFC超链接
  19. Win10系列:VC++媒体播放控制3
  20. jssor/slider图片的问题

热门文章

  1. 在WINDOWS下安装PEAR
  2. IOS 制作动画代码和 设置控件透明度
  3. 指定类型的成员XX”不支持实体LINQ。只有初始化,成员单位,和实体导航性能的支持。
  4. @RequiresPermissionss是否可以填写多种权限标识,只要满足其一就可以访问?
  5. ARM是CPU体系结构
  6. iOS圆角view的Swift实现(利用Core Graphics绘制)
  7. Redis 4.0 从节点写入不同步问题
  8. 银行卡验证API
  9. lnamp高性能架构之apache和nginx的整合
  10. java-访问控制修饰符