社区所有版块导航
Python
python开源   Django   Python   DjangoApp   pycharm  
DATA
docker   Elasticsearch  
aigc
aigc   chatgpt  
WEB开发
linux   MongoDB   Redis   DATABASE   NGINX   其他Web框架   web工具   zookeeper   tornado   NoSql   Bootstrap   js   peewee   Git   bottle   IE   MQ   Jquery  
机器学习
机器学习算法  
Python88.com
反馈   公告   社区推广  
产品
短视频  
印度
印度  
Py学习  »  机器学习算法

工业对象的数据建模应慎用机器学习

蝈蝈创新随笔 • 1 月前 • 42 次点击  

多年来,用机器学习方法(特别是神经网络方法)给工业对象建模一直是一种时髦的做法。但我主张慎用这种做法,认为这种方法时髦但不实用。有人或许会举出很多的例子和报道,说这类方法多好。在我看来,这类观点往往是被“幸存者偏差”蒙蔽,各种报道不一定靠谱。由于这个方法时髦,就适合写文章、适合做技术包装,故而相关的报道很多。但现实中用得多好就难说了。其次是:报道说机器学习得到的模型好用。但如果在传统方法上花足够的功夫,或许更好用。“名”和“实”的问题,值得思考。

很多人选用这类方法的一个原因,是传统的建模解决不了问题,只能试试它了,把机器学习当成了一根“救命稻草”。但在我看来:传统建模无法解决的问题,都可以归结为“数据质量”问题,包括数据的完整性、精度、频度、关联关系、分布区域等等。不从这些基础入手,很难解决问题。反之,把基础问题解决了,问题就不一定难了。

我主张慎用的一个重要原因,是工业对象建模的关键不仅仅是精度,还有稳定性、适用范围(所谓的可泛化性)等。对现实问题来说,稳定性往往比精度更重要。一股脑地把数据交给机器去学习一个复杂的函数,就很难保证稳定性和适用性。机器学习得到的模型或许在精度上会稍有提高,但很可能同时会出现过拟合问题。

不用机器学习用什么呢?我推荐用与“近邻方法”相关的方法。如黄金批次方法、CBR方法、KNN等。我把这类方法统称为“跟着学”的算法。这类方法也有许多技巧。比如:跟着谁学?再如,跟着学时需要根据实际情况进行矫正、补偿差异。矫正的方法,也有很多技巧。比如,矫正的时候需要一些矫正系数。这些矫正系数可能会随着时间发生变化。这些变化最好能用数据进行矫正。这种矫正,其实也可以理解为“机器学习”:不过,这样的机器学习往往非常简单。相比把整个模型进行机器学习,实践中要有效得多。

我有个经验:老方法往往难以解决老问题——除非有新的技术条件。在我的脑子里,“机器学习”其实已经是老方法了。所以,机器学习很难有好的效果。但“跟着学”这类方法往往更老,为什么会有效呢?因为这类方法的应用,往往伴随新的技术条件:工业大数据。容易理解:历史数据足够多的时候,才能找到合适的、“跟着学”的数据。过去,这个条件并不容易具备。现在,条件不一样了。

今天和朋友聊天时,谈到一个观点:大数据往往来自于多个对象的数据。模型本质是可以看成是对这些数据和信息的压缩。在压缩过程中,难免有信息的丢失。要把模型做得更好,可以考虑直接利用特定对象的(未经压缩的)历史数据,以便于对模型计算进行修正。

我打了个比方:模型就像一个掌握知识的大夫,他的知识来源于很多的病人。他可以利用知识,结合病人的检查、检测报告看病。但是,如果大夫了解病人的病史、个人的工作、营养和健康情况,应该能做出更好的判断。这就是利用特定对象的历史数据。这类算法也应该是依赖于大数据的,但现实中的应用似乎不多。


Python社区是高质量的Python/Django开发社区
本文地址:http://www.python88.com/topic/176893
 
42 次点击