机器学习跟通常的编程开发比较有什么差别?
我们一般接触到的编程开发一般都是根据规则编写程序代码,然后录入数据后按照规则运算结果。而机器学习是根据数据和对应的结果去找规则,找出的规则就可以用来分析处理新的数据。这就是通常的软件开发跟机器学习的主要差别。
举个例子说明一下,比如经典的鸢尾花案例,这个案例在很多机器学习的教材里都能看到。这个案例收集了很多数据,主要是花瓣的几个特征值,以及对应花的种类。花瓣的特征值就是数据,而花的种类就是对应结果。那就可以用机器学习对这些数据做学习,希望能找出背后的规则,也就是当特征值满足什么条件时就说明它属于某个种类。
而通常的软件开发是先人工分析这些数据,寻找内在的规律,总结出规则,然后让开发人员根据规则编写程序代码。
机器学习存在的一个主要问题
这种根据数据找规则的方式有个潜在的问题,因为它是基于已有的数据,并非是全部数据,所以难免会碰到新的数据新的规则的情况,这就有准确率的问题,也就是说老的规则判断新数据时出错。这就需要持续不断地学习,把新的数据和对应结果作为新的输入,让机器学习继续寻找规则,到达一定准确率后就可以发挥较大的价值了。
其实通常的软件开发在一开始靠人工分析找出的规则也难免会有误差的,后面也需要根据新的情况不断完善规则提高准确率,这就要不断改进程序代码。
总结及深入
我们已经了解到机器学习是根据数据找规则,并且需要持续学习不断完善规则。机器学习有很多比较成熟的算法,大致分为有监督、无监督和强化学习几个类别。有监督的意思是有数据有结果,然后找内在的规则,就像上面鸢尾花的案例。无监督的意思是只有数据,需要找结果和规则,例如我们有很多会员,需要自动分类。强化学习是一个比较特定的领域,像自动驾驶就属于这个领域,需要根据数据输入很快反馈并不断改进规则。