最近在写深度学习的程序,遇到一些瓶颈,多方咨询下大牛的经验,无果,找到了一篇机器学习心得,为了不浪费,翻译后贴出来吧(这不是学术文章,搞学术的可以绕道):
项目失败在IT中太常见了。如果在你公司里使用一项你们不熟悉的技术,那风险很高。机器学习在学术界出现很长时间了,但是走进公司并且让公司尝到甜头也是最近几年的事情。因此正确使用机器学习在工业界还有很大的潜力,能使得公司降低开销,开辟新径,但是它仍然有一些陷阱要注意。
这篇文章就是帮你有效的使用机器学习来解决实际问题,我会结合我自身多年工业界的经验来说一下机器学习应用中会出现的问题,虽然我是做文本分析的,但是我相信我的经验和教训是可以推广到其他机器学习领域的。我已经可以成功的把机器学习用在实际项目中,并且可以带来很大收益,我相信我也可以让你和我一样。
我就假设你有机器学习基础并且你要用它来解决实际问题,这篇不是介绍机器学习的文章,网上已经有很多了,但是放心,我不会假设你是个机器学习专家。大量的建议是非技术的,并且对那些想把机器学习作为自己项目问题求解一个手段的project manager也挺有用。下面就来说说题目中的七步方法:
理解商业需求对任何项目都重要,但这点往往又很容易因为技术可能性被蒙蔽。我们会去嘀咕:机器学习真的能为公司带来效益?或者机器学习那些简单的规则真的可以厉害?记住我们的目标是找到商业需求的一个解,而不是为了目标去做机器学习(研发人员可以选择性忽略这句话)。
试着鉴别所有的对项目重要的度量准则,下面会说有哪些机器学习度量准则。这些我们需要优化的度量准则对我们的问题求解有着大很大影响。它们也会影响我们如何选择机器学习方法。
比如在分类问题中,一些要考虑的度量准则有:
准确度(accuracy):被分类正确实例(样本)的百分比。注意这个数字会被正负样本比例的不均匀所误导(如果样本中90%都来自于同一类别1,这里应该是测试样本)那么我们简单的对它们分类后,我们估计类别1的准确度大约为90%,但是这个准确度会误导我们,因此我们要平均的考虑每个类别的,或者用其他的度量准则。
高精度(high precision)被用来作为度量准则:当我们需要系统返回的结构看起来都是好的,不需要太多的手工成分再去挑拣,允许系统丢掉一些正确的成分,但是返回的结果包含的负成分不要太多。
高召回率(high recall)则是另外一种情况,当商业需求要求正确的成分很高时,高召回率则是要着重考虑的情况。
F1 score:F1评分则是在高精度和高召回率之间的一个平衡。F1分最高时,二者平衡最好。
小例子:DE(Direct Electric)公司的客服邮件
DE是一家坐落于南英格兰大型电力公司。Dave是客服主管,他关心的是客服回应客户邮件的速度,他要确保当客户发来一封投诉的生气邮件时,客服可以快速的响应这一类客户。“原来需要两天的回复时间,现在我要降到半天”,Dave对他的机器学习专家Samantha这样说。Dave听说机器学习可以做情感分析,可以让机器快速定位生气的邮件,但是Samantha说机器学习并不可能百分百定位出所有都是生气的邮件,通过分析需求,Dave认为他可以接受机器学习检测出非生气的邮件,但是生气的邮件要检测出来尽可能的多,然后让客服在小范围内回复生气的邮件,因此Samantha此时决定采用高召回率的情形。
首先非技术人员要知道,机器学习不可能全部事都可以解决,他不可能帮你刷碗洗衣服,机器学习只是一个减少工作量的手段,项目中或多或少要有手工成分再里面。(由于这段话客观的贬低了机器学习从业者的功劳以及没有发展中的看待问题,因此决定不在翻译,反正就是在说一定要有手工成分在里面)。
1、数据的什么特征才和目标解有关系?数据结构是什么样子的?怎么样得到数据?
2、在分类问题中,数据是否不均匀,有偏移(biased)?比如在大量的邮件中,或许只有0.01%的邮件是带有负面情绪的邮件。此时如果需要构建一个高精度的机器学习系统会变得很困难。
3、数据随着时间会出现怎样的变化?如果数据随着时间变的和原来的训练数据一点都不像了,此时就要考虑是否要重新收集训练数据训练模型?或者做成在线学习系统。
4、是否有分层次的规律?比如不同部门的邮件考虑的内容不一样,表达的负面情绪也可能不一样,此时要考虑下是否要针对不同的部门的邮件数据分别训练?
有的时候不需要机器学习,通过仔细的分析数据,就可能会改善公司的运作(跑题)。
当把机器学习集成在公司系统中时,有几点需要注意:
机器学习模块怎么和现在的系统匹配?手工操作是否有必要在机器学习之上?如果这样做,什么时候会做这些变换?这些工作要包含什么?谁可能做这些工作?
如果机器学习被嵌入在一个十分复杂的系统里讲会是一个十分挑战的工作,什么技术变化需要被用到?机器学习判断是否需要被监视?是否需要有人决定是否机器学习模块可被停用?机器学习模型什么时候需要重新训练?是否需要调整业务流程来收集新的训练数据训练模型来改善现在的业务?(软件工程这一套)
这句格言在其他地方经常被用到,软件工程也是,因此对待机器学习向软件工程一样,“过早优化是万恶之源”在软件工程里经常被听到,在软件工程里,要构建一个鲁邦漂亮的系统,需要用到一些常识:瓶颈会在你不期望的地方出现,如果可能,按规模逐步的剔除他们。用大O估计可能的优化方法,尽量去估计数据集的大小并且验证存储方案是否合适。
最大的风险就是项目不能交付,下一个风险就是项目交付了,不好用。做好项目管理和测试。
七、多用常识
记住未来的数据和现在的数据会不一样,如果你要用机器学习替换一些手工操作,你要去自己体会这些过程,里面会有些人不会做的,因为那是常识,因此也不要让机器去做这些事情。
文中很多没有经历过,营养也不是很高,可以作为自检备忘录,译错请指正。
译自:Seven Steps to Success Machine Learning in Practice.Daoud Clarke