算法诊断,分析与优化等

通常我们在解决问题时,对算法的态度是:

“嗯嗯,这个算法有用,效果不错。”

“不行,这个效果太差。不过发现另外有个表现不错,可以使用。”

但是从研究算法,学习算法的角度上面讲,这种态度显然是非常不可取的。要学习算法,就要学会使用批判的眼光去看待算法。Mindhacks刘未朋也多次提到他学习算法的经验,一定要推导算法,思考算法为什么这么做,这么做是不是最优的,用另一种方法可不可以,其他方法为什么不如这种算法。而且往往一个经典算法之中都隐藏着一些十分让人意想不到的Points,这些Points是我们必须投入大量精力思考的地方,因为有可能这些神来之笔日后能发挥更大作用。

假如你遇到一个问题,使用了某种算法,但是这种算法表现并不能接受。那么我们该怎么办呢?彻底抛弃寻找其他方法?当然这也是一个解决问题的途径。不过从学习角度讲,我们更应该学会 算法诊断,错误分析 等,这个需要个人学习中慢慢形成自己独到的解决算法不合理问题的能力。

这里简单列举一些我们或许常用的算法优化,诊断,排错方法:

例如拦截垃圾邮件的算法诊断——variance和bias,这两种情况可以从结果中看出来。variance类疾病通常是对训练数据效果不错,而对测试数据效果不好,这种问题可能的原因就是训练数据少等等。而另一种bias类疾病通常算法对训练数据和测试数据表现都不好,那就很可能是特征集选取不合适等原因造成的。另外也有可能遇到算法不converging的问题,这个就需要对算法多次迭代来发现问题,很可能是模型参数问题。

 

例如人脸识别的错误分析

为了识别人脸,算法采用了很多步骤。这种情况下通常要观察整体与各个部分的表现与完美的表现之间的差距,把握各部分对总体表现的影响。通常也会有移除一个部分,观察整体表现,分析移除部分的影响等办法。

 

算法优化方面,通常比较强调算法复杂度,因为复杂度也与处理速度相关联。目前机器学习的算法的复杂度很多时候都集中于大数据量的搜索上面。这里提一下二叉树这种结构,这种结构很好,为什么好,因为二叉树这种结构十分平衡,平衡的意思就是,当你每进行一次搜索,就必然可以排除一半的错误路径,所以整个结构搜索起来快。那么算法优化其实也需要时刻注意整个思想,算法在搜索过程中是不是平衡的,当然不一定全部都是二叉树,根据结果集的元素也可以三叉,四叉,重点是要保证每次搜索都能够排除一部分(最好是均衡的一部分)错误路径。

 

然后就是算法设计,通常采用两种方式:1 仔细认真设计算法,最后实施;2 迅速用一个简单方案实施,然后找其中的缺陷来修正。

第一种方法很慢,但是适于创造性的发现新算法;

第二种则依靠前面提到的那些诊断,分析方法,来实现一个好的应用算法,耗费时间较短,比较受到工程应用的青睐。

  • 0
    点赞
  • 0
    收藏
    觉得还不错? 一键收藏
  • 0
    评论
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值