版权声明
本文首发于微信公众号
这样和数据相处(zw_life-long_doing)
无需授权即可转载
转载时请注明出处
虽说python只是我们进行数据挖掘和分析的其中一个工具,但前些天,我在解决一个分类问题的时候,就遇见了一个比较尴尬的情况:我到底应该选择哪一个机器学习算法来解决这个问题?
哈哈,我相信提到机器学习,你会有一点点懵逼,什么是机器学习呀?
简单的说,机器学习就是把无序的数据转换成有用的信息。首先,我们要明确一点:绝大多数情况下,我们很难直接从原始数据本身获得自己想要的信息。
比如说,你如何从几百万条邮件数据中知道,哪些是垃圾邮件?又比如说,从双十一的交易数据中,你如何知道哪些消费者在六个月内会在同一家店铺中重复购买?
很明显,单单从这些数据的本身去看,你很难得到自己想要的答案。就拿检测垃圾邮件来说,挨个检测某个词是否存在,可能没有什么意义。但如果几个特定的词同时出现的话,再辅以这条邮件的长度,其实很容易知道该邮件是否属于垃圾邮件。
但总的来说,我们常见的机器学习,有四类:
监督学习;
无监督学习;
半监督学习;
强化学习。
具体的内容可以参见另一篇文章:《
机器学习:探索杂乱无章的世界。
》,所以这里就谈谈目前比较常用的监督学习和无监督学习。
在监督学习中,机器学习的主要任务就是分类。即将实例数据划分到合适的分类中。换句话说,就是按照一定标准,将某对象C,自动分到A和B或更多的对象中去。就比如上个例子说的垃圾邮件检测,就是一个典型的分类问题,类似的,还有购物网站的个性化推荐等等。
除分类外,机器学习在监督学习中,还有一项任务:回归。它主要是用于预测性数值型数据。这里我相信大多数人或多或少见过数据拟合曲线,一条通过给定数据点的最优拟合曲线。它其实就是属于回归范畴,用来预测未知数据点大概率会落在这条拟合曲线的哪个位置。
而与监督学习相对应的便是无监督学习。这里的数据没有类别信息,也不会给定目标值,这是监督学习和无监督学习最大的区别。
在无监督学习中,有两类算法比较常用,一类是聚类,另一个是密度估计。聚类的作用是将数据集合,分成有类似对象组成的多个类的过程。物以类聚,人以群分嘛。而密度估计则是寻找描述数据统计值的过程。
你可能已经发现了,在上图中有很多算法都可用于解决同样的问题,那精通其中一种算法,是否可以处理所有的类似问题呢?
如何选择合适的算法
在选择算法的时候,有两个问题是一定要考虑的:
使用机器学习算法的目的是什么?比如是预测明天下雨的概率还是对投票者按兴趣分组。
需要分析或收集的数据是什么?
首先,来谈谈使用算法的目的。很简单,先确定你是否想要预测目标变量的值。如果是,那就选择监督学习算法;如果不是,则选择无监督学习算法。
倘若我们选择的是监督学习算法,那么,接下来而我们需要进一步的确定目标变量类型。如果目标变量是离散型数据,如是/否、1/2/3或红/黄/黑等,则可以选择分类算法;如果目标变量是连续型的数值,如0~100、-999~999或-∞~+∞等,则需要选择回归算法。
倘若我们选择的是无监督学习算法,我们进一步则需要分析是否需将数据划分为离散的数据组。如果这是唯一的需求,则使用聚类算法;如果还需要估计数据与每个分组的相似程度,那就使用密度估计算法。
但要注意的是,上面的套路符合也只是大多数的情况,不是一层不变的。因为我们很可能会遇见使用分类算法来处理回归问题的情况。后面我会专门写一篇文章来讲这类特殊情况,这里就不过多阐述了。
除了明确我们使用算法的目的外,我们还需要考虑数据问题。换句话说,我们对实际数据了解得越充分,越容易创建符合实际需求的应用程序。一般情况下,我们应该了解数据的以下特征(数据集中每列数据的特征):
特征值是离散型变量还是连续性变量;
特征值中是否存在缺失的值;
是什么原因造成了缺失;
数据中是否存在异常值;
某个特征发生的频率如何,是否罕见,等等。
充分的了解数据,其实不仅可以缩短我们选择机器学习算法的时间,也能让我们在进行数据清洗的时候事半功倍。
客观说,一般并不存在最好的算法或者可以给出最好结果的算法, 所以我们还是需要尝试不同算法的执行结果。对于我们所选的每种算,其实都可以使用其他的机器学习技术来改进其性能。一般说来,发现最好算法的关键环节,是反复试错的迭代过程。
虽然说机器学习算法各不相同,但是使用算法的步骤却是大致相同的,最后就来谈谈使用机器学习算法的通用步骤。
使用算法的通用步骤
1. 收集数据
有很多方法可以获得样本数据。比如爬虫网页数据、来自设备的实测数据等。
2. 准备输入数据
得到数据之后,还须确保数据格式符合要求。比如说一些算法要求目标变量和特征值是字符串类型,而另一些算法则可能要求是整型。
3. 分析输入数据
这一步中,我们除了查看得到的数据是否为空值外,还需要看看数据中是否存在明显的异常值。
通常情况下,用一维、二维或三维图形展示数据是很不错的方法。
4. 训练算法
根据机器学习算法的不同,第4步和第5步是机器学习算法的核心。因为在这一步,我们是将前两步得到的格式化数据输入到算法里面,通过算法来抽取我们想要的信息。
但要注意的是,如果使用的是无监督学习算法,由于它不存在目标变量值,所以也就不需要训练算法,直接进入到第5步。
5. 测试算法
这一步将实际使用第4步中,通过机器学习算法得到的信息。即实际测试算法的工作效果。
对于监督学习,则已知用于评估算法的目标变量值;对于无监督学习,也必须用其他手段来检验算法的成功率。
但,无论是哪种情况,如果不满意算法的输出结果,则返回第4步,改正算法并加以测试。一般说来,问题常常会跟数据的收集和准备有关,这时就得跳回到第1步开始了。
6. 使用算法
来到这一步,就可以将这个算法封装转换成应用程序,执行实际任务了。但如果碰到了新的数据问题,同样需要重复执行上述步骤。
总结一下,本文从如何选择机器学习算法,和应用算法通用步骤这两方面,讲了机器学习算法在从选择到应用的相关套路,希望能对你有所帮助。
下一周,我会着重讲讲在数据清洗中,“特征工程”的重要性和一般套路。敬请期待吧,嘿嘿。